バリアントシュレッディングを使用してパフォーマンスを最適化する

バリアント分割では、一般的に発生するフィールドを基になる Parquet ファイルに個別の列として格納することで、 VARIANT 列のクエリ パフォーマンスが向上します。 細断すると、フィールドの読み取りに必要な I/O が減り、バイナリ BLOB ではなく列形式を使用して圧縮が向上します。

VARIANTApache Iceberg と Delta Lake のバリアント型のサポートおよびクエリバリアント データを参照してください。

必要条件

Databricks Runtime 17.3 以降は、細断された VARIANT テーブルの読み取りと書き込みを行うために必要です。 バリアント統計の収集とデータのスキップによる最適なクエリ パフォーマンスを実現するために、Databricks では Databricks Runtime 18.1 以降をお勧めします。

細断を有効にする

Databricks Runtime 17.3 以降では、VARIANTを使用して 1 つ以上のCREATE TABLE列を含む新しいテーブルを作成すると、シュレッディングが自動的に有効になります。

CREATE OR REPLACE TABLEALTER TABLE は自動的に細断を有効にしません。 これにより、既存のテーブルとワークロードの細断動作の変更を回避できます。

既存のテーブルの場合は、 enableVariantShredding テーブルプロパティを TRUE に設定し、プロパティを FALSEに設定してオプトアウトすることで、手動で細分化を選択できます。

デルタ湖

ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'true');

氷山テーブル

ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'true');

テーブルプロパティ enableVariantShreddingtrueに設定されていることを確認して、シュレッディングが有効になっていることを確認します。

特定のテーブルの細断をオプトアウトする

将来の書き込み時に特定のテーブルを細断から除外するには、 enableVariantShredding table プロパティを FALSE に設定します。

デルタ湖

ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'false');

氷山テーブル

ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'false');

既存のテーブルから細断を削除する

既存のテーブルのシュレッディングを削除するには、 ALTER TABLE コマンドを使用してフィーチャーを削除します。 また、この操作では、細断された VARIANT データを、変更されていない VARIANT 形式に書き換え、 enableVariantShredding table プロパティを false に設定します。

ALTER TABLE my_table DROP FEATURE "variantShredding";

制限事項

  • データを細断すると、書き込みにいくつかのオーバーヘッドが発生します。
  • シュレッディングを有効にしても、テーブル内の既存の VARIANT データは自動的に変換されません。 これは、機能が有効になった後に書き込まれたデータにのみ適用されます。 既存の VARIANT データを書き換える場合は、 REORG TABLE my_table APPLY (SHRED VARIANT)を使用します。
  • シュレッディングは、配列またはマップ内に格納VARIANTデータを除き、構造体の最上位VARIANT列またはVARIANTフィールドに適用されます。