外部テーブル

適用対象:check marked yes Databricks SQL check marked yes Databricks Runtime

Unity Catalog と組み込みの Azure Databricks Hive メタストアでは、マネージド テーブルの既定の場所が使用されます。 Unity Catalog には、クラウド オブジェクト ストレージ内のデータに権限を付与するための新しいセキュリティ保護可能なオブジェクトがいくつか導入されています。

外部テーブル

外部テーブルとは、LOCATION 句を使用して外部ストレージ パスを参照するテーブルです。

ストレージ パスは、アクセス権が付与されている既存の外部の場所に含まれる必要があります。

または、アクセス権が付与されているストレージの資格情報を参照することもできます。

外部テーブルを使用すると、外部テーブルへのアクセス権が付与されているユーザーに対して、ストレージ パス、外部の場所、およびストレージの資格情報が抽象化されます。

警告

スキーマ (データベース) がワークスペース レベルの Hive メタストアに登録されている場合、CASCADE オプションを使用してそのスキーマを削除すると、テーブルの種類 (マネージドまたは外部) に関係なく、そのスキーマの場所にあるすべてのファイルが再帰的に削除されます。

スキーマが Unity Catalog メタストアに登録されている場合、Unity Catalog マネージド テーブルのファイルは再帰的に削除されます。 ただし、外部テーブルのファイルは削除されません。 これらのファイルを、クラウド ストレージ プロバイダーを使用して直接管理する必要があります。

そのため、誤ってデータが失われるのを防ぐために、Hive メタストア内のスキーマを既存のデータを含む場所に登録しないでください。 また、Hive メタストア スキーマによって管理される場所、または Unity Catalog マネージド テーブルを含む場所に新しい外部テーブルを作成する必要もありません。

リレーションシップのグラフィック表示

次の図は、以下の項目のリレーションシップを示しています。

  • ストレージの資格情報
  • 外部の場所
  • 外部テーブル
  • ストレージ パス
  • IAM エンティティ
  • Azure サービス アカウント

External location ER diagram

-- `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