外部テーブル
適用対象: Databricks SQL Databricks Runtime
Unity Catalog と組み込みの Azure Databricks Hive メタストアでは、マネージド テーブルの既定の場所が使用されます。 Unity Catalog には、クラウド オブジェクト ストレージ内のデータに権限を付与するための新しいセキュリティ保護可能なオブジェクトがいくつか導入されています。
-
クラウド ストレージ プロバイダーからの長期的な資格情報を抽象化するために使用される Unity Catalog オブジェクト。
-
クラウド オブジェクト ストレージ URI をストレージの資格情報に関連付けるために使用される Unity Catalog オブジェクト。
外部テーブル
外部テーブルとは、LOCATION
句を使用して外部ストレージ パスを参照するテーブルです。
ストレージ パスは、アクセス権が付与されている既存の外部の場所に含まれる必要があります。
または、アクセス権が付与されているストレージの資格情報を参照することもできます。
外部テーブルを使用すると、外部テーブルへのアクセス権が付与されているユーザーに対して、ストレージ パス、外部の場所、およびストレージの資格情報が抽象化されます。
警告
スキーマ (データベース) がワークスペース レベルの Hive メタストアに登録されている場合、CASCADE
オプションを使用してそのスキーマを削除すると、テーブルの種類 (マネージドまたは外部) に関係なく、そのスキーマの場所にあるすべてのファイルが再帰的に削除されます。
スキーマが Unity Catalog メタストアに登録されている場合、Unity Catalog マネージド テーブルのファイルは再帰的に削除されます。 ただし、外部テーブルのファイルは削除されません。 これらのファイルを、クラウド ストレージ プロバイダーを使用して直接管理する必要があります。
そのため、誤ってデータが失われるのを防ぐために、Hive メタストア内のスキーマを既存のデータを含む場所に登録しないでください。 また、Hive メタストア スキーマによって管理される場所、または Unity Catalog マネージド テーブルを含む場所に新しい外部テーブルを作成する必要もありません。
リレーションシップのグラフィック表示
次の図は、以下の項目のリレーションシップを示しています。
- ストレージの資格情報
- 外部の場所
- 外部テーブル
- ストレージ パス
- 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