Condividi tramite


Filtrare i dati usando l'accelerazione delle query di Azure Data Lake Archiviazione

Questo articolo illustra come usare l'accelerazione delle query per recuperare un subset di dati dall'account di archiviazione.

L'accelerazione delle query consente alle applicazioni e ai framework di analisi di ottimizzare notevolmente l'elaborazione dei dati recuperando solo i dati necessari per eseguire una determinata operazione. Per altre informazioni, vedere Accelerazione query di Azure Data Lake Archiviazione.

Prerequisiti

  • Per accedere ad Archiviazione di Azure è necessaria una sottoscrizione di Azure. Se non si ha già una sottoscrizione, creare un account gratuito prima di iniziare.

  • Un account di archiviazione per utilizzo generico v2 . vedere Creare un account di archiviazione.

  • La crittografia doppia non è supportata.

  • Se si esegue una query su un file JSON, ogni dimensione del record in questo file deve essere inferiore a 1 MB.

  • Scegliere una scheda per visualizzare i prerequisiti specifici dell'SDK.

    Non applicabile


Configurazione dell'ambiente

Passaggio 1: Installare i pacchetti

Installare il modulo Az versione 4.6.0 o successiva.

Install-Module -Name Az -Repository PSGallery -Force

Per eseguire l'aggiornamento da una versione precedente di Az, eseguire il comando seguente:

Update-Module -Name Az

Passaggio 2: Aggiungere istruzioni

Non applicabile

Recuperare i dati usando un filtro

È possibile usare SQL per specificare i predicati del filtro di riga e le proiezioni di colonne in una richiesta di accelerazione della query. Il codice seguente esegue una query su un file CSV nell'archiviazione e restituisce tutte le righe di dati in cui la terza colonna corrisponde al valore Hemingway, Ernest.

  • Nella query SQL la parola chiave BlobStorage viene usata per indicare il file su cui viene eseguita la query.

  • I riferimenti alle colonne vengono specificati come _N dove la prima colonna è _1. Se il file di origine contiene una riga di intestazione, è possibile fare riferimento alle colonne in base al nome specificato nella riga di intestazione.

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

Recuperare colonne specifiche

È possibile definire l'ambito dei risultati in un subset di colonne. In questo modo si recuperano solo le colonne necessarie per eseguire un determinato calcolo. Ciò migliora le prestazioni dell'applicazione e riduce i costi perché la rete trasferisce meno dati.

Nota

Il numero massimo di colonne a cui è possibile definire l'ambito dei risultati è 49. Se è necessario che i risultati contengano più di 49 colonne, usare un carattere jolly (*) per l'espressione edizione Standard LECT (ad esempio: SELECT *).

Questo codice recupera solo la BibNum colonna per tutti i libri nel set di dati. Usa anche le informazioni della riga di intestazione nel file di origine per fare riferimento alle colonne nella query.

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

Il codice seguente combina i filtri di riga e le proiezioni di colonne nella stessa query.

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')"

Passaggi successivi