使用外部數據表
外部數據表會將數據儲存在雲端租用戶雲端物件記憶體的目錄中。 當您定義外部資料表時,必須指定儲存位置。
只有在您也需要從非 Databricks 用戶端直接存取數據時,Databricks 才建議使用外部數據表。 當使用者從外部系統存取資料檔時,不會強制執行 Unity 目錄許可權。
警告
如果您使用非 Databricks 用戶端或從 Databricks 內使用路徑型存取來更新外部數據表元數據,該元數據不會自動同步處理狀態與 Unity 目錄。 Databricks 建議不要進行這類元數據更新,但如果您執行一個更新,則必須執行 MSCK REPAIR TABLE <table-name> SYNC METADATA
,讓 Unity 目錄中的架構處於最新狀態。 請參閱 REPAIR TABLE。
注意
本文著重於 Unity 目錄外部資料表。 舊版Hive中繼存放區中的外部數據表有不同的行為。 請參閱舊版 Hive 中繼存放區中的資料庫物件 (英文)。
使用外部數據表
Azure Databricks 只會管理外部數據表的元數據,而且不會使用與包含架構相關聯的管理記憶體位置。 Unity Catalog 中對數據表的註冊只是指向數據檔案的指標。 當您卸除外部資料表時,不會刪除資料檔。
當您建立外部資料表時,您可以將現有的數據檔案目錄註冊為數據表,或提供建立新數據文件的路徑。
外部資料表可以使用下列檔案格式:
- DELTA
- CSV
- JSON
- AVRO
- PARQUET
- ORC
- TEXT
建立外部數據表
若要建立外部數據表,可以使用 SQL 命令或 Dataframe 寫入作業。
開始之前
若要建立外部數據表,您必須符合下列許可權需求:
- 外部位置
CREATE EXTERNAL TABLE
許可權,授與外部數據表所存取之LOCATION
的存取權。 - 數據表父架構的
USE SCHEMA
許可權。 - 表格的父目錄上的
USE CATALOG
權限。 - 數據表父架構的
CREATE TABLE
許可權。
如需更多有關設定外部位置的資訊,請參閱建立外部位置以將雲端儲存連線到 Azure Databricks (英文)。
SQL 命令範例
在筆記本或 SQL 查詢編輯器中使用下列其中一個命令範例來建立外部數據表。
在下列範例中,取代佔位元值:
-
<catalog>
:將包含資料表的目錄名稱。 -
<schema>
:將包含數據表的架構名稱。 -
<table-name>
:表格的名稱。 -
<column-specification>
:每個數據行的名稱和數據類型。 -
<bucket-path>
:用於創建資料表的雲端儲存桶路徑。 -
<table-directory>
:將建立數據表的目錄。 針對每個數據表使用唯一目錄。
CREATE TABLE <catalog>.<schema>.<table-name>
(
<column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';
如需資料表建立參數的詳細資訊,請參閱 CREATE TABLE。
DataFrame 寫入作業
許多使用者會從查詢結果或 DataFrame 寫入作業建立外部數據表。 下列文章示範一些可用來在 Azure Databricks 上建立外部數據表的模式:
卸除外部數據表
若要刪除資料表,您必須是表的擁有者,或擁有該資料表的 MANAGE
許可權。 若要卸除外部數據表,請執行下列 SQL 命令:
DROP TABLE IF EXISTS catalog_name.schema_name.table_name;
當您卸除外部數據表時,Unity 目錄不會刪除雲端記憶體中的基礎數據。 如果您需要移除與資料表相關聯的數據,您必須直接刪除基礎數據檔。
範例筆記本:建立外部數據表
您可以使用下列範例筆記本來建立目錄、架構和外部數據表,以及管理其許可權。