メインコンテンツまでスキップ

インデックスをスキップするデータ

important

DATASKIPPING INDEX は Databricks Runtime 7.0 で削除されました。 代わりに、 データ スキップ機能が向上した Delta テーブルを使用することをお勧めします。

important

このドキュメントは廃止されており、更新されない可能性があります。 このコンテンツに記載されている製品、サービス、またはテクノロジはサポートされなくなりました。 「Delta Lake のデータのスキップ」を参照してください。

形容

Databricks Runtime には、パーティションのプルーニングに加えて、無関係なデータのスキャンを回避するための別の機能、つまり Data Skipping Index が含まれています。 ファイルレベルの統計情報を使用して、ファイルの粒度で追加のスキップを実行します。 これは、Hive スタイルのパーティション分割で機能しますが、これに依存しません。

データ・スキップの効果は、データの特性とその物理レイアウトによって異なります。 スキップはファイルの粒度で行われるため、データを複数のファイルに水平方向に分割することが重要です。 これは通常、複数の追加ジョブ、(シャッフル) パーティショニング、バケット化、および spark.sql.files.maxRecordsPerFileの使用の結果として発生します。 これは、ソートされたバケット (df.write.bucketBy(...).sortBy(...).saveAsTable(...) / CREATE TABLE ... CLUSTERED BY ... SORTED BY ...) を持つテーブル、またはパーティションキーと相関する列 ( brandName - modelNamecompanyID - stockPriceなど) だけでなく、データが何らかのソート性/クラスター化性を示す場合 ( orderIDbitcoinValueなど) でも最適に機能します。

注記

このベータ機能には、いくつかの重要な 制限があります

  • オプトインです:テーブルごとに手動で有効にする必要があります。
  • これはSQLのみであり、データフレーム APIはありません。
  • テーブルにインデックスが付けられると、インデックスが明示的に REFRESH されるまで、後続の INSERT または ADD PARTITION 操作の影響が表示される とは限りません

SQL 構文

インデックスの作成

SQL
CREATE DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

指定されたテーブルで最初の (つまり、 左端) N 列をサポートし、 Nspark.databricks.io.skipping.defaultNumIndexedCols によって制御されます (デフォルト: 32)

partitionBy 列は常にインデックス化され、この N にはカウントされません。

列のインデックスの作成

SQL
CREATE DATASKIPPING INDEX ON [TABLE] [db_name.]table_name
FOR COLUMNS (col1, ...)

指定した列のリストに対して、指定したテーブルでデータのスキップを有効にします。 上記と同様に、指定された列に加えて、すべての partitionBy 列に常にインデックスが付けられます。

インデックスの説明

SQL
DESCRIBE DATASKIPPING INDEX [EXTENDED] ON [TABLE] [db_name.]table_name

特定のテーブルのどの列にインデックスが付けられているか、および収集される対応するファイル・レベルの統計のタイプが表示されます。

EXTENDEDを指定すると、"effectiveness_score" という 3 番目の列が表示され、対応する列のフィルターに対して DataSkipping がどの程度有益であると予想されるかのおおよその尺度を示します。

フルインデックスの更新

SQL
REFRESH DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

インデックス全体を再構築します。 つまり テーブルのすべてのパーティションのインデックスが再作成されます。

パーティションの更新

SQL
REFRESH DATASKIPPING INDEX ON [TABLE] [db_name.]table_name
PARTITION (part_col_name1[=val1], part_col_name2[=val2], ...)

指定したパーティションのみを再インデックスします。 この操作は、通常、インデックスの完全更新よりも高速です。

ドロップインデックス

SQL
DROP DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

指定されたテーブルで Data Skipping を無効にし、すべてのインデックス データを削除します。