共用方式為


使用 Azure Data Lake Storage 查詢加速來篩選資料

本文說明如何使用查詢加速,從儲存體帳戶擷取資料子集。

查詢加速可讓應用程式和分析架構僅擷取執行指定作業所需的資料,以大幅最佳化資料處理。 若要深入瞭解,請參閱 Azure Data Lake Storage 查詢加速

先決條件

  • 若要存取 Azure 儲存體,您需要 Azure 訂用帳戶。 如果您還沒有訂用帳戶,請先建立免費帳戶,再開始操作。

  • 一般用途 v2 儲存體帳戶。 請參閱 建立儲存體帳戶

  • 不支援雙重加密。

  • 如果您要查詢 JSON 檔案,則此檔案中的每筆記錄大小應小於 1MB。

  • 選擇索引標籤以檢視任何 SDK 特定的先決條件。

    不適用


設定您的環境

步驟 1:安裝套件

安裝 Az 模組 4.6.0 版或更新版本。

Install-Module -Name Az -Repository PSGallery -Force

若要從舊版 Az 更新,請執行下列命令:

Update-Module -Name Az

步驟 2:新增敘述

不適用

使用篩選器擷取資料

您可以使用 SQL 來指定查詢加速請求中的列篩選述詞和欄位映射。 下列程式碼會查詢儲存中的 CSV 檔案,並傳回第三欄符合值 Hemingway, Ernest的所有資料列。

  • 在 SQL 查詢中,關鍵字 BlobStorage 用於表示正在查詢的檔案。

  • 欄位參照會指定為 _N,其中第一欄是 _1。 如果來源檔案包含標頭資料列,則您可以使用標頭資料列中所指定的名稱來指稱資料行。

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders -RecordSeparator "`n" -ColumnSeparator "," -QuotationCharacter """" -EscapeCharacter "\"
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader -RecordSeparator "`n" -ColumnSeparator "," -QuotationCharacter """" -EscapeCharacter "\") -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

擷取特定資料行

您可以將結果範圍限定為資料行的子集。 如此一來,您就只擷取執行指定計算所需的資料行。 這提高了應用程式效能並降低了成本,因為透過網路傳輸的資料更少。

備註

您可以將結果範圍限定為 49 欄數目上限。 如果您需要結果包含超過 49 個直欄,請針對 SELECT 運算式使用萬用字元 (*) (例如: SELECT *)。

此程式碼只會擷取資料集中所有書籍的BibNum欄。 它也會使用來源檔案中標頭資料列的資訊來參考查詢中的資料行。

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

下列程式碼會將資料列篩選和資料行投影合併到相同的查詢中。

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

後續步驟