デルタ テーブルの文字列フィールドに照合順序を指定して、大文字と小文字を区別しない照合やロケール対応の順序付けを有効にするなど、文字列の比較と並べ替えの動作を制御できます。 これには、Databricks Runtime 16.4 LTS 以降が必要です。
照合順序の種類、名前付け規則、および優先順位規則の詳細については、「 照合順序」を参照してください。
既定では、Delta Lake は文字列フィールドの照合順序を UTF8_BINARYに設定します。
Important
照合順序を有効にすると、delta テーブルに collations ライター テーブル機能が追加され、外部リーダーやその他のプラットフォーム機能との互換性に影響します。 実稼働テーブルで照合順序を有効にする前に、「 制限事項」 セクションを確認してください。
照合順序を使用してテーブルを作成する
新しいテーブルを作成するときに、列レベルで照合順序を指定できます。 照合順序は、入れ子になった型内の最上位レベルの文字列列と文字列フィールドに適用できます。
CREATE TABLE catalog.schema.my_table (
id BIGINT,
name STRING COLLATE UTF8_LCASE,
metadata STRUCT<label: STRING COLLATE UNICODE>,
tags ARRAY<STRING COLLATE UTF8_LCASE>,
properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta
注
MAP キーは照合順序を使用できません。
MAP値のみが、照合文字列をサポートします。
既存の列の照合順序を変更する
既存の列の照合順序は、次の ALTER TABLEを使用して変更できます。
-- Set a column to case-insensitive collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE
-- Revert a column to the default binary collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
照合順序を変更した後に統計とデータ レイアウトを更新する
列の照合順序を変更しても、既存のデータの書き換えや統計の更新は行われません。 クエリは新しい照合順序の下で正しい結果をすぐに返しますが、次の手順を実行するまで、ファイルのスキップとクラスタリングの効果が低下する可能性があります。
- 列のファイルスキップに関する統計情報を更新します。
ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
- テーブルで液体クラスタリングを使用する場合は、クラスタリング レイアウトを書き換えます。
OPTIMIZE FULL my_table
- テーブルで ZORDER を使用する場合は、増分最適化を無効にして、すべてのファイルを書き換えます。
SET spark.databricks.optimize.incremental = false;
OPTIMIZE my_table ZORDER BY zorder_column;
これらの手順をスキップしても間違った結果は発生しませんが、次の完全な書き換えまで履歴データのクエリ パフォーマンスが低下する可能性があります。
クエリ結果では、照合順序は常に Azure Databricks によって尊重されます。
テーブルの照合を無効化する
照合順序テーブル機能を削除するには、まず、すべての照合列を UTF8_BINARYに戻します。
-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
次に、テーブル機能を削除します。
ALTER TABLE my_table DROP FEATURE collations
詳細については、 Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレード に関するページを参照してください。
スキーマの進化と照合順序
スキーマの進化によって照合順序が指定された列を追加またはマージする場合、次の規則が適用されます。
- ターゲット テーブルにソース列が既に存在する場合、その列のターゲット テーブルの照合順序は保持されます。 ソース列の照合順序は無視されます。
- ソース列が新規で、照合順序が指定されている場合、ターゲット テーブルはその照合順序を新しい列に採用します。
- ターゲット テーブルで
collationsテーブル機能がまだ有効になっていない場合は、照合列を追加すると自動的に有効になります。
制限事項
照合順序が有効になっている Delta テーブルには、次の制限事項が適用されます。
互換性と相互運用性:
-
collationsテーブル機能を認識しない外部リーダーは、UTF8_BINARYにフォールバックするため、不適切な並べ替え順序や比較が生成される可能性があります。 - Delta Sharingでは、既定でない照合順序のカラムにおける個々のパーティションの共有はサポートされていません。 代わりに、テーブルを共有します。
- 照合順序を持つテーブルでは、UniForm はサポートされていません。
- Databricks Runtime で認識されない照合順序で外部に作成されたデルタ テーブルは、クエリ時に例外をスローします。
- Scala または Python 用の OSS Delta Lake API では、コレーションはサポートされていません。 Spark SQL または DataFrame API を使用します。
クエリと機能の制限:
-
CHECK制約では、照合された列を使用できません - 生成された列式では、照合された列を参照できません
- 照合された列は、ブルームフィルターインデックスでは使用できません
- 構造化ストリーミングステートフル クエリ (集計、結合、重複除去) では、照合列を参照できません
-
MAPキーを照合文字列にすることはできません。MAP値のみが照合順序をサポートします