タイプ拡幅
プレビュー
この機能は、Databricks Runtime 15.2 以降で パブリック プレビュー 段階です。
型の拡大が有効になっているテーブルでは、基になるデータ ファイルを書き換えることなく、列のデータ型をより広い型に変更できます。 列タイプを手動で変更することも、スキーマ進化を使用して列タイプを進化させることもできます。
型拡張には Delta Lake が必要です。 すべての Unity Catalog マネージドテーブルは、デフォルトで Delta Lake を使用します。
サポートされているタイプの変更
タイプの幅は、次のルールに従って変更できます。
元の型 | サポートされている拡張型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
整数値を誤って 10 進数に昇格させないようにするには、 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]
型の拡大を削除すると、現在のテーブル スキーマに準拠していないすべてのデータ ファイルが書き換えられます。 ドロップDeltaテーブル機能を参照してください。