Поделиться через


Фильтрация данных с помощью ускорения запросов 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')"

Дальнейшие действия