共用方式為


外部 tables

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

Unity Catalog 和內建的 Azure Databricks Hive 中繼資料庫會使用預設位置管理 tables。 Unity Catalog 推出多個新的可保護的物件,以管理 grant 雲端儲存中的數據許可權。

外部 table

外部 table 是使用 LOCATION 子句參考外部記憶體路徑的 table

記憶體路徑應該包含在您已獲授與存取權的現有 外部位置 中。

或者,您也可以參考 您已獲授與存取權的記憶體認證

使用外部 tables 會將存取權授與外部 table的使用者,將記憶體路徑、外部位置和記憶體認證抽象化。

警告

如果您的工作區層級 Hive 中繼存放區中註冊了 schema (資料庫),則以 [CASCADE] 選項刪除該 schema 會導致該 schema 位置中的所有檔案被遞迴地刪除,無論 table 類型(Managed 或 External)。

如果將 schema 註冊到 Unity Catalog 中繼存放區,則會遞迴刪除來自 Unity Catalog所管理的 tables 檔案。 不過,外部 tables 的檔案未被刪除。 您必須直接使用雲端儲存體提供者來管理這些檔案。

因此,為了避免意外遺失數據,您絕對不應該在 Hive 資料目錄中將 schema 註冊到已有數據的位置。 您也不應該在由 Hive 中繼資料庫架構管理的位置建立新的外部 tables,或包含 Unity Catalog 管理的 tables。

關聯性的圖形表示法

下圖描述兩者之間的關聯性:

  • 記憶體 credentials
  • 外部位置
  • 外部 tables
  • 記憶體路徑
  • IAM 實體
  • Azure 服務帳戶

外部位置 ER 圖表

範例

-- `finance` can create an external table over specific object within the `finance_loc` location
> CREATE TABLE sec_filings LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings';

-- Create or replace an external table from a query
> CREATE OR REPLACE TABLE sec_filings
  LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings'
  AS (SELECT * FROM current_filings);

-- Cannot list files under an external table without permissions on it
> LIST `abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings`
  Error
> LIST `abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings/_delta_log`
  Error

-- Grant access to sec_filings to all employees
> GRANT SELECT ON TABLE sec_filings TO employee;

-- Any member of the `employee` group can securely read sec_filings
> SELECT count(1) FROM sec_filings;
 20

-- Any member of the `employee` group can list files under the sec_filings table
> LIST `abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings`
  _delta_log
> LIST `abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings/_delta_log`
  00000.json