型の拡大
重要
この機能は、Databricks Runtime 15.2 以上でのパブリック プレビュー段階にあります。
型の拡大が有効になっているテーブルを使用すると、基になるデータ ファイルを書き換えることなく、列のデータ型をより大きい型に変更できます。 列の型を手動で変更するか、スキーマ進化を使用して列の型を拡大することができます。
型の拡大には Delta Lake が必要です。 すべての Unity Catalog マネージド テーブルで、Delta Lake が既定で使用されます。
サポートされている型の変更
以下の規則に従って、型を拡大することができます。
ソースの種類 | サポートされるより拡大された型 |
---|---|
byte |
short , int , long , decimal , double |
short |
int 、 long 、 decimal 、 double |
int |
long , decimal , double |
long |
decimal |
float |
double |
decimal |
decimal より高い精度と規模で |
date |
timestampNTZ |
整数値を 10 進数に誤って昇格しないようにするには、byte
、short
、int
、または long
から decimal
または double
への型変更を手動でコミットする必要があります。
Note
何らかの数値型を decimal
に変更する場合、合計の有効桁数は元の有効桁数以上となる必要があります。 スケールも大きくする場合は、合計精度を対応する量増やす必要があります。
byte
、short
、および int
型の最小ターゲットは 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) 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 テーブル機能の削除」を参照してください。