デルタテーブルでのパーティション分割の代わりに、データブリックスでのリキッドクラスタリングの使用を開始します

「デルタテーブルのパーティション分割からデータブリックスのリキッドクラスタリングへの切り替えを始めましょう」

データの組織方法を革新するDatabricksは、今年のData + AI SummitでLiquid Clusteringという画期的な機能を導入しました。これはDeltaテーブルのパーティショニングとクラスタリングの境界を再定義する革新的な機能です。

パーティショニングとZ-オーダリング

Delta Databricksでは、パーティショニングは特定の列に基づいてデータを論理的なサブセットに整理することで、データをサブセットに適合させてクエリのパフォーマンスを最適化するためのものです。さらに、Z-オーダリングはパーティショニングとともに使用され、データの組織を強化するために利用されます。ここでは、データは選択した順序でソートされて保存され、クエリのパフォーマンスが最適化されます。これにより、パーティショニングとZ-オーダリングの両方がクエリのパフォーマンスを最適化するのに役立ちます。

例えば、商業的な関係管理システムでは-

  • セールスデータは地域とサブリージョンでパーティション化され、データに簡単にアクセスするために論理的なサブセットにパーティション化されます。
  • さらに、パーティション化されたデータはタイムスタンプまたはアカウントIDでZ-オーダ化され、クエリのパフォーマンスが最適化されます。

パーティショニングとZ-オーダリングの問題点

パーティショニングとZ-オーダリングは効率的なストレージと検索に使用することができますが、データを書き込む際にデータが再構成されるため、プロセスを遅くする可能性があります。パーティショニングとZ-オーダリングには以下の問題があります-

  • 偏った分布と高基数:データの不均一な分布はデータの不均一性を引き起こす可能性があります。Z-オーダリングでは、パーティション内の高基数を示す列がデータの不均一な分布を引き起こす可能性があります。たとえば、一部の地域には少ない顧客が含まれ、一部の地域にはより多くの顧客が含まれる可能性があります。
  • 更新時のオーバーヘッド:列の変更による既存データの更新は、データの再構成を引き起こすため、プロセスを遅くする可能性があります。

パーティショニングとZ-オーダリングの両方は、データの最適化を行うためにデータレイアウトに依存しています。

Liquid Clusteringの助け

固定されたデータレイアウトに囚われる代わりに、Liquid Clusteringはクラスタリングキーに基づいてデータレイアウトを自動的に調整するため、データを書き直す必要がありません。これにより、オーバーヘッドの問題が解決されます。さらに、Liquid Clusteringはデータパターンに基づいてデータをダイナミックにクラスタリングし、データの不均一な分布に関連するパーティショニングの問題を回避します。

Liquid Clusteringは次のシナリオで確実に役立ちます

  • 分布の不均一性や高基数の列を持つテーブル。
  • 急速に成長し、メンテナンスとチューニングの労力を必要とするテーブル。
  • 同時書き込み要件とアクセスパターンが時間とともに変化するテーブル。

Liquid Clusteringの使用方法

Liquid Clusteringは、テーブルを作成する際に「Cluster by」式を使用して簡単に有効にすることができます。

CREATE TABLE table1(col0 int, col1 string) USING DELTA CLUSTER BY (col0);

既存のテーブルを変更してクラスタリングを有効にすることもできます-

ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);

Liquid Clusteringは、既にパーティショニングされているテーブルではクラスタリングを実行できないため、パーティショニングとZ-オーダリングとは互換性がありません。

クラスタリングが完了したら、「Optimize」コマンドを使用してトリガーできます。

OPTIMIZE table_name;

Liquid Clusteringは、Databricks Runtime 13.3 LTS以上で動作します。

[1] Databricksは、OPTIMIZEINSERTMERGEUPDATE、およびDELETEなどの同時書き込み操作間の競合を減らすための、クラスタ化テーブルの行レベルの同時性を提供しています。

クラスタ化されたテーブルへのデータ書き込み

ほとんどの操作は、書き込み時に自動的にデータをクラスタ化しません。書き込み時にクラスタ化する操作には、次のようなものがあります:

  • INSERT INTO操作
  • CTASステートメント
  • COPY INTO Parquet形式から
  • spark.write.format("delta").mode("append")

次の状況では適用されません —

  • 書き込み操作が512GB以上のデータを超える場合。
  • SELECTのサブクエリに変換、フィルター、またはジョインが含まれる場合。
  • 投影列がソーステーブルと同じでない場合。

すべての操作がリキッドクラスタリングに適用されるわけではないため、Databricksでは定期的にOPTIMIZEを実行してデータが効率よくクラスタリングされるようにすることをお勧めします。

リキッドクラスタリングは増分であり、クラスタリングする必要のあるデータにのみ必要な範囲で再書き込みされます。更新や挿入が多いテーブルでは、Databricksでは1〜2時間ごとにOPTIMIZEジョブをスケジュールすることをお勧めします。リキッドクラスタリングは増分なので、大部分のクラスタリングされたテーブルのOPTIMIZEジョブは迅速に実行されます。

クラスタリングキーの選択

Databricksでは、一般的に使用されるクエリフィルタに基づいてクラスタリングキーを選択することをお勧めします。クラスタリングキーは任意の順序で定義できます。2つの列が相関している場合、クラスタリングキーとして1つを追加するだけで十分です。

注意: 統計情報が収集されるクラスタキーはデフォルトで4つまでに制限されています。Deltaテーブルの最初の32列にはデフォルトで統計情報が収集されます。この数はテーブルプロパティdelta.dataSkippingNumIndexedColsを介して制御できます。そのプロパティ値より小さい位置インデックスを持つすべての列には統計情報が収集されます。

これが役に立つことを願っています…「はい」ならやってみてください…

この記事のほとんどでは、参考としてhttps://docs.databricks.com/en/delta/clustering.html#see-how-table-is-clusteredを使用しました。

楽しい学びを…

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more