メインコンテンツまでスキップ

タイプ拡幅

備考

プレビュー

この機能は、Databricks Runtime 15.2 以降で パブリック プレビュー 段階です。

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

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

サポートされているタイプの変更

タイプの幅は、次のルールに従って変更できます。

元の型

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

byte

shortintlongdecimaldouble

short

intlongdecimaldouble

int

longdecimaldouble

long

decimal

float

double

decimal

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

date

timestampNTZ

整数値を誤って 10 進数に昇格させないようにするには、 byteshortint、または long から decimal または doubleへの型の変更を手動でコミットする必要があります。

注記

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

byteshortint タイプの最小ターゲットは decimal(10,0) です。 long の最小目標は decimal(20,0) です。

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

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

タイプ拡幅を有効にする

既存のテーブルでタイプ拡大を有効にするには、delta.enableTypeWidening table プロパティを次のように設定しますtrue

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

テーブルの作成中にタイプ拡幅を有効にすることもできます。

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

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

タイプ変更の手動適用

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

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

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

自動スキーマ進化によるタイプの幅を広げる

スキーマの進化は、型の拡大と連携して、受信データの型と一致するようにターゲット テーブルのデータ型を更新します。

注記

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

スキーマ進化を使用して列のデータ型を拡大するには、次の条件を満たす必要があります。

  • このコマンドでは、 INSERT または MERGE INTOを使用します。
  • 自動スキーマ進化を有効にしたコマンド実行。
  • ターゲット テーブルでタイプの拡大が有効になっています。
  • ソース カラム タイプは、ターゲット カラム タイプよりも幅が広くなっています。
  • タイプワイドニングはタイプチェンジをサポートします。

これらの条件をすべて満たさない型の不一致は、通常のスキーマ強制ルールに従います。 スキーマ強制を参照してください。

タイプ拡幅処理テーブル機能を無効にする

有効なテーブルで誤って型が拡大されるのを防ぐには、プロパティを次のように設定しますfalse

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

この設定により、テーブルに対する今後のタイプの変更は防止されますが、タイプ拡張テーブル機能や変更されたタイプの取り消しは削除されません。

タイプ ワイド テーブル フィーチャを完全に削除する必要がある場合は、次の例に示すように DROP FEATURE コマンドを使用できます。

SQL
 ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]

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