Compartir a través de


Filtrado de datos mediante la aceleración de consultas de Azure Data Lake Storage

En este artículo se muestra cómo usar la aceleración de consultas para recuperar un subconjunto de datos de la cuenta de almacenamiento.

La aceleración de consultas permite tanto a las aplicaciones como a los marcos de análisis optimizar considerablemente el procesamiento de datos mediante la recuperación solo de los datos necesarios para realizar una operación determinada. Para más información, consulte Aceleración de consultas de Azure Data Lake Storage.

Prerrequisitos

  • Para acceder a Azure Storage, necesitará una suscripción de Azure. Si todavía no tiene una suscripción, cree una cuenta gratuita antes de empezar.

  • Una cuenta de almacenamiento de uso general v2. consulte Creación de una cuenta de almacenamiento.

  • No se admite el cifrado doble.

  • Si está consultando un archivo JSON, cada tamaño de registro de este archivo debe ser menor que 1 MB.

  • Elija una pestaña para ver los requisitos previos específicos del SDK.

    No aplicable


Configuración del entorno

Paso 1: Instalar paquetes

Instale la versión 4.6.0 o posterior del módulo Az.

Install-Module -Name Az -Repository PSGallery -Force

Para actualizar desde una versión anterior de Az, ejecute el siguiente comando:

Update-Module -Name Az

Paso 2: Agregar instrucciones

No aplicable

Recuperación de datos mediante un filtro

Puede usar SQL para especificar los predicados de filtro de fila y las proyecciones de columna en una solicitud de aceleración de consultas. En el código siguiente se consulta un archivo CSV en el almacenamiento y se devuelven todas las filas de datos en las que la tercera columna coincide con el valor Hemingway, Ernest.

  • En la consulta SQL, se usa la palabra clave BlobStorage para indicar el archivo que se consulta.

  • Las referencias de columna se especifican como _N, donde la primera columna es _1. Si el archivo de origen contiene una fila de encabezado, puede hacer referencia a columnas por el nombre especificado en la fila de encabezado.

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader) -ResultFile $tempfile.FullName -QueryString $query -Force
    Get-Content $tempfile.FullName
}

$container = "data"
$blob = "csv/csv-general/seattle-library.csv"
Get-QueryCsv $ctx $container $blob "SELECT * FROM BlobStorage WHERE _3 = 'Hemingway, Ernest, 1899-1961'" $false

Recuperación de columnas específicas

Puede limitar los resultados a un subconjunto de columnas. De este modo, solo recuperará las columnas necesarias para realizar un cálculo determinado. Esto mejora el rendimiento de la aplicación y reduce el costo porque se transfieren menos datos a través de la red.

Nota:

El número máximo de columnas a las que se pueden ampliar los resultados es 49. Si necesita que los resultados contengan más de 49 columnas, use un carácter comodín (*) para la expresión SELECT (por ejemplo: SELECT *).

Este código recupera solo la columna BibNum de todos los libros del conjunto de datos. También usa la información de la fila de encabezado del archivo de origen para hacer referencia a columnas de la consulta.

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader) -ResultFile $tempfile.FullName -QueryString $query -Force
    Get-Content $tempfile.FullName
}

$container = "data"
$blob = "csv/csv-general/seattle-library-with-headers.csv"
Get-QueryCsv $ctx $container $blob "SELECT BibNum FROM BlobStorage" $true

El código siguiente combina el filtrado de filas y las proyecciones de columna en la misma consulta.

Get-QueryCsv $ctx $container $blob $query $true

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader) -ResultFile $tempfile.FullName -QueryString $query -Force
    Get-Content $tempfile.FullName
}

$container = "data"
$query = "SELECT BibNum, Title, Author, ISBN, Publisher, ItemType
            FROM BlobStorage
            WHERE ItemType IN
                ('acdvd', 'cadvd', 'cadvdnf', 'calndvd', 'ccdvd', 'ccdvdnf', 'jcdvd', 'nadvd', 'nadvdnf', 'nalndvd', 'ncdvd', 'ncdvdnf')"

Pasos siguientes