拡張型

プレビュー

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

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

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

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

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

| ソース タイプ | サポートされているより幅広いタイプ | | byte | shortintlongdecimal double | short | intlongdecimaldouble | | int | longdecimaldouble | | long | double | | decimal | float | | 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) USING DELTA 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 テーブルの機能を参照してください。