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

Delta Lake の照合のサポート

Delta テーブル内の文字列フィールドに照合を指定して、大文字と小文字を区別しない一致やロケールに対応した順序付けの有効化など、文字列の比較と並べ替えの動作を制御できます。これには、Databricks Runtime 16.4 LTS 以上が必要です。

照合タイプ、命名規則、および優先順位のルールの詳細については、 「照合」を参照してください。

デフォルトでは、Delta Lake は文字列フィールドの照合順序を UTF8_BINARYに設定します。

重要

照合を有効にすると、Delta テーブルにcollationsライター テーブル機能が追加され、外部リーダーやその他のプラットフォーム機能との互換性に影響します。本番運用テーブルで照合を有効にする前に、 「制限事項」セクションを確認してください。

照合順序付きのテーブルを作成する

新しいテーブルを作成するときに、列レベルで照合を指定できます。照合は、ネストされた型内の最上位の文字列列と文字列フィールドに適用できます。

SQL
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を使用して既存の列の照合順序を変更できます。

SQL
-- 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

照合順序を変更した後、統計とデータレイアウトを更新する

列の照合順序を変更しても、既存のデータは書き換えられず、統計も更新されません。クエリは新しい照合順序で正しい結果をすぐに返しますが、ファイルのスキップとクラスタリングは次のステップを実行するまで効果が低くなる可能性があります。

  1. 列のファイルスキップ統計を更新します。
SQL
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. テーブルで液体クラスタリングを使用している場合は、クラスタリングのレイアウトを書き換えます。
SQL
   OPTIMIZE FULL my_table
  1. テーブルで ZORDER が使用されている場合は、増分最適化を無効にして、すべてのファイルを書き換えます。
SQL
   SET spark.databricks.optimize.incremental = false;
OPTIMIZE my_table ZORDER BY zorder_column;

これらのステップをスキップしても不正確な結果が生じることはありませんが、次の完全な書き換えまで履歴データのクエリのパフォーマンスが低下する可能性があります。

照合は、クエリ結果において Databricks によって常に尊重されます。

テーブルの照合を無効にする

照合テーブル機能を削除するには、まず照合されたすべての列をUTF8_BINARYに戻します。

SQL
-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

次にテーブル機能を削除します。

SQL
ALTER TABLE my_table DROP FEATURE collations

詳細については、 「Delta Lake テーブル機能の削除」および「テーブル プロトコルのダウングレード」を参照してください。

スキーマの進化と照合

スキーマ進化が照合順序が指定された列を追加またはマージする場合、次のルールが適用されます。

  • ターゲット テーブルにソース列がすでに存在する場合、その列に対するターゲット テーブルの照合順序は保持されます。ソース列の照合は無視されます。
  • ソース列が新しく、照合が指定されている場合、ターゲット テーブルは新しい列に対してその照合を採用します。
  • ターゲット テーブルでcollationsテーブル機能がまだ有効になっていない場合は、照合列を追加すると自動的に有効になります。

制限

照合が有効になっている Delta テーブルには、次の制限が適用されます。

互換性と相互運用性:

  • collationsテーブル機能を認識しない外部リーダーはUTF8_BINARYにフォールバックしますが、これにより間違った並べ替え順序や比較が生成される場合があります。
  • Delta Sharing 、デフォルト以外の照合列での個々のパーティションの共有はサポートされません。 代わりにテーブルを共有しましょう。
  • 照合のあるテーブルでは UniForm はサポートされません。
  • Databricks Runtimeで認識されない照合順序を使用して外部で作成されたDeltaテーブルは、クエリ時に例外をスローします。
  • ScalaまたはPython用の OSS Delta Lake APIs照合をサポートしていません。 Spark SQLまたはDataFrame APIs使用します。

クエリと機能の制限:

  • 照合列はCHECK制約では使用できません
  • 照合された列は生成された列の式では参照できません
  • 照合列はブルームフィルタインデックスでは使用できません
  • 照合された列は、構造化ストリーミングのステートフル クエリ (集計、結合、重複排除) では参照できません。
  • MAPキーは照合文字列にできません。照合をサポートするのはMAP値のみです

関連している