Partilhar via


Filtrar dados usando a aceleração de consulta do Armazenamento do Azure Data Lake

Este artigo mostra como usar a aceleração de consulta para recuperar um subconjunto de dados da sua conta de armazenamento.

A aceleração de consultas permite que aplicativos e estruturas de análise otimizem drasticamente o processamento de dados, recuperando apenas os dados necessários para executar uma determinada operação. Para saber mais, consulte Aceleração de consulta do Armazenamento do Azure Data Lake.

Pré-requisitos

  • Para acessar o Armazenamento do Azure, você precisará de uma assinatura do Azure. Se ainda não tiver uma subscrição, crie uma conta gratuita antes de começar.

  • Uma conta de armazenamento v2 de uso geral. consulte Criar uma conta de armazenamento.

  • A encriptação dupla não é suportada.

  • Se você estiver consultando um arquivo JSON, cada tamanho de registro nesse arquivo deverá ser menor que 1MB.

  • Escolha uma guia para exibir os pré-requisitos específicos do SDK.

    Não aplicável


Configurar o ambiente

Etapa 1: Instalar pacotes

Instale o módulo Az versão 4.6.0 ou superior.

Install-Module -Name Az -Repository PSGallery -Force

Para atualizar a partir de uma versão mais antiga do Az, execute o seguinte comando:

Update-Module -Name Az

Etapa 2: adicionar instruções

Não aplicável

Recuperar dados usando um filtro

Você pode usar SQL para especificar os predicados de filtro de linha e projeções de coluna em uma solicitação de aceleração de consulta. O código a seguir consulta um arquivo CSV no armazenamento e retorna todas as linhas de dados em que a terceira coluna corresponde ao valor Hemingway, Ernest.

  • Na consulta SQL, a palavra-chave BlobStorage é usada para indicar o arquivo que está sendo consultado.

  • As referências de coluna são especificadas como _N onde a primeira coluna é _1. Se o arquivo de origem contiver uma linha de cabeçalho, você poderá fazer referência às colunas pelo nome especificado na linha de cabeçalho.

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

Recuperar colunas específicas

Você pode definir o escopo de seus resultados para um subconjunto de colunas. Dessa forma, você recupera apenas as colunas necessárias para executar um determinado cálculo. Isso melhora o desempenho do aplicativo e reduz os custos, pois menos dados são transferidos pela rede.

Nota

O número máximo de colunas para as quais você pode definir o escopo dos resultados é 49. Se você precisar que seus resultados contenham mais de 49 colunas, use um caractere curinga (*) para a expressão SELECT (Por exemplo: SELECT *).

Esse código recupera apenas a BibNum coluna de todos os livros no conjunto de dados. Ele também usa as informações da linha de cabeçalho no arquivo de origem para fazer referência a colunas na 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

O código a seguir combina filtragem de linha e projeções de coluna na mesma 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')"

Próximos passos