次の方法で共有


型の拡大

重要

この機能は、Databricks Runtime 15.2 以上でのパブリック プレビュー段階にあります。

型の拡大が有効になっているテーブルを使用すると、基になるデータ ファイルを書き換えることなく、列のデータ型をより大きい型に変更できます。 列の型を手動で変更するか、スキーマ進化を使用して列の型を拡大することができます。

型の拡大には Delta Lake が必要です。 すべての Unity Catalog マネージド テーブルで、Delta Lake が既定で使用されます。

サポートされている型の変更

以下の規則に従って、型を拡大することができます。

ソースの種類 サポートされるより拡大された型
byte shortintlongdecimaldouble
short intlongdecimal, double
int longdecimaldouble
long decimal
float double
decimal より高い精度とスケールの decimal
date timestampNTZ

整数値を誤って 10 進数に昇格させることを防ぐには、byteshortintlong から decimal または double への型の変更を手動で行う必要があります。

Note

何らかの数値型を decimal に変更する場合、合計の有効桁数は元の有効桁数以上となる必要があります。 スケールも大きくする場合は、合計有効桁数を対応する分だけ増やす必要があります。

byteshortint 型の最小のターゲットは、decimal(10,0) です。 long の最小ターゲットは decimal(20,0) です。

decimal(10,1) を持つフィールドに 2 個の桁を追加したい場合、最小のターゲットは decimal(12,3) になります。

型の変更は、構造体、マップ、配列内に入れ子になっている最上位レベルの列とフィールドでサポートされています。

型の拡大を有効にする

以下のように、delta.enableTypeWidening テーブル プロパティを true に設定することで、既存のテーブル上で型の拡大を有効にすることができます。

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')

以下のように、テーブルの作成時に型の拡大を有効にすることもできます。

  CREATE TABLE T(c1 INT) USING DELTA TBLPROPERTIES('delta.enableTypeWidening' = 'true')

重要

型の拡大を有効にすると、テーブル機能 typeWidening-preview が設定され、リーダー プロトコルとライター プロトコルがアップグレードされます。 型の拡大が有効になっているテーブルを操作するには、Databricks Runtime 15.2 以上を使用する必要があります。 外部クライアントもこのテーブルを操作する場合は、それらがこのテーブル機能をサポートしていることを確認します。 「Azure Databricks で Delta Lake 機能の互換性を管理する方法は?」を参照してください。

型の変更を手動で適用する

以下のように、ALTER COLUMN コマンドを使用して、型を手動で変更します。

ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>

この操作は、基になるデータ ファイルを書き換えることなくテーブル スキーマを更新します。

スキーマの自動進化を使用して型を拡大する

スキーマ進化は、型の拡大と連携して、入力データの種類と一致するようにターゲット テーブル内のデータ型を更新します。

Note

型の拡大が有効になっていない場合、スキーマ進化は常に、ターゲット テーブル内の列の型と一致するようにデータを安全にダウンキャストしようとします。 ターゲット テーブル内のデータ型を自動的に拡大したくない場合は、スキーマ進化が有効になっているワークロードを実行する前に、型の拡大を無効にします。

スキーマ進化を使用して列のデータ型を拡大するには、以下の条件を満たす必要があります。

  • コマンドが INSERT または MERGE INTO を使用する。
  • コマンドは、スキーマの自動進化が有効な状態で実行される。
  • ターゲット テーブルで、型の拡大が有効になっている。
  • ソースの列の型は、ターゲットの列の型よりも大きい。
  • 型の拡大が型の変更をサポートしている。

これらの条件のすべてを満たさない型の不一致は、通常のスキーマ適用規則に従います。 「スキーマの適用」を参照してください。

型の拡大テーブル機能を無効にする

以下のように、プロパティを false に設定することで、有効なテーブル上での誤った型の拡大を防ぐことができます。

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')

この設定により、テーブルに対する将来の型の変更は防止されますが、型の拡大テーブル機能が削除されたり、変更済みの型が元に戻ることはありません。

型の拡大テーブル機能を完全に削除する必要がある場合は、次の例に示すように DROP FEATURE コマンドを使用します。

 ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]

型の拡大を削除すると、現在のテーブル スキーマに準拠していないすべてのデータ ファイルが書き換えられます。 「Delta テーブル機能の削除」を参照してください。