文字列フィールドに照合順序を指定し、Databricks Runtime 16.4 LTS 以降で照合順序を使用する Delta テーブルを読み取ることができます。
テーブルで照合を有効にすると、collations-preview ライターテーブルの機能が追加されます。
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=falseOPTIMIZE table_name ZORDER BY zorder_columnを実行して、既存のすべてのデータ ファイルを書き換える。
クエリの結果では、照合順序は常に Azure 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 Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
スキーマの進化と照合順序
照合順序は、次の規則を使用してスキーマの進化と対話します。
- ターゲット テーブルにソース列が既に存在する場合、ターゲット テーブル内の列の照合順序は変更されません。
- ソース列に照合順序が指定されている場合、ターゲット テーブルに追加された列は、指定した照合順序を使用します。
- 照合順序を持つ列が追加されたときにターゲット テーブルで照合順序が有効になっていない場合は、
collations-previewテーブル機能が有効になります。
制限事項
照合順序が有効になっているテーブルには、次の制限があります。
- Databricks ランタイムで認識されない照合順序を使用して外部に作成されたデルタ テーブルは、クエリ時に例外をスローします。
- Delta Sharingのサポートはありません。
- 照合列は、
CHECK制約では使用できません。 - 生成された列では照合順序を使用できません。
- 照合された列は、ブルームフィルターインデックス列と一緒に使用することはできません。
- Scala または Python 用 OSS Delta Lake API には、照合のサポートがありません。 照合順序を有効にするには、Spark SQL または DataFrame API を使用する必要があります。
- 動的パーティションの上書きは、照合列ではサポートされていません。
- 構造化ストリーミングステートフル クエリでは、照合列を参照できません。
-
collations-previewテーブル機能を考慮しない外部リーダーは、UTF8_BINARYの既定の照合順序にフォールバックします。 -
MAPは、照合された文字列であるキーを持つことはできません。 - UniForm は照合順序では機能しません。