Delta Lake の照合のサポート
Databricks Runtime 16.1 以降の Delta テーブルの文字列フィールドの照合順序を指定できます。
テーブルの照合を有効にすると、 collations-preview
ライター テーブル機能が追加されます。 Databricks Runtime 15.4 以降では、照合順序が有効になっているテーブルを読み取ることができます。 「Databricks で Delta Lake 機能の互換性を管理する方法」を参照してください。
デフォルトでは、Delta Lake は文字列フィールドの照合順序を UTF8_BINARY
に設定します。
列レベルで照合順序を持つテーブルを作成する
次のコマンドを使用して、列レベルで照合順序を持つ新しいテーブルを作成できます。
CREATE TABLE $tableName (
nonCollatedColName STRING,
collatedColName STRING COLLATE UNICODE,
structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
mapColName MAP<STRING, STRING COLLATE UNICODE>,
arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta
照合順序を指定するためのテーブル列の変更
次のコマンドを使用して、照合を使用するように既存の列を更新できます。
ALTER TABLE tableName ALTER COLUMN columnName TYPE newType
デフォルト以外の照合順序を削除するには (存在する場合):
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY
列の照合順序を utf8_lcase
に変更するには:
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE
テーブルの照合を変更しても、以前に書き込まれたデータの統計やデータ・レイアウトは自動的に更新されません。 新しい照合順序でヒストリカルデータをスキップするファイルを改善するために、 Databricks では次のことをお勧めします。
-
ANALYZE table_name COMPUTE DELTA STATISTICS
を実行して、既存のデータファイルの統計をスキップしてファイルを更新します。 -
リキッドクラスタリングが有効になっているテーブルの場合は、
OPTIMIZE FULL table_name
を実行してリキッドクラスタリングを更新します。 -
ZORDER
を使用するテーブルの場合は、次の操作を行います。-
Sparkセッションの増分最適化を無効にするには、次のコマンドでデフォルトのSpark設定をオーバーライドします。
SQLSET spark.databricks.optimize.incremental=false
-
OPTIMIZE table_name ZORDER BY zorder_column
を実行して、既存のすべてのデータファイルを書き換えます。
-
照合順序は、クエリの結果で Databricks によって常に尊重されます。
テーブルの照合を無効にする
照合機能を削除する前に、テーブル内の各文字列列の照合を明示的に無効にする必要があります。
次の構文を使用して、列の照合順序を UTF8_BINARY
に設定します。
ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY
テーブル機能を削除するには、次のコマンドを実行します。
ALTER TABLE table_name
DROP FEATURE collations-preview
ドロップDeltaテーブル機能を参照してください。
スキーマの進化と照合順序
照合は、次のルールを使用してスキーマ進化と対話します。
- ソース列がターゲット・テーブルに既に存在する場合、ターゲット・テーブルの列の照合順序は変更されません。
- ソース列に照合順序が指定されている場合、ターゲット表に追加される列は指定された照合順序を使用します。
- 照合順序のある列が追加されたときに、ターゲット テーブルで照合が有効になっていない場合、
collations-preview
テーブル機能は有効になります。
制限
照合が有効になっているテーブルには、次の制限があります。
- Databricks Runtime によって認識されない照合順序を使用して外部で作成された Delta テーブルは、クエリ時に例外をスローします。
- Delta Sharing はサポートされていません。
- 照合された列は、
CHECK
制約では使用できません。 - 生成された列では照合を使用できません。
- 照合された列は、ブルーム・フィルター・インデックス列では使用できません。
- OSS Delta Lake APIs for Scala または Pythonでは照合はサポートされていません。 照合を有効にするには、 Spark SQL または データフレーム APIs を使用する必要があります。
- 動的パーティション上書きは、照合された列ではサポートされていません。
- 照合された列は、構造化ストリーミングのステートフル クエリでは参照できません。
collations-preview
テーブル機能を尊重しない外部リーダーは、デフォルトの照合順序であるUTF8_BINARY
にフォールバックします。MAP
は、照合された文字列であるキーを持つことはできません。- UniForm は照合では機能しません。