Azure Data Lake Storage のクエリ アクセラレーション

クエリ アクセラレーションでは、特定の操作の実行に必要なデータのみを取得することで、アプリケーションと分析フレームワークによって、データ処理を劇的に最適化することができます。 これにより、格納されているデータに対する重要な分析情報を得るために必要な時間と処理能力が削減されます。

概要

クエリ アクセラレーションでは、データをディスクから読み取るときに、アプリケーションが行および列をフィルター処理できるようにするフィルターの "述語" および "列のプロジェクション" を受け入れます。 述語の条件を満たすデータのみが、ネットワーク経由でアプリケーションに転送されます。 これにより、ネットワーク待機時間とコンピューティング コストが削減されます。

SQL を使用して、クエリ アクセラレーション要求で行フィルター述語と列のプロジェクションを指定できます。 要求では 1 つのファイルのみが処理されます。 したがって、join や group by 集計などの SQL の高度なリレーショナル機能はサポートされていません。 クエリ アクセラレーションでは、各要求への入力として CSV および JSON 形式のデータがサポートされます。

クエリ アクセラレーション機能は、Data Lake Storage (階層型名前空間が有効になっているストレージ アカウント) に限定されません。 クエリ アクセラレーションは、階層型名前空間が有効になって いない ストレージ アカウントの BLOB と完全に互換性があります。 これはつまり、ストレージ アカウントに BLOB として既に格納されているデータを処理する場合でも、ネットワーク待機時間とコンピューティング コストを同様に削減できます。

クライアント アプリケーションでクエリ アクセラレーションを使用する方法の例については、「Azure Data Lake Storage クエリ アクセラレーションを使用したデータのフィルター処理」を参照してください。

データ フロー

次の図は、一般的なアプリケーションでクエリ アクセラレーションを使用してデータを処理する方法を示しています。

クエリ アクセラレーションの概要

  1. クライアント アプリケーションは、述語と列のプロジェクションを指定することによってファイル データを要求します。

  2. クエリ アクセラレーションは、指定された SQL クエリを解析し、データの解析とフィルター処理に作業を分配します。

  3. プロセッサはディスクからデータを読み取り、適切な形式を使用してデータを解析した後、指定された述語と列のプロジェクションを適用してデータをフィルター処理します。

  4. クエリ アクセラレーションは、応答シャードを結合し、クライアント アプリケーションにストリーミングで返します。

  5. クライアント アプリケーションは、ストリーミングされた応答を受信して解析します。 アプリケーションは、追加のデータをフィルター処理する必要がなく、必要な計算または変換を直接適用できます。

低コストで優れたパフォーマンスを実現

クエリ アクセラレーションは、アプリケーションによって転送および処理されるデータの量を減らすことでパフォーマンスを最適化します。

集約値を計算するために、アプリケーションは通常、ファイルから すべての データを取得し、そのデータをローカルで処理およびフィルター処理します。 分析ワークロードの入出力パターンを分析したところ、アプリケーションは通常、特定の計算を実行するために、読み取ったデータの 20% しか必要としないことが明らかになりました。 この統計は、パーティション排除などの手法を適用した後でも当てはまります。 つまり、データの 80% がネットワーク経由で不必要に転送され、解析され、アプリケーションによってフィルター処理されていることを意味します。 このパターンでは、基本的に不要なデータを削除するように設計されているため、かなりのコンピューティング コストが発生します。

スループットと待機時間の両方の観点で、Azure は業界をリードするネットワークを備えていますが、そのネットワークでデータを不必要に転送する場合は、やはりアプリケーションのパフォーマンスに対してコストがかかります。 ストレージ要求中に不要なデータをフィルターで除外することにより、クエリ アクセラレーションはこのコストを排除します。

さらに、不要なデータを解析してフィルター処理するために必要な CPU 負荷に対し、アプリケーションではより多くの大規模な VM をプロビジョニングして作業を行う必要があります。 この計算負荷をクエリ アクセラレーションに移すことで、アプリケーションは大幅なコスト削減を実現できます。

クエリ アクセラレーションのメリットを活用できるアプリケーション

クエリ アクセラレーションは、分散型分析フレームワークおよびデータ処理アプリケーション向けに設計されています。

Apache Spark や Apache Hive などの分散型分析フレームワークには、フレームワーク内にストレージ抽象化レイヤーが含まれています。 これらのエンジンには、ユーザー クエリの最適なクエリ プランを決定するときに、基になる I/O サービスの機能に関する知識を組み込むことができるクエリ オプティマイザーも含まれています。 これらのフレームワークでは、クエリ アクセラレーションの統合が始まっています。 その結果、これらのフレームワークのユーザーは、クエリに変更を加えることなく、クエリの待機時間が改善され、総保有コストが削減されます。

クエリ アクセラレーションは、データ処理アプリケーション用にも設計されています。 これらの種類のアプリケーションでは通常、大規模なデータ変換が実行されますが、これが分析情報の取得に向けた直接的なきっかけとはならないため、確立された分散型分析フレームワークが常に使用されることはありません。 これらのアプリケーションは多くの場合、基になるストレージ サービスとの直接的な関係が強いため、クエリ アクセラレーションなどの機能から直接メリットを得ることができます。

アプリケーションがどのようにクエリ アクセラレーションを統合できるかの例については、「Azure Data Lake Storage クエリ アクセラレーションを使用したデータのフィルター処理」を参照してください。

価格

Azure Data Lake Storage サービス内でのコンピューティング負荷の増加により、クエリ アクセラレーションを使用するための価格モデルは、通常の Azure Data Lake Storage のトランザクション モデルとは異なります。 クエリ アクセラレーションでは、スキャンされるデータ量のコストと、呼び出し元に返されるデータ量のコストが課金されます。 詳細については、「Azure Data Lake Storage Gen2 の価格」を参照してください。

課金モデルの変更にもかかわらず、クエリ アクセラレーションの価格モデルは、はるかに高価な VM コストの削減を前提に、ワークロードの総所有コストが削減されるように設計されています。

次の手順