使用 Azure Data Lake Storage 查询加速来筛选数据

本文介绍如何使用查询加速来检索存储帐户中的部分数据。

查询加速使应用程序和分析框架可以通过仅检索执行给定操作所需的数据来大幅优化数据处理。 若要了解详细信息,请参阅 Azure Data Lake Storage 查询加速

先决条件


设置环境

步骤 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
    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

检索特定列

可以将结果的范围限定为部分列。 这样一来,只需检索执行给定计算所需的列。 这可以提高应用程序性能并降低成本,因为通过网络传输的数据较少。

注意

可以将结果范围限定到的最大列数为 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')"

后续步骤