並列処理¶
Denodo のオプティマイザーは、さまざまな超並列処理 (MPP) システムとネイティブに統合して、非常に多くの処理を必要とする特定のクエリを高速化します。また、更新プログラム 8.0u20230301 以降、Denodo には 組み込み MPP の機能 が搭載されています。
注釈
この機能は Denodo Professional や Denodo Standard では使用できません。「 Denodo Platform - サブスクリプションバンドル 」も参照してください。
コストベースのオプティマイザーは、構成された MPP を使用した方が利点が得られる操作が存在するかどうかを検出できます。Denodo で大量のデータを処理する必要があるクエリで、ストリーミングモードではその処理を実行できない場合に、そのクエリ処理が MPP エンジンにプッシュされます。これは、データを部分的にディスクにオフロードして、サーバーのリソースを使い切らないようにすることが必要な状況です。
オプティマイザーでは、MPP を使用するうえで適切な時期がクエリ単位で判断されます。この判断は、クエリで指定した操作のタイプ、ビューの統計情報、およびサーバーの構成に基づきます。最適化によって、以下のタイプの操作で利点が得られます。
集計のように MPP で並列化できる操作
Denodo による後処理ではディスクへのスワップが発生する以下の操作
ハッシュ結合
Group By
Order By
DISTINCT
組み込み MPP の高速化¶
更新プログラム 8.0u20230301 以降、Denodo には、オブジェクトストレージにデータが含まれる環境でのパフォーマンスを向上する組み込み超並列処理 (MPP) 機能が含まれています。そのために、Denodo に Presto のカスタマイズされたバージョンが組み込まれました。これはオープンソースの並列 SQL クエリエンジンであり、データレイクコンテンツに対するアクセスに優れています。Denodo 組み込み MPP クラスタは、『 組み込み MPP ガイド 』の手順に従ってデプロイできます。このユーティリティの 20221018 より新しいバージョンには、Presto をベースとして、Denodo Platform とやり取りするようにカスタマイズされた MPP エンジンが組み込まれています。並列処理にこのクラスタを使用するようにクエリオプティマイザーが構成される点が特徴です (詳細については、「 Denodo 組み込み MPP 」を参照してください)。

この構成は、外部の MPP データベースでは不可能な新しい最適化技術を利用します。これは、HDFS や S3、ADLS などの オブジェクトストレージに格納される大量のデータ と、別のデータソースにあるデータを組み合わせてクエリを実行するような場合に特に便利です。このような場合、クエリオプティマイザーでクエリを MPP に送信するように判断できます。Denodo 組み込み MPP は、独自のエンジンを使用してオブジェクトストレージのデータにアクセスできます。また、一時テーブルやファイルを作成せずに、Denodo からストリーミングでオブジェクトストレージ外のデータにアクセスできます。
このように、Denodo のクエリエンジンでは、その強力な最適化技術、フェデレーション、セキュリティ機能と、ビッグデータの並列処理を組み合わせることができます。
注釈
デフォルトでは、外部データベースにメタデータを保存する VDP サーバーでのみ、この機能を使用できます。複数の Virtual DataPort サーバーで構成するクラスタがある環境で、オブジェクトストレージ外部のデータに組み込み MPP がアクセスできるようにするために、このような措置が必要です。Virtual DataPort サーバーが 1 台のみの環境では、次を実行することでこの制限を回避できます。
SET 'queryOptimization.parallelProcessing.denodoConnector.enableUsingSharedMetadataOnly'='false';
外部 MPP による並列処理¶
Denodo では、Hadoop に基づく以下の MPP システムとの統合がサポートされています。
PrestoDB バージョン 0.1x および 0.2x
Databricks
Impala バージョン 2.3
Trino バージョン 4xx
Spark バージョン 1.5、1.6、および 2.x
以下の例を考えます。
データソース DS1 に customer ビューがあり、行数は 1,000 万です。
2 つの基本ビューの和結合である sales ビューがあります。その基本ビューの 1 つは recent_sales で、最近の 1 年の売上を収めています。もう 1 つの基本ビューは old_sales で、それ以前の年の売上情報を収めています。 recent_sales 基本ビューは DS2 データソースにあり、その行数は 1 億です。 old_sales は DS3 データソースにあり、行数は 10 億です。これらの基本ビューには属性 customer_id があり、特定のセールで製品を購入した顧客を指定しています。したがって、顧客ごとの平均売上件数は約 110 です。
以下のクエリは顧客ごとの売上高を取得します。
SELECT c.id as CustomerId, SUM(s.amount) as TotalSales
FROM Customer c JOIN Sales s ON c.id = s.customer_id
GROUP BY c.id
Denodo オプティマイザーによって、集計のプッシュダウンによる最適化が適用されます。この最適化では、データソースごとに売上が集計され、データソースから返される行数が削減されます。
この最適化により、1,000 万件の顧客、および売上データベースごとに 1,000 万件ずつ、合計約 3,000 万行がネットワーク経由で転送されます。一方、Denodo では、1,000 万行の分岐と 2,000 万行の分岐の結合を実行して、その結合結果である 2,000 万行を集計する必要があります。この結合操作とグループ化操作では大量のデータを処理する必要があり、メモリの過剰な消費を避けるために、ディスクへのスワップが必要になります。

並列処理: 集計のプッシュダウン¶
並列処理の最適化が有効な場合、クエリオプティマイザーでは、集計のプッシュダウンを適用した後、顧客データと集計した売上データを MPP エンジンに移動し、クラスタリソースを利用して結合と集計を実行します。

並列処理: 集計のプッシュダウンと並列処理¶
キャッシュとしての MPP エンジンの使用¶
MPP エンジンの並列処理機能を利用すると同時に、同じ MPP エンジンを Denodo キャッシュとして使用できます。これにより、クエリの高速化を目的として MPP に移動したデータセットで、データのキャッシュ機能の利点を利用できます。
一定の状況では、Denodo 管理者が一部のデータベース向けにキャッシュシステムをセットアップし、一方でそれらのデータベースで MPP によるクエリの高速化を有効または無効にすることができます。
ここでは、このような動作を実現できるように Virtual DataPort サーバーを構成する方法を、2 つの例を引いて説明します。
サーバーのキャッシュで MPP を有効にし、いくつかの VDP データベースでは同じキャッシュを使用して MPP を無効にした構成。
MPP エンジンを使用するようにサーバーのキャッシュを構成して、データソース設定で並列処理を有効にします。
サーバー構成のクエリ最適化のセクションで並列処理を有効にして、キャッシュデータソースを選択します。
VDP データベースで使用するキャッシュを、グローバルキャッシュではなく、そのデータベースと同じコネクションパラメータを使用するカスタムキャッシュデータソースとするように構成します。ただし、データソースの [Read & Write] 構成で MPP 移動は許可しないようにします (クエリの最適化設定で並列処理を選択しません)。
サーバーのキャッシュで MPP を有効にし、いくつかのデータベースでは別のキャッシュシステムを使用して、グローバルキャッシュへの MPP 移動も許可した構成。
データソースを作成し、MPP へのコネクションパラメータを使用するように構成して、並列処理を有効にします。
サーバーのキャッシュ構成で、そのデータソースをキャッシュデータソースとして選択します。
サーバー構成のクエリ最適化のセクションで並列処理を有効にして、[Custom data source] オプションで上記と同じキャッシュデータソースを選択します。
データベースは、サーバーとは別の、独自のデータソースを使用するキャッシュシステムを使用するように構成します。
CONTEXT 句による、MPP エンジンへのビューの強制移動¶
ビューに対するクエリの実行またはビューの作成で、 CONTEXT
句を使用して、MPP システムに移動するビューの名前を指定できます。データ移動を指定する句と同様の構文を使用しますが、コンテキストトークンの名前が MPPMOVEMENTPLAN
である点が異なります。
この句を使用して 1 つまたは複数のビュー名を指定できます。また、クエリにビューを記述した箇所ごとに以下を指定できます。
(ON)
: MPP にビューを移動します。(OFF)
: MPP へのビューの移動を無効にします。()
: このビューを記述した箇所では設定を指定しません。
SELECT c.id as CustomerId, SUM(s.amount) as TotalSales
FROM customer c JOIN sales s ON c.id = s.customer_id
GROUP BY c.id CONTEXT(MPPMOVEMENTPLAN = customer: (ON) store_sales_oracle: (ON))