Share via


Gegevens filteren met behulp van Azure Data Lake Storage-queryversnelling

In dit artikel leest u hoe u queryversnelling kunt gebruiken om een subset van gegevens op te halen uit uw opslagaccount.

Met queryversnelling kunnen toepassingen en analyseframeworks de gegevensverwerking aanzienlijk optimaliseren door alleen de gegevens op te halen die ze nodig hebben om een bepaalde bewerking uit te voeren. Zie Azure Data Lake Storage-queryversnelling voor meer informatie.

Vereiste voorwaarden

  • U hebt een Azure-abonnement nodig voor toegang tot Azure Storage. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint.

  • Een v2-opslagaccount voor algemeen gebruik . zie Een opslagaccount maken.

  • Dubbele versleuteling wordt niet ondersteund.

  • Als u een query uitvoert op een JSON-bestand, moet elke recordgrootte in dit bestand kleiner zijn dan 1 MB.

  • Kies een tabblad om eventuele SDK-specifieke vereisten weer te geven.

    Niet van toepassing


Uw omgeving instellen

Stap 1: Pakketten installeren

Installeer de Az-moduleversie 4.6.0 of hoger.

Install-Module -Name Az -Repository PSGallery -Force

Voer de volgende opdracht uit om bij te werken vanuit een oudere versie van Az:

Update-Module -Name Az

Stap 2: Verklaringen toevoegen

Niet van toepassing

Gegevens ophalen met behulp van een filter

U kunt SQL gebruiken om de rijfilterpredicaten en kolomprojecties op te geven in een queryversnellingsaanvraag. Met de volgende code wordt een CSV-bestand in de opslag opgevraagd en worden alle rijen met gegevens geretourneerd waarbij de derde kolom overeenkomt met de waarde Hemingway, Ernest.

  • In de SQL-query wordt het trefwoord BlobStorage gebruikt om het bestand aan te geven dat wordt opgevraagd.

  • Kolomverwijzingen worden opgegeven als _N waar de eerste kolom is _1. Als het bronbestand een veldnamenrij bevat, kunt u verwijzen naar kolommen met de naam die is opgegeven in de veldnamenrij.

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

Specifieke kolommen ophalen

U kunt uw resultaten instellen op een subset van kolommen. Op die manier haalt u alleen de kolommen op die nodig zijn om een bepaalde berekening uit te voeren. Dit verbetert de prestaties van toepassingen en vermindert de kosten omdat er minder gegevens via het netwerk worden overgedragen.

Opmerking

Het maximum aantal kolommen waarop u het bereik van uw resultaten kunt bepalen is 49. Als u wilt dat uw resultaten meer dan 49 kolommen bevatten, gebruikt u een jokerteken (*) voor de SELECT-expressie (bijvoorbeeld: SELECT *).

Met deze code wordt alleen de BibNum kolom opgehaald voor alle boeken in de gegevensset. Ook wordt de informatie uit de koprij in het bronbestand gebruikt om te verwijzen naar kolommen in de 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

De volgende code combineert rijfilters en kolomprojecties in dezelfde 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')"

Volgende stappen