こちらの機能、まだ使ったことがなかったのでした。
リキッドクラスタリングとは
これまではDeltaテーブルの最適化はOPTIMIZE
やOPTIMIZE ZORDER BY
を使っていました。これは、ファイルのコンパクションや検索キーによるクラスタリングを行うことで、パフォーマンスを最適化する手法です。しかし、データの偏りによってはこれらのテクニックだけでは十分なパフォーマンスを出せないという課題がありました。このような課題を解決するために新たに導入されたテクニックがリキッドクラスタリングです。リキッド(液体)という名前にあるように、水が均等に広がるようにいい感じにデータの配置を最適化してくれます(すごくざっくりした説明です)。
以下のようなシナリオで効果を発揮します。
- カーディナリティの高い列でフィルター処理されることが多いテーブル。
- データ分散に大きな偏りがあるテーブル。
- 急速に大きくなり、メンテナンスとチューニング作業が必要なテーブル。
- 同時書き込みの要件を持つテーブル。
- 時間の経過と共に変化するアクセス パターンを持つテーブル。
- 一般的なパーティション キーでは、パーティションが多すぎるか、少なすぎるテーブルが残ってしまう可能性があるテーブル。
また、リキッドクラスタリングを有効化することで、その他の行レベルの同時書き込み、削除ベクトルなどの新機能も有効化されるので、基本的に全てのケースでリキッドクラスタリングを有効化することをお勧めします。
詳細はこちらの7ページ以降をご覧ください。
リキッドクラスタリングの有効化
テーブル作成時に有効化
リキッドクラスタリングでは、クラスタリングに用いるクラスタリングキーを指定する必要があります。CLUSTER BY
句で指定します。以下の例では列col0
をクラスタリングキーに指定しています。
CREATE TABLE hive_metastore.databricks_demo_takaaki_yayoi.liquid_table(col0 int, col1 string) CLUSTER BY (col0);
既存テーブルで有効化
リキッドクラスタリングが有効化されていないテーブルを作成します。
CREATE TABLE hive_metastore.databricks_demo_takaaki_yayoi.liquid_table(col0 int, col1 string);
ALTER TABLE
でCLUSTER BY
を指定してリキッドクラスタリングを有効化します。
ALTER TABLE hive_metastore.databricks_demo_takaaki_yayoi.liquid_table CLUSTER BY (col0)
delta.feature.clustering
(リキッドクラスタリング)に加えて、delta.feature.deletionVectors
(削除ベクトル)やdelta.feature.rowTracking
(行レベルの同時書き込み)がサポートされていることも確認できます。
クラスタリングキーに何を指定すべきか
マニュアルにもあるように、検索でよく使用されるキーをクラスタリングキーにすることが推奨となっています。最大4つまでですが、複数指定も可能です。順序は問いません。
今度はこれでパフォーマンスも見てみたいところです。