メインコンテンツまでスキップ
バージョン: 4.x

テーブルスキャンの最適化

概要

Dorisは、高性能なリアルタイム分析データウェアハウスとして、クエリパフォーマンスを大幅に向上させることができる強力なパーティションプルーニング機能を提供しています。

パーティションプルーニングは、クエリの条件を分析してクエリに関連するパーティションを知的に特定し、これらのパーティション内のデータのみをスキャンすることで、無関係なパーティションの不要なスキャンを回避するクエリ最適化技術です。このアプローチにより、I/O操作と計算負荷を大幅に削減し、クエリ実行を高速化することができます。

ケース

以下は、Dorisのパーティションプルーニング機能を実演する使用例です。

日付でパーティション分割されたsalesという名前の販売データテーブルがあり、各日のデータが個別のパーティションに格納されているとします。テーブル構造は次のように定義されています:

CREATE TABLE sales (
date DATE,
product VARCHAR(50),
amount DECIMAL(10, 2)
)
PARTITION BY RANGE(date) (
PARTITION p1 VALUES LESS THAN ('2023-01-01'),
PARTITION p2 VALUES LESS THAN ('2023-02-01'),
PARTITION p3 VALUES LESS THAN ('2023-03-01'),
PARTITION p4 VALUES LESS THAN ('2023-04-01')
)
DISTRIBUTED BY HASH(date) BUCKETS 16
PROPERTIES
(
"replication_num" = "1"
);

次に、2023年1月15日から2023年2月15日までの総売上金額をクエリする必要があります。クエリステートメントは以下の通りです:

SELECT SUM(amount) AS total_amount
FROM sales
WHERE date BETWEEN '2023-01-15' AND '2023-02-15';

上記のクエリに対して、Dorisのパーティション枝刈り最適化プロセスは以下の通りです:

  1. Dorisはクエリ条件内のパーティション列dateをインテリジェントに分析し、クエリの日付範囲が'2023-01-15'から'2023-02-15'の間であることを識別します。
  2. クエリ条件をパーティション定義と比較することで、Dorisはスキャンが必要なパーティションの範囲を正確に特定します。この例では、日付範囲がクエリ条件を完全にカバーするパーティションp2p3のみをスキャンする必要があります。
  3. Dorisはp1p4など、クエリ条件に関連しないパーティションを自動的にスキップし、不要なデータスキャンを回避してI/Oオーバーヘッドを削減します。
  4. 最後に、Dorisはパーティションp2p3内でのみデータスキャンと集計計算を実行し、迅速にクエリ結果を取得します。

EXPLAINコマンドを使用することで、クエリ実行プランを確認し、Dorisのパーティション枝刈り最適化が有効になっていることを確認できます。実行プランでは、OlapScanNodeノードのpartition属性に実際にスキャンされたパーティションがp2p3として表示されます。

|   0:VOlapScanNode(212)                                                     |
| TABLE: cir.sales(sales), PREAGGREGATION: ON |
| PREDICATES: (date[#0] >= '2023-01-15') AND (date[#0] <= '2023-02-15') |
| partitions=2/4 (p2,p3) |

概要

要約すると、Dorisのパーティションプルーニング機能は、クエリ条件とパーティション間の関連性をインテリジェントに識別し、無関係なパーティションを自動的にプルーニングして、必要なデータのみをスキャンすることで、クエリパフォーマンスを大幅に向上させます。パーティションプルーニング機能の適切な活用により、ユーザーは効率的なリアルタイム分析システムを構築し、大量データのクエリ要求を容易に処理することができます。

このページでは