類型擴展
重要
在 Databricks Runtime 15.2 和更新版本中,這項功能處於公開預覽狀態。
已啟用類型擴大的數據表可讓您將數據行數據類型變更為較寬的類型,而不需要重寫基礎數據檔。 您可以手動變更數據行類型,或使用架構演進來發展數據行類型。
類型擴大需要 Delta Lake。 所有 Unity 目錄受控數據表預設都會使用 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 |
若要避免意外將整數值提升為小數,您必須手動確認從 byte
、short
、int
或 long
變更為 decimal
或 double
。
注意
將任何數值類型變更為 decimal
時,總有效位數必須等於或大於起始有效位數。 如果您也增加規模,則總精確度必須增加相應的數量。
byte
、short
和 int
類型的最小目標為 decimal(10,0)
。
long
最低目標為 decimal(20,0)
。
如果您要將兩個小數位數新增至具有 decimal(10,1)
的欄位,則最小目標為 decimal(12,3)
。
最上層數據行和巢狀結構、地圖和陣列內的欄位支援類型變更。
啟用類型擴大
您可以將 table 屬性設定 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>
這項作業會更新數據表架構,而不需重寫基礎數據檔。
使用自動架構演進擴大類型
架構演進適用於類型擴大,以更新目標數據表中的數據類型,以符合傳入數據類型。
注意
若未啟用類型擴大,架構演進一律會嘗試安全地向下轉換數據,以符合目標數據表中的數據行類型。 如果您不想在目標數據表中自動擴大數據類型,請在啟用架構演進的工作負載之前停用類型擴大。
若要使用架構演進來擴大數據行的數據類型,您必須符合下列條件:
- 命令使用
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 資料表功能。