Unity Catalog 管理的資料表是 Azure Databricks 中預設且推薦的資料表類型。 Unity Catalog 會幫你管理儲存、版面配置和維護,這樣可以降低儲存和運算成本,同時自動讓資料表保持最佳化。 關於受管理資料表及其優點的完整說明,請參閱 Unity Catalog 管理的 Delta Lake 與 Apache Iceberg 資料表。
若要將外部或外來 Delta Lake 資料表轉換為 Azure Databricks 中的 Unity Catalog 受控資料表,請使用 ALTER TABLE ... SET MANAGED 命令;若為外部資料表,則使用目錄總管。 轉換後保留資料表設定,包括名稱、設定、權限與檢視,並保留資料表歷史。
具體 SET MANAGED 語法取決於你的來源資料表是外部還是外部。 使用錯誤的來源語法會導致指令失敗。 在轉換之前,請參考 「選擇你來源資料表的正確指令」。
如需外部資料表轉換,另請參閱:SET MANAGED
- 減少讀者與作者的休息時間。
- 在轉換過程中處理並行寫入。
- 可讓您將已轉換的受管理資料表還原為外部資料表。
- 重定向基於路徑的讀寫,讓舊有程式碼在轉換後能正常運作。
雖然你也可以使用 CREATE TABLE AS SELECT (CTAS)將外部資料表轉換成受管理資料表,但 Databricks 建議 SET MANAGED 你有上述優點。
為你的來源資料表選擇正確的指令
外部資料表與外部資料表使用不同的 SET MANAGED 語法。 在轉換前,請先在目錄檔案總管或 Catalog 中 DESCRIBE EXTENDED 確認你的來源資料表類型,然後使用如下表所述的 matching 指令:
| 來源資料表類型 | 命令 | Notes |
|---|---|---|
| External | ALTER TABLE ... SET MANAGED |
不要加或 MOVECOPY。 請參閱 先決條件 與 轉換說明。 |
| 洋 | ALTER TABLE ... SET MANAGED {MOVE \| COPY} |
你必須指定其中之一 MOVE 或 COPY。 請參閱 先決條件 與 轉換說明。 |
MOVE與COPY選項僅適用於外部資料表,因為外部目錄管理外部資料表的資料與元資料。
MOVE 並控制 COPY 該原始資料表在轉換後是否仍可存取。 外部資料表沒有外部目錄可保存,因此這個選擇不適用於它們。
如果你使用錯誤的指令來處理來源表類型,Spark 會產生以下錯誤:
- 如果你在轉換外部資料表時新增
MOVEORCOPY選項,指令會失敗。DELTA_ALTER_TABLE_SET_MANAGED_UNSUPPORTED_COPY_MOVE_SYNTAX要解決的話,就不要ALTER TABLE ... SET MANAGED選任何一個選項。 - 若兩者皆省略
MOVECOPY,且在轉換外部資料表時,指令將失敗。DELTA_ALTER_TABLE_SET_MANAGED_COPY_OR_MOVE_REQUIRED要解決,則加上MOVE或COPY。
先決條件
前置條件會因您是轉換外部資料表還是外來資料表而有所不同。
外部表格
將外部資料表轉換為受管理資料表需具備以下先決條件:
- 格式:表格必須採用三角洲湖格式。
-
執行時:您必須使用 Databricks Runtime 17.3 LTS 或以上版本,或是無伺服器運算才能使用
SET MANAGED、UNSET MANAGED、TRUNCATE UNIFORM HISTORY或 。 - 讀寫器:Azure Databricks 的原始資料表讀寫器必須使用 Databricks Runtime 15.4 LTS 或以上版本。 如果您的讀取器或寫入器使用 14.3 LTS 或更早版本,請參閱 舊版讀取器和寫入器。
-
外部用戶端:外部(非 Databricks)用戶端必須支援讀取 Unity 目錄管理的資料表。 請參閱 帶有 Delta 用戶端的存取表。
- 使用 Access Insights 儀表板來查看存取您資料表的讀取者和寫入者是否為 Databricks Runtime 或外部的非 Databricks 系統。
-
功能相容性:如果您的資料表具有
minReaderVersion=2、minWriterVersion=7和tableFeatures={..., columnMapping},SET MANAGED指令會因DELTA_TRUNCATED_TRANSACTION_LOG錯誤而失敗。 用DESCRIBE DETAIL確認你的表格是否具備這些屬性。 請參閱 Delta Lake 功能相容性和通訊協定。
轉換後,基於路徑的讀寫操作將自動重新導向至新的管理位置,這可能會帶來輕微的效能負擔。 Databricks 建議將所有基於路徑的存取遷移到基於名稱的存取,以避免效能負擔。 請參見 基於路徑的重定向。
Important
為避免衝突,請取消外部資料表上現有 OPTIMIZE 的指令工作(如液體叢集、壓縮等 ZORDER),並且在將外部資料表轉換為受管理資料表時,不要排程任何工作。
外部資料表
當將外部資料表轉換為受管理資料表時,僅支援使用 Hive metastore 與 Glue Federation 聯合的外部資料表。
將外部資料表轉換為受管理資料表有以下先決條件:
- 資料格式:外來資料表必須使用 Delta Lake 格式。 若要執行 Parquet 的一次性轉換,請參閱 轉換為 Delta Lake。
- 執行時間:Databricks 執行環境 17.3 或以上。
- 資料表類型:Hive metastore (HMS) 資料表類型必須是外部 HMS 資料表。 如果表格是受管理的 HMS 表格,則指令會失敗。
-
權限:資料表的
OWNER或MANAGE權限,以及CREATE的EXTERNAL LOCATION權限。
若要將外部資料表轉換為外部資料表,請參見「 將外部資料表轉換為外部 Unity 目錄資料表」。
停機時間與資料複製時間
SET MANAGED此指令可將停機時間降至最低或消除,相較於其他方法,例如DEEP CLONE。
外部表格
外部資料表的轉換過程採用兩步驟:
- 初始資料複製(無停機):指令將資料表資料與 Delta 交易日誌從外部位置複製至受管理位置。 外部資料表的主動讀寫器可不中斷地運作。
- 切換至受管理位置(短暫停機):在第一步中提交到外部位置的資料會移至受管理位置,並更新資料表以登錄新的受管理位置。 在此階段,所有寫入外部位置的作業都會暫時被阻擋,導致寫入者停機。 使用 Databricks Runtime 16.4 LTS 或以上的讀者不會遇到停機,但使用 Databricks Runtime 15.4 LTS 及以下的讀者可能會遇到停機。
下表顯示依據來源資料表大小以及估計每個 CPU 核心每分鐘 0.5 至 2 GB 的吞吐率所推算的停機時間:
| 資料表大小 | 建議的叢集大小 | 預估資料複製時間 | 預計讀者與作者休息時間 |
|---|---|---|---|
| 100 GB 或更少 | 32核心 / 超大型 SQL 倉庫 | ~6分鐘或更短 | ~1-2分鐘或更短 |
| 1 TB | 64核心 / 超大 SQL 資料倉儲 | ~30 分鐘 | ~1-2分鐘 |
| 10 結核病 | 256核心/4X大型SQL倉庫 | ~1.5 小時 | ~1-5分鐘 |
注意
停機時間可能會因檔案大小、檔案數量及提交次數等因素而異。
外部資料表
外部資料表轉換的停機時間取決於您使用的是 MOVE 還是 COPY:
- 對
MOVE而言,可能會發生如外部資料表所述的停機情況。 請參閱 外部表格。 - 對於
COPY,你負責管理停機時間,因為轉換過程會將來源資料表複製到管理儲存位置,建立兩個獨立的資料副本。 你負責在外部目錄中停用對來源資料表的讀寫,並將工作負載遷移到使用新的管理資料表。
轉換為管理資料表
可使用 Catalog Explorer 或 SQL 轉換外部資料表,或使用 SQL 轉換外部資料表。
使用 Catalog Explorer(測試版)的外部資料表
Important
使用 Catalog Explorer 將外部資料表轉換為受管理資料表目前仍處於 測試階段。
使用 Catalog Explorer,你一次可以轉換一個結構描述中的一個或多個外部資料表。
在 Catalog 瀏覽器中,前往你想轉換的表格或模式。
在 「關於此表 」(表詳細頁面)或「 關於此結構 」(結構詳細頁面)中,點選 「探索優化」。
在「 為什麼要遷移到 Unity Catalog 管理的資料表?」 對話框中,點擊 繼續。
選擇你想轉換的外部表格。 如果你從表格詳細頁面開啟對話框,目錄檔案總管會預先選擇你的表格。 請使用搜尋欄尋找更多表格。 管理資料表無法選擇。
點擊 建立轉換筆記本。
可選擇輸入筆記本名稱。 預設情況下,這會將筆記本儲存到你的主資料夾。 點擊 瀏覽 以儲存到其他位置。
在筆記本中檢視最佳實務,並確認你符合所有 先決條件。
執行 SET MANAGED Queries 儲存格。
儲存格執行後,資料表類型會在目錄總管中顯示為 MANAGED 而非 EXTERNAL 。 如果狀態沒有立即更新,請重新整理頁面。
使用 SQL 的外部資料表
若要轉換外部資料表,請使用 SET MANAGED 不含 or MOVECOPY 的選項。 這些選項只適用於外國桌。 請參閱 「選擇正確的指令給你的來源資料表」。
根據你的外部資料表是否啟用了 Apache Iceberg 讀取(UniForm),請執行以下其中一個指令。 要確認你的資料表是否啟用了 Iceberg 讀取,請參考「驗證 Iceberg 讀取是否啟用」。
對於未啟用 Iceberg 讀取的 Unity Catalog 外部資料表,請執行以下指令:
ALTER TABLE catalog.schema.my_external_table SET MANAGED;轉換後,您可以在受管資料表上啟用 Iceberg 讀取,而不需要相容性問題。
對於已啟用 Iceberg 讀取功能的 Unity Catalog 外部資料表,請執行以下指令:
ALTER TABLE catalog.schema.my_external_table SET MANAGED TRUNCATE UNIFORM HISTORY;包含
TRUNCATE UNIFORM HISTORY以維持最佳資料表效能與相容性。TRUNCATE UNIFORM HISTORY它只截斷 UniForm Iceberg 歷史,並未刪除 Delta 歷史。 此命令在資料截斷後,會導致 Iceberg 出現短暫的讀取和寫入停機時間。
資料表轉換後,現有的讀寫串流會失敗。 重新啟動相同設定的串流,以自動使用基於路徑的重定向。 確認你的讀者和作者是否使用受管理的表格。 請參見 串流行為。
預測優化在轉換後會自動啟用,除非你手動關閉。 請參閱 驗證是否啟用預測優化。
Azure Databricks 會將資料保留在你的 Unity 目錄外部位置 14 天,以便進行回滾。 請參閱 復原受控資料表轉換。 14 天後,啟用預測優化後,Azure Databricks 會自動刪除這些資料,以回收儲存空間並節省成本。 如果你關閉預測最佳化,請在 14 天後於新轉換的受控資料表上執行 VACUUM(需使用 Databricks Runtime 17.3 LTS 或以上版本,或無伺服器運算),以自行回收儲存空間。
VACUUM my_converted_table
注意
即使啟用預測優化,Unity Catalog 外部位置的資料可能在 14 天後不會被刪除。 例如,當管理資料表使用頻率低或規模較小時,這種情況就可能發生。 如果之前的資料還在,請手動執行 VACUUM 移除。
Azure Databricks 只會刪除外部位置的資料。 會保留 Delta 交易記錄和 Unity Catalog 中資料表的參考。
使用 SQL 的外部資料表
要將您的 Unity Catalog 外部資料表轉換為 Unity Catalog 管理,請執行以下指令。 與外部資料表轉換不同,外部資料表轉換需要你指定其中之一 MOVE 或 COPY。 若兩者皆省略,指令將失效。DELTA_ALTER_TABLE_SET_MANAGED_COPY_OR_MOVE_REQUIRED
ALTER TABLE source_table SET MANAGED {MOVE | COPY}
source_table
已在 Unity Catalog 中聯邦化的現有外部資料表。
MOVE將表格轉換為受管理表格,並停用對外部目錄中來源表格的存取。
透過外部目錄或路徑存取在轉換資料表後會失敗。 數據表的所有讀取器和寫入器都必須使用 Unity 目錄命名空間進行存取。 例如:
SELECT * FROM catalog_name.schema_name.table_name;不支援路徑存取,轉換表格後會失敗。 例如:
SELECT * FROM delta.`protocol://path/to/table`;預測最佳化會設定為 ,
INHERIT除非您手動設定。 要檢查是否啟用預測優化,請參閱 「驗證是否啟用預測優化」。
COPY將表格轉換為受管理表格,而不修改或停用對外部型錄中來源表格的存取權。
- 在轉換為管理型時,轉換過程會將來源資料表的資料複製到為該外部資料表定義的管理儲存位置,產生兩個獨立的副本:新的受管理資料表與外部目錄中的來源資料表。
- 與讀取和寫入失敗的情況不同
MOVE,使用COPY時,您負責正確停用對外部型錄中來源表格的讀取和寫入,並確保工作量已移轉至新型錄。
請考慮下列事項:
- 表格轉換後,您必須重新啟動使用外部資料表進行的串流工作(讀或寫),並確認讀者與寫入者是否使用受管理資料表。
- 在轉換前,如果你把來源資料表丟進外部目錄,Unity 目錄也會丟棄外部資料表。 當你將資料表轉為管理式後,將來源資料表丟棄到外部目錄中並不會影響 Unity 目錄管理的表格。
- 如果複製資料時指令中斷,請重新啟動。 指令會從先前停止的地方繼續執行。
- 對於外部資料表的轉換,Databricks 會將轉換後資料表上的預測最佳化設為
INHERIT,而不是自動啟用。 要檢查是否啟用預測優化,請參閱 「驗證是否啟用預測優化」。
Warning
Databricks 建議避免在同一個資料表上同時執行多個 SET MANAGED 指令,這可能導致資料表狀態不一致。
驗證轉換
要驗證你的資料表是否成功轉換成受管理資料表,請檢查該資料表 Type 是否為 MANAGED。 你可以做以下其中一種:
打開新分頁,進入目錄總管。 在「關於此表格」的細節標籤中,表格類型顯示為已管理。
請執行以下 SQL 指令檢查表格
Type:DESCRIBE EXTENDED catalog_name.schema_name.table_name若要同時檢查多個資料表或執行檢查腳本,請改為查詢
information_schema.tables:SELECT table_type FROM system.information_schema.tables WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
傳承讀者與作者
Databricks 建議將所有讀取和寫入用戶端升級至 Databricks Runtime 15.4 LTS 或更新版本,以使用 SET MANAGED 的完整功能,包括資料表歷史記錄保留功能。
如果你的讀取端或寫入端使用 Databricks Runtime 15.3 或更早版本,仍然可以使用 SET MANAGED。 不過,轉換為受控資料表後,你只能依版本回溯到歷史提交版本,而不能依時間戳記。
如果你在 14 天內回滾為外部資料表,系統會重新啟用對轉換前建立的歷史提交進行時光回溯。 對於在轉換與回復之間對轉換後的受控資料表所做的提交,不支援使用時間戳記進行時間旅行。 請參閱 復原受控資料表轉換。
在使用 Databricks Runtime 15.3 或更低版本轉換後寫入資料表時,必須移除以下 inCommitTimestamp 功能:
ALTER TABLE <table_name> DROP FEATURE inCommitTimestamp;
基於路徑的重定向
在 Databricks Runtime 18.1 及以上版本中,當你將外部資料表轉換成 Unity 目錄管理的資料表後,基於路徑的讀取與寫入會自動重新導向到新的管理位置。 基於路徑的讀取是指像 SELECT * FROM delta.`/path/to/my_table` 這樣的程式碼。 基於路徑的重定向透過允許使用儲存路徑的舊有程式碼在不重構的情況下繼續運作,從而減少遷移到受管理資料表所需的時間與精力。
外部資料表轉換不會重定向路徑存取。
對於低延遲的使用情境,Azure Databricks 建議你將路徑式存取遷移到名稱式存取。 基於路徑的重定向會為每次基於路徑的讀寫增加數百毫秒的延遲,並且要求舊的 Delta logs 必須在你的 Unity Catalog 外部位置保持活躍。 基於名稱的讀寫不會有額外的效能負擔。 請參閱 將以路徑為基礎的程式碼遷移為以名稱為基礎。
將路徑導向程式碼遷移至名稱導向
如果你決定不使用基於路徑的重定向,你可以遷移舊有程式碼。 要遷移,請將基於路徑的參考替換為基於名稱的參考。
以下程式碼範例包含一個基於路徑的檔案表參考:
SELECT * FROM delta.`/path/to/customers_table`;
將基於路徑的參考替換為基於名稱的外部資料表參考,如下程式碼所示:
SELECT * FROM catalog_name.schema_name.customers_table;
串流使用行為
支援路徑型重新導向的串流處理可在下列 Databricks Runtime 版本中進行讀取和寫入:
- 在 Databricks Runtime 18.1 及以上版本中,支援讀取操作。
- 寫入支援於 Databricks Runtime 18.2 及以上版本。
轉換後,你必須重新啟動所有串流工作,以避免從上一個資料表位置讀取或寫入。
基於路徑的串流讀寫會在下一個檢查點失敗並停止,且附帶遷移提示:
- 對於讀取操作,串流將會引發一個錯誤:
DELTA_STREAMING_INTERRUPTED_BY_MANAGED_TABLE_CONVERSION: The table at <path> has been converted to a Unity Catalog managed table. The stream has been stopped to ensure data consistency. Restart the stream and it will automatically resume from the last committed offset using the converted table。 - 對於寫入,轉換後的第一個微批次會產生錯誤:
Operation not allowed: STREAMING WRITE cannot be performed on a table with redirect feature. The no redirect rules are not satisfied []。
要解決錯誤,請重新啟動相同設定的串流。 基於路徑的存取會自動重定向到受管理的資料表。
關於基於路徑的重定向限制,請參見 限制。
轉換失敗故障排除
本節說明如何解決將外部資料表轉換為 Unity 目錄管理資料表 SET MANAGED時的常見問題。
VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED
如果轉換失敗,請務必使用相同的 Databricks Runtime 版本重試。 不同版本的元資料序列化方式可能不同,如果你在不同的 Databricks 執行時版本重試轉換,會導致 VERSIONED_CLONE_INTERNAL_ERROR.EXISTING_FILE_VALIDATION_FAILED 失敗。
轉換過程中叢集關閉
如果叢集在轉換期間關閉,則命令可能會失敗,並產生 DELTA_ALTER_TABLE_SET_MANAGED_INTERNAL_ERROR。 重試命令以繼續轉換。
損毀的外部資料表
若外部資料表已損壞(例如資料表狀態無效),轉換可能會因錯誤 DELTA_TRUNCATED_TRANSACTION_LOG如 、 DELTA_TXN_LOG_FAILED_INTEGRITY、 DELTA_STATE_RECOVER_ERRORS或 而失敗。 在嘗試轉換前,請確認你能在外部資料表上執行基本操作,例如 DESCRIBE DETAIL。
檔案驗證失敗
該 SET MANAGED 指令會驗證它已將資料表最新快照中的所有檔案複製到新的管理資料表位置。 若有任何檔案遺失,指令會 DELTA_ALTER_TABLE_SET_MANAGED_FAILED.FILE_VALIDATION_FAILED 錯誤失敗。
若要解決此問題:
- 檢查你的 Spark 驅動程式日誌,找出哪些檔案無法被遷移。
- 確認這些檔案是否存在於來源外部資料表位置且可存取。
- 重新嘗試指令
ALTER TABLE ... SET MANAGED。
如果問題持續,請聯絡 Databricks 客服。
復原受管理資料表轉換
Important
回滾命令需要無伺服器運算或 Databricks Runtime 17.3 LTS 或更新版本。
外部數據表
將外部資料表轉換為受控資料表後,你可以在 14 天內使用 UNSET MANAGED 指令還原。 這會更新資料表中繼資料,使其重新指向原始的外部位置。 Databricks 會保留轉換後對受管理位置的所有寫入資料。
若要回復至外部資料表,請執行下列命令:
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED;
記住下列資訊:
- 如果回滾指令中斷或失敗,請重新執行以重試。
- 回滾後,您必須重新啟動串流工作,與轉換後相同。
- 在轉換與回滾之間對受管理位置所做的提交,可允許依版本進行時間旅行,但不允許依時間戳記進行。
- 回滾七天後,Azure Databricks 會自動刪除受管理位置的資料。
外部資料表:MOVE
Warning
你必須先執行 UNSET MANAGED,才能刪除受管理資料表。 若未先執行 UNSET MANAGED 就丟棄資料表,可能會導致資料遺失或不一致。
你可以使用 UNSET MANAGED 指令回滾資料表遷移,並重新存取外部目錄中的來源資料表。 回復需要兩個步驟:首先,您必須將該資料表回復為外部資料表,接著刪除該外部資料表,讓該資料表重新聯結為外來資料表。
- 若要回復至外部資料表,請執行下列命令:
ALTER TABLE catalog.schema.my_managed_table UNSET MANAGED
- 若要將資料表重新聯合到外部資料表,請使用以下指令移除外部資料表:
DROP TABLE catalog.schema.my_managed_table
外部資料表會在下一次目錄同步後可供使用。
記住下列資訊:
- 對於你在轉換與回滾之間於外部位置所做的提交,你可以依版本進行時間回溯,但不能依時間戳記進行。
- 回復後七天,Databricks 會刪除受管理位置中的資料。
外部資料表:COPY
要回滾資料表遷移,你不需要執行這個 UNSET MANAGED 指令,因為外部目錄中的來源資料表沒有被修改。 移除受管理資料表,Databricks 會在下一次目錄同步後重新聯合成外部資料表。
驗證回復
對外部資料表和外來資料表採用不同的復原驗證方式。
外部數據表
要驗證你的管理資料表是否成功回滾到外部資料表,請檢查該資料表 Type 是否為 EXTERNAL。 你可以做以下其中一種:
打開新分頁,進入目錄總管。 在「關於此表」的細節標籤中,表類型顯示為外部。
請執行以下 SQL 指令檢查表格
Type:DESCRIBE EXTENDED catalog_name.schema_name.table_name若要同時檢查多個資料表或執行檢查腳本,請改為查詢
information_schema.tables:SELECT table_type FROM system.information_schema.tables WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';
外部資料表
要確認你的管理資料表是否成功回滾到外部資料表,請檢查該資料表 Type 是否為 FOREIGN。 你可以做以下其中一種:
打開新分頁,進入目錄總管。 在「關於此表」的細節標籤中,表類型顯示為「外來」。
請執行以下 SQL 指令檢查資料表類型:
SELECT table_type FROM system.information_schema.tables WHERE table_catalog = 'catalog_name' AND table_schema = 'schema_name' AND table_name = 'table_name';欄位
table_type顯示為FOREIGN。
注意
不要使用 DESCRIBE EXTENDED 來驗證外部資料表轉換作業或回滾。 聯邦使用 hive_metastore 目錄行為來執行此指令,因此無論資料表的實際狀態如何,都會顯示該資料表 Type 為 EXTERNAL。
進階主題
本節包含將外來和外部資料表轉換為受管理資料表的進階主題。
在結構描述層級或目錄層級進行轉換
你可以有以下兩種選項來自動化結構層級或目錄層級的表格轉換:
在結構中反覆迭代你的資料表,逐個轉換。
使用 DiscoverX Labs 專案一次轉換整個結構或目錄:
df = (dx.from_tables("prod.*.*") .with_sql("ALTER TABLE {full_table_name} SET MANAGED;") .apply())
可以參考 Databricks Labs 和 discoverx。
在外部目錄中建立資料表
你可以在外國目錄中建立外部或受管理的資料表。 行為取決於結構描述設定:
-
針對 Glue 或 eHMS 資料結構,或 針對在 Unity 目錄中設定受管理的位置的資料結構:如果您執行
CREATE TABLE foreign_catalog.schema.table,這會建立 Unity 目錄受管理或外部資料表。 Databricks 不會推送或同步資料表到外部目錄。 -
對於來自內部 Hive 中繼存放區連線的結構描述:如果您嘗試在非本地結構描述中建立資料表,它仍會建立一個非本地資料表,並且同時會在內部結構描述中
hive_metastore建立一個資料表。 - 對於舊版工作區的 Hive metastore:由於它具有讀取與寫入聯合功能,如果您在外部目錄中建立資料表,也會在內部 Hive metastore 中建立資料表。
以 DBFS 為後端的外部資料表
在轉換 DBFS 支援的資料表時,Databricks 會將 DBFS 路徑的當前映射儲存為外部資料表的雲端路徑位置。
限制
將外部或外部資料表轉換為受管理資料表有以下限制:
在轉換後但回滾前所做的提交資料表歷史允許按版本進行時間旅行,但無法依時間戳記進行時間旅行。
OpenSharing 與此
SET MANAGED指令並不完全相容。 支援開放式 OpenSharing,但 Databricks 之間的共享不會自動更新接收資料表的託管位置。 收件人會繼續從舊位置閱讀,直到你重新分享該表格。 要重新分享資料表,請執行以下指令:ALTER SHARE <share_name> REMOVE TABLE <table_name>; ALTER SHARE <share_name> ADD TABLE <table_name> AS <table_share_name> WITH HISTORY;如果您的 Unity Catalog 元儲存庫、目錄或結構的預設管理位置與來源資料表的儲存位置位於不同的雲端區域,您可能會從雲端供應商那裡產生額外的跨區域資料傳輸費用。
要確認你的結構與目錄的位置,請執行以下指令:
DESC SCHEMA EXTENDED <catalog_name>.<schema_name>; DESC CATALOG EXTENDED <catalog_name>;要確認你的元儲存庫位置,請執行以下任一指令:
DESC METASTORE; -- Option 1 SELECT * FROM system.information_schema.metastores; -- Option 2
基於路徑的重定向限制:
- 轉換後必須重新開始任何串流工作。 請參見 串流行為。
- 基於路徑的重定向僅對遷移過程有向下相容性,且無法啟用新的路徑式存取 Unity 目錄管理的資料表。
外部資料表限制:
- 只有透過 Hive metastore 和 Glue Federation 聯邦的外部資料表才支援轉換。