Sdílet prostřednictvím


Filtrování dat pomocí akcelerace dotazů Azure Data Lake Storage

V tomto článku se dozvíte, jak pomocí akcelerace dotazů načíst podmnožinu dat z účtu úložiště.

Akcelerace dotazů umožňuje aplikacím a analytickým architekturám výrazně optimalizovat zpracování dat načtením pouze dat, která vyžadují k provedení dané operace. Další informace najdete v tématu Akcelerace dotazů Azure Data Lake Storage.

Požadavky

  • Pro přístup ke službě Azure Storage budete potřebovat předplatné Azure. Pokud ještě nemáte předplatné, vytvořte si před zahájením bezplatný účet .

  • Účet úložiště pro obecné účely verze 2 . Viz Vytvoření účtu úložiště.

  • Dvojité šifrování není podporováno.

  • Pokud dotazujete soubor JSON, každá velikost záznamu v tomto souboru by měla být menší než 1 MB.

  • Výběrem karty zobrazíte všechny požadavky specifické pro sadu SDK.

    Nelze použít


Nastavení prostředí

Krok 1: Instalace balíčků

Nainstalujte modul Az verze 4.6.0 nebo vyšší.

Install-Module -Name Az -Repository PSGallery -Force

Pokud chcete aktualizovat ze starší verze Az, spusťte následující příkaz:

Update-Module -Name Az

Krok 2: Přidání příkazů

Nelze použít

Načtení dat pomocí filtru

Sql můžete použít k určení predikátů filtru řádků a projekce sloupců v požadavku na zrychlení dotazu. Následující kód se dotazuje na soubor CSV v úložišti a vrátí všechny řádky dat, ve kterých třetí sloupec odpovídá hodnotě Hemingway, Ernest.

  • V dotazu SQL se klíčové slovo BlobStorage používá k označení souboru, který se dotazuje.

  • Odkazy na sloupce jsou zadány tak, jak _N je _1první sloupec . Pokud zdrojový soubor obsahuje řádek záhlaví, můžete odkazovat na sloupce podle názvu zadaného v řádku záhlaví.

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

Načtení konkrétních sloupců

Výsledky můžete vymezit na podmnožinu sloupců. Tímto způsobem načtete pouze sloupce potřebné k provedení daného výpočtu. Tím se zlepší výkon aplikace a sníží se náklady, protože se přes síť přenáší méně dat.

Poznámka:

Maximální počet sloupců, na které můžete výsledky nastavit, je 49. Pokud potřebujete, aby výsledky obsahovaly více než 49 sloupců, použijte zástupný znak (*) pro výraz SELECT (například: SELECT *).

Tento kód načte pouze BibNum sloupec pro všechny knihy v datové sadě. Používá také informace z řádku záhlaví ve zdrojovém souboru k odkazování na sloupce v dotazu.

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

Následující kód kombinuje filtrování řádků a projekce sloupců do stejného dotazu.

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

Další kroky