類型擴展
重要
在 Databricks Runtime 15.2 和更新版本中,這項功能處於公開預覽狀態。
啟用類型擴大的 Tables 可讓您將 column 數據類型變更為較寬的類型,而不需重寫基礎數據檔。 您可以手動變更 column 類型,或使用 schema 演進來演進 column 類型。
類型擴大需要 Delta Lake。 預設情況下,所有 Unity Catalog 管理 tables 都會使用 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 |
若要避免意外將整數 values 轉換為十進位數,您必須手動確認從 byte
、short
、int
或 long
變更為 decimal
或 double
。
注意
將任何數值類型變更為 decimal
時,總有效位數必須等於或大於起始有效位數。 如果您也增加規模,則總精確度必須增加相應的數量。
byte
、short
和 int
類型的最小目標為 decimal(10,0)
。
long
最低目標為 decimal(20,0)
。
如果您要將兩個小數位數新增至具有 decimal(10,1)
的欄位,則最小目標為 decimal(12,3)
。
最上層 columns 和結構、映射及陣列中的巢狀欄位都支援類型變更。
啟用類型擴大
您可以在現有的 table 上,透過將 delta.enableTypeWidening
table 屬性設定為 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的數據類型,您必須符合下列條件:
- 命令使用
INSERT
或MERGE 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 功能。