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 は照合では機能しません。