Filtrowanie danych przy użyciu przyspieszania zapytań usługi Azure Data Lake Storage

W tym artykule pokazano, jak używać przyspieszania zapytań do pobierania podzestawu danych z konta magazynu.

Przyspieszanie zapytań umożliwia aplikacjom i strukturom analitycznym znaczne zoptymalizowanie przetwarzania danych przez pobranie tylko danych, których potrzebują do wykonania danej operacji. Aby dowiedzieć się więcej, zobacz Przyspieszanie zapytań usługi Azure Data Lake Storage.

Wymagania wstępne


Konfigurowanie środowiska

Krok 1. Instalowanie pakietów

Zainstaluj moduł Az w wersji 4.6.0 lub nowszej.

Install-Module -Name Az -Repository PSGallery -Force

Aby przeprowadzić aktualizację ze starszej wersji modułu Az, uruchom następujące polecenie:

Update-Module -Name Az

Krok 2. Dodawanie instrukcji

Nie dotyczy

Pobieranie danych przy użyciu filtru

Za pomocą języka SQL można określić predykaty filtru wierszy i projekcje kolumn w żądaniu przyspieszania zapytań. Poniższy kod wysyła zapytanie do pliku CSV w magazynie i zwraca wszystkie wiersze danych, w których trzecia kolumna odpowiada wartości Hemingway, Ernest.

  • W zapytaniu SQL słowo kluczowe BlobStorage jest używane do oznaczania pliku, którego dotyczy zapytanie.

  • Odwołania do kolumn są określane jako _N miejsce, w którym pierwsza kolumna to _1. Jeśli plik źródłowy zawiera wiersz nagłówka, możesz odwołać się do kolumn według nazwy określonej w wierszu nagłówka.

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

Pobieranie określonych kolumn

Wyniki można ograniczyć do podzbioru kolumn. W ten sposób pobierasz tylko kolumny potrzebne do wykonania danego obliczenia. Zwiększa to wydajność aplikacji i zmniejsza koszty, ponieważ mniej danych jest przesyłanych za pośrednictwem sieci.

Uwaga

Maksymalna liczba kolumn, do których można ograniczyć zakres wyników, wynosi 49. Jeśli wyniki mają zawierać więcej niż 49 kolumn, użyj symbolu wieloznakowego (*) dla wyrażenia SELECT (na przykład: SELECT *).

Ten kod pobiera tylko kolumnę BibNum dla wszystkich książek w zestawie danych. Używa również informacji z wiersza nagłówka w pliku źródłowym do odwoływanie się do kolumn w zapytaniu.

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

Poniższy kod łączy filtrowanie wierszy i projekcje kolumn w tym samym zapytaniu.

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

Następne kroki