型拡張 (Type widening)

プレビュー

この機能は、Databricks Runtime 15.2 以降でパブリック プレビューされています。

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

型拡張には Delta Lake が必要です。 すべての Unity Catalog マネージドテーブルは、デフォルトで Delta Lake を使用します。

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

型を拡大拡張できるのは、次の規則に従います。

元の型

サポートされている拡張型

byte

shortintlongdecimaldouble

short

int, long, decimal, double

int

longdecimaldouble

long

decimal

float

double

decimal

decimal の、より高い精度とスケール

date

timestampNTZ

整数値が誤って小数に昇格されるのを避けるには、型の変更をbyteshortint 、またはlongからdecimalまたはdoubleに手動でコミットする必要があります。

注:

数値型を decimalに変更する場合、合計精度は開始精度以上である必要があります。 スケールも大きくする場合は、合計精度を対応する量だけ増やす必要があります。

byteshort、および int タイプの最小ターゲットは decimal(10,0)です。long の最小ターゲットは decimal(20,0)です。

decimal(10,1)のフィールドに小数点以下 2 桁を追加する場合、最小ターゲットは decimal(12,3)です。

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

型拡張を有効にする

既存のテーブルで型の拡大拡張を有効にするには、 delta.enableTypeWidening table プロパティを trueに設定します。

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

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

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

重要

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

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

タイプを手動で変更するには、 ALTER COLUMNコマンドを使用します。

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

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

自動スキーマ進化による型拡張

訪問者進化は、型の拡張と連携して、受信データの型と一致するようにターゲット テーブル内のデータ型を更新します。

注:

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

訪問者進化を使用して列のデータ型を拡張するには、次の条件を満たす必要があります。

  • コマンドは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]

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