基数保持ジョインの高速化
このトピックでは、テーブルプルーニングを使用して基数保持ジョインを高速化する方法について説明します。この機能は v3.1 以降でサポートされています。
概要
基数保持ジョインは、出力行の基数と重複係数がジョインの入力テーブルの1つと同じままであることを保証します。以下の例を考えてみましょう。
-
Inner Join:
SELECT A.* FROM A INNER JOIN B ON A.fk = B.pk;この場合、
A.fk(外部キー)は NOT NULL であり、B.pk(主キー)を参照しています。Aの各行はBのちょうど1行と一致するため、出力の基数と重複係数はAのものと一致します。 -
Left Join:
SELECT A.* FROM A LEFT JOIN B ON A.fk = B.pk;ここでは、
A.fkはB.pkを参照していますが、A.fkは NULL 値を含むことがあります。Aの各行はBの最大1行と一致します。その結果、出力の基数と重複係数はAと一致したままです。
これらのタイプのジョインでは、最終的な出力列がテーブル A の列にのみ依存し、テーブル B の列が使用されない場合、テーブル B はジョインからプルーニングできます。v3.1 以降、StarRocks は基数保持ジョインでの テーブルプルーニング をサポートしており、これは共通テーブル式 (CTE)、ビュー、およびサブクエリで 発生する可能性があります。
ユースケース: リスク管理におけるリアルタイム特徴選択
基数保持ジョインのためのテーブルプルーニング機能は、リスク管理のための リアルタイム特徴選択 のようなシナリオで特に有用です。このコンテキストでは、ユーザーは多くのテーブルからデータを選択する必要があり、しばしば列とテーブルの組み合わせ爆発に対処します。リスク管理ドメインでは、以下の特性が一般的です。
- 多数の特徴が独立して更新される多くのテーブルに分散している。
- 新しいデータはリアルタイムで可視化およびクエリ可能でなければならない。
- データモデルを簡素化するために フラットなビュー が使用され、列抽出のための SQL がより簡潔で生産的になる。
フラットなビューを使用することで、他の加速データレイヤーよりも効率的にリアルタイムデータにアクセスできます。各列抽出クエリでは、ビュー内のすべてのテーブルではなく、いくつかのテーブルのみがジョインされる必要があります。これらのクエリから未使用のテーブルをプルーニングすることで、ジョインの数を減らし、パフォーマンスを向上させることができます。
機能サポート
テーブルプルーニング機能は、スタースキーマ および スノーフレークスキーマ の両方でのマルチテーブルジョインをサポートしています。マルチテーブルジョインは、CTE、ビュー、およびサブクエリに現れることができ、より効率的なクエリ実行を可能にします。
現在、テーブルプルーニング機能は OLAP テーブルとクラウドネイティブテーブルでのみサポートされています。マルチジョインの外部テーブルはプルーニングできません。
使用方法
以下の例では、TPC-H データセットを使用します。
前提条件
テーブルプルーニング機能を使用するには、次の条件を満たす必要があります。
- テーブルプルーニングを有効にする
- キー制約を設定する