Azure Data Lake Storage のクエリ アクセラレーションを使用してデータをフィルター処理するFilter data by using Azure Data Lake Storage query acceleration

この記事では、クエリ アクセラレーションを使用して、ストレージ アカウントからデータのサブセットを取得する方法について説明します。This article shows you how to use query acceleration to retrieve a subset of data from your storage account.

クエリ アクセラレーションでは、特定の操作の実行に必要なデータのみを取得することで、アプリケーションと分析フレームワークによって、データ処理を劇的に最適化することができます。Query acceleration enables applications and analytics frameworks to dramatically optimize data processing by retrieving only the data that they require to perform a given operation. 詳細については、「Azure Data Lake Storage のクエリ アクセラレーション」をご覧ください。To learn more, see Azure Data Lake Storage Query Acceleration.

前提条件Prerequisites

  • Azure Storage にアクセスするには、Azure サブスクリプションが必要です。To access Azure Storage, you'll need an Azure subscription. まだサブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't already have a subscription, create a free account before you begin.

  • 汎用 v2 ストレージ アカウント。A general-purpose v2 storage account. ストレージ アカウントを作成する」を参照してください。see Create a storage account.

  • タブを選択すると、SDK 固有の前提条件が表示されます。Choose a tab to view any SDK-specific prerequisites.

    利用不可Not applicable


クエリ アクセラレーションを有効にするEnable query acceleration

クエリ アクセラレーションを使用するには、クエリ アクセラレーション機能をサブスクリプションに登録する必要があります。To use query acceleration, you must register the query acceleration feature with your subscription. この機能が登録されていることを確認したら、Azure Storage リソース プロバイダーを登録する必要があります。Once you've verified that the feature is registered, you must register the Azure Storage resource provider.

手順 1:クエリ アクセラレーション機能を登録するStep 1: Register the query acceleration feature

クエリ アクセラレーションを使用するには、最初にクエリ アクセラレーション機能をサブスクリプションに登録する必要があります。To use query acceleration, you must first register the query acceleration feature with your subscription.

  1. Windows PowerShell コマンド ウィンドウを開きます。Open a Windows PowerShell command window.

  2. Connect-AzAccount コマンドを使用して Azure サブスクリプションにサインインし、画面上の指示に従います。Sign in to your Azure subscription with the Connect-AzAccount command and follow the on-screen directions.

    Connect-AzAccount
    
  3. 自分の ID が複数のサブスクリプションに関連付けられている場合は、アクティブなサブスクリプションを設定します。If your identity is associated with more than one subscription, then set your active subscription.

    $context = Get-AzSubscription -SubscriptionId <subscription-id>
    Set-AzContext $context
    

    <subscription-id> プレースホルダーの値をサブスクリプションの ID に置き換えます。Replace the <subscription-id> placeholder value with the ID of your subscription.

  4. Register-AzProviderFeature コマンドを使用して、クエリ アクセラレーション機能を登録します。Register the query acceleration feature by using the Register-AzProviderFeature command.

    Register-AzProviderFeature -ProviderNamespace Microsoft.Storage -FeatureName BlobQuery
    

手順 2:機能が登録されたことを確認するStep 2: Verify that the feature is registered

登録が完了したことを確認するには、Get-AzProviderFeature コマンドを使用します。To verify that the registration is complete, use the Get-AzProviderFeature command.

Get-AzProviderFeature -ProviderNamespace Microsoft.Storage -FeatureName BlobQuery

手順 3:Azure Storage リソース プロバイダーを登録するStep 3: Register the Azure Storage resource provider

登録が承認されたら、Azure Storage リソース プロバイダーを再登録する必要があります。After your registration is approved, you must re-register the Azure Storage resource provider.

リソース プロバイダーを登録するには、AzResourceProvider コマンドを使用します。To register the resource provider, use the Register-AzResourceProvider command.

Register-AzResourceProvider -ProviderNamespace 'Microsoft.Storage'

環境の設定方法Set up your environment

手順 1:パッケージをインストールするStep 1: Install packages

Az モジュール バージョン 4.6.0 以降をインストールします。Install the Az module version 4.6.0 or higher.

Install-Module -Name Az -Repository PSGallery -Force

古いバージョンの Az から更新するには、次のコマンドを実行します。To update from an older version of Az, run the following command:

Update-Module -Name Az

手順 2:ステートメントを追加するStep 2: Add statements

利用不可Not applicable

フィルターを使用してデータを取得するRetrieve data by using a filter

SQL を使用して、クエリ アクセラレーション要求で行フィルター述語と列のプロジェクションを指定できます。You can use SQL to specify the row filter predicates and column projections in a query acceleration request. 次のコードでは、ストレージ内の CSV ファイルに対してクエリを行い、3番目の列が Hemingway, Ernest 値と一致するすべてのデータの行を返します。The following code queries a CSV file in storage and returns all rows of data where the third column matches the value Hemingway, Ernest.

  • SQL クエリでは、クエリ対象のファイルを示すためにキーワード BlobStorage が使用されます。In the SQL query, the keyword BlobStorage is used to denote the file that is being queried.

  • 列参照は _N として指定され、最初の列は _1 です。Column references are specified as _N where the first column is _1. ソース ファイルにヘッダー行が含まれている場合は、ヘッダー行に指定されている名前を使用して列を参照できます。If the source file contains a header row, then you can refer to columns by the name that is specified in the header row.

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

特定の列を取得するRetrieve specific columns

結果の範囲を列のサブセットに限定することができます。You can scope your results to a subset of columns. このようにして、特定の計算を実行するために必要な列のみを取得します。That way you retrieve only the columns needed to perform a given calculation. これにより、ネットワーク経由で転送されるデータが少なくなるため、アプリケーションのパフォーマンスが向上し、コストが削減されます。This improves application performance and reduces cost because less data is transferred over the network.

このコードは、データセット内にあるすべてのブックの BibNum 列のみを取得します。This code retrieves only the BibNum column for all books in the data set. また、ソース ファイルのヘッダー行の情報を使用して、クエリ内の列を参照します。It also uses the information from the header row in the source file to reference columns in the 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

次のコードでは、行のフィルター処理と列のプロジェクションを同じクエリで組み合わせています。The following code combines row filtering and column projections into the same 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')"

次の手順Next steps