共用方式為


類型擴展

重要

在 Databricks Runtime 15.2 和更新版本中,這項功能處於公開預覽狀態。

啟用類型擴大的 Tables 可讓您將 column 數據類型變更為較寬的類型,而不需重寫基礎數據檔。 您可以手動變更 column 類型,或使用 schema 演進來演進 column 類型。

類型擴大需要 Delta Lake。 預設情況下,所有 Unity Catalog 管理 tables 都會使用 Delta Lake。

支援的型別變更

您可以根據下列規則來擴大類型:

來源類型 支援的更廣泛的類型
byte shortintlongdecimaldouble
short intlongdecimaldouble
int long、 、 decimaldouble
long decimal
float double
decimal 具有更高精確度和規模的 decimal
date timestampNTZ

若要避免意外將整數 values 轉換為十進位數,您必須手動確認從 byteshortintlong 變更為 decimaldouble

注意

將任何數值類型變更為 decimal時,總有效位數必須等於或大於起始有效位數。 如果您也增加規模,則總精確度必須增加相應的數量。

byteshortint 類型的最小目標為 decimal(10,0)long 最低目標為 decimal(20,0)

如果您要將兩個小數位數新增至具有 decimal(10,1)的欄位,則最小目標為 decimal(12,3)

最上層 columns 和結構、映射及陣列中的巢狀欄位都支援類型變更。

啟用類型擴大

您可以在現有的 table 上,透過將 delta.enableTypeWideningtable 屬性設定為 true來啟用類型擴大。

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

您也可以在創建 table 時啟用類型擴大。

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

重要

當您啟用類型擴大時,它會設定 table 功能 typeWidening-preview,這會升級讀取器和寫入器通訊協定。 您必須使用 Databricks Runtime 15.2 或更新版本,才能與 tables 進行互動,而其類型擴大功能已啟用。 如果外部用戶端也與 table互動,請確認它們支援這項 table 功能。 請參閱 Azure Databricks 如何管理 Delta Lake 功能相容性?

手動套用類型變更

ALTER COLUMN使用 命令手動變更類型:

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

這項作業會更新 tableschema,而不需重寫基礎數據檔。

使用自動演進功能擴充 schema 類型

Schema 演算法配合類型擴大,將目標 tables 中的類型變更為 update 數據類型,以符合傳入數據的類型。

注意

若未啟用類型擴大,schema 演進一律會嘗試安全地向下傳送數據,以比對目標 table中的 column 類型。 如果您不想在目標 tables中自動拓寬數據類型,請在執行已啟用 schema 演進的工作負載之前停用類型拓寬。

若要使用 schema 演進來擴大 column的數據類型,您必須符合下列條件:

  • 命令使用 INSERTMERGE INTO
  • 命令會在啟用自動 schema 演進時執行。
  • 目標 table 已啟用類型擴展。
  • 來源 column 類型比目標 column 類型寬。
  • 類型擴大支援類型變更。

不滿足這些條件的類型不匹配將遵循一般 schema 強制執行規則。 請參閱 Schema 的執法

停用 table 類型擴展功能

您可以將屬性設定為 false,以防止在啟用 tables 時類型意外擴大:

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

此設定可防止 table的未來類型變更,但不會 remove 已變更 table 功能或復原類型的類型擴大。

如果您需要完全 remove 類型擴充table 功能,您可以使用 DROP FEATURE 命令,如下列範例所示:

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

當停止類型擴展時,會重寫所有不符合當前 tableschema 的數據檔。 請參閱 Drop Delta table 功能