共用方式為


操作外部數據表

在 Unity 目錄中,外部資料表會將其資料檔案儲存在雲端租戶的雲端物件儲存中。 Unity Catalog 持續管理資料表的元資料,確保能對所有查詢進行全面的資料治理。 然而,它不管理資料的生命週期、最佳化、儲存位置或配置。

當你定義 Unity Catalog 外部資料表時,必須指定儲存位置。 此地點為 Unity 目錄中註冊的 外部地點 。 當你丟棄外部資料表時,Unity Catalog 會移除資料表的元資料,但不會刪除底層的資料檔案。

本文著重於 Unity 目錄外部資料表。 舊版Hive中繼存放區中的外部表具有不同的特性。 請參閱舊版 Hive 中繼存放區中的資料庫物件 (英文)。

何時使用外部表格

Databricks 建議針對下列使用案例使用外部數據表:

  • 您需要註冊由現有數據支持的表格,該表格與 Unity Catalog 的管理表格不相容。
  • 您也需要從不支援其他外部存取模式的非 Databricks 用戶端直接存取數據。 當使用者從外部系統存取資料檔時,不會強制執行 Unity 目錄許可權。 請參閱 使用外部系統存取 Databricks 的資料

在大多數情況下,Databricks 建議使用 Unity Catalog 管理的資料表 ,以利用自動資料表優化、更快的查詢效能及降低成本。 若要將外部資料表遷移到受管理資料表,請參見「 將外部資料表轉換為受管理的 Unity 目錄資料表」。

這很重要

如果您使用非 Databricks 用戶端或從 Databricks 內使用路徑存取來更新外部資料表的元數據,則該元數據不會自動與 Unity Catalog 狀態同步。 Databricks 建議不要進行這類元數據更新,但如果您執行一個更新,則必須執行 MSCK REPAIR TABLE <table-name> SYNC METADATA,讓 Unity 目錄中的架構處於最新狀態。 請參閱 REPAIR TABLE

外部資料表的檔案格式

外部資料表可以使用下列檔案格式:

  • 三角洲
  • CSV
  • JSON
  • AVRO
  • 拼花地板
  • 光學字符識別 (ORC)
  • 簡訊

建立外部表格

你可以用 SQL 指令或 DataFrame 寫入操作建立外部資料表。

開始之前

在建立外部資料表之前,你必須先設定一個外部位置,以允許存取你的雲端儲存。

欲了解更多關於設定外部位置的資訊,請參閱 「建立外部位置以連接雲端儲存與 Azure Databricks」。

若要建立外部數據表,您必須符合下列許可權需求:

  • 在外部位置 CREATE EXTERNAL TABLE 上的許可權,允許存取由外部資料表存取的 LOCATION
  • USE CATALOG 表格父目錄的權限。
  • USE SCHEMA數據表父架構的許可權。
  • CREATE TABLE數據表父架構的許可權。

備註

當 S3 外部位置與多個中儲存庫相關聯時,避免授予使用該 S3 位置的資料表寫入權限,因為不同中繼儲存區寫入同一外部資料表可能導致一致性問題。 不過,從同一個 S3 外部位置跨多個 Metastore 讀取是安全的。

SQL 指令範例

在筆記本或 SQL 查詢編輯器中使用下列其中一個命令範例來建立外部數據表。

在下列範例中,取代佔位元值:

  • <catalog>:將包含資料表的目錄名稱。
  • <schema>:將包含數據表的架構名稱。
  • <table-name>:表格的名稱。
  • <column-specification>:每個數據行的名稱和數據類型。
  • <bucket-path>:用於創建資料表的雲端儲存桶路徑。
  • <table-directory>:將建立數據表的目錄。 針對每個數據表使用唯一目錄。

ADLS

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

S3

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 's3://<bucket-path>/<table-directory>';

如需資料表建立參數的詳細資訊,請參閱 CREATE TABLE

DataFrame 寫入操作

你也可以從查詢結果或 DataFrame 寫入操作建立外部資料表。 在建立帶有 DataFrames 的資料表時,請使用子 LOCATION 句來指定外部儲存路徑。

以下 SQL 語法選項可搭配 DataFrame 操作:

刪除外部資料表

若要刪除資料表,您必須是表的擁有者,或擁有該資料表的 MANAGE 許可權。 若要卸除外部數據表,請執行下列 SQL 命令:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

當您卸除外部數據表時,Unity 目錄不會刪除雲端記憶體中的基礎數據。 如果您需要移除與資料表相關聯的數據,您必須直接刪除基礎數據檔。

範例筆記本:建立外部數據表

您可以使用下列範例筆記本來建立目錄、架構和外部數據表,以及管理其許可權。

在 Unity 目錄筆記本中建立和管理外部數據表

取得筆記本