型拡張 (Type widening)
プレビュー
この機能は、Databricks Runtime 15.2 以降でパブリック プレビューされています。
型の拡大が有効になっているテーブルでは、基になるデータ ファイルを書き換えることなく、列のデータ型をより広い型に変更できます。 列タイプを手動で変更することも、スキーマ進化を使用して列タイプを進化させることもできます。
型拡張には Delta Lake が必要です。 すべての Unity Catalog マネージドテーブルは、デフォルトで Delta Lake を使用します。
サポートされている型の変更
型を拡大拡張できるのは、次の規則に従います。
元の型 |
サポートされている拡張型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
整数値が誤って小数に昇格されるのを避けるには、型の変更をbyte
、 short
、 int
、またはlong
からdecimal
またはdouble
に手動でコミットする必要があります。
注:
数値型を decimal
に変更する場合、合計精度は開始精度以上である必要があります。 スケールも大きくする場合は、合計精度を対応する量だけ増やす必要があります。
byte
、 short
、および 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 テーブルの機能を参照してください。