外部 tables
適用於:Databricks SQL Databricks Runtime
Unity Catalog 和內建的 Azure Databricks Hive 中繼資料庫會使用預設位置管理 tables。 Unity Catalog 推出多個新的可保護的物件,以管理 grant 雲端儲存中的數據許可權。
-
Unity Catalog 物件,用來從雲端記憶體 providers中擷取長期 credentials。
-
Unity Catalog 物件,用來將雲端物件儲存 URI 與 儲存憑證產生關聯。
外部 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 服務帳戶
範例
-- `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