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


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

Следующие шаги