基数保持ジョインの高速化
このトピックでは、テーブルプルーニングを使用して基数保持ジョインを高速化する方法について説明します。この機能は 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 データセットを使用します。
前提条件
テーブルプルーニング機能を使用するには、次の条件を満たす必要があります。
- テーブルプルーニングを有効にする
- キー制約を設定する