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設定をオーバーライドします。
SET 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 または DataFrame APIs を使用する必要があります。
動的パーティション上書きは、照合された列ではサポートされていません。
照合された列は、構造化ストリーミングのステートフル クエリでは参照できません。
collations-preview
テーブル機能を尊重しない外部リーダーは、デフォルトの照合順序であるUTF8_BINARY
にフォールバックします。MAP
は、照合された文字列であるキーを持つことはできません。UniForm は照合では機能しません。