外部の場所

適用対象:「はい」のチェック マーク Databricks SQL Databricks Runtime 「はい」のチェック マーク Unity Catalog のみ

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

外部の場所

外部の場所とは、ストレージ パスと、そのパスへのアクセスを認可するストレージの資格情報を結合した、セキュリティ保護可能なオブジェクトです。

外部の場所の作成者は、その初期所有者です。 外部の保存先の所有者は、外部の保存先の名前、URI、およびストレージ資格情報を変更できます。

外部の場所を作成すると、そのアクセス権をアカウントレベルのプリンシパル (ユーザーとグループ) に付与できます。

外部の場所を使用する権限を持つユーザーまたはグループは、ストレージの資格情報に直接アクセスすることなく、その場所のパス内の任意のストレージ パスにアクセスできます。

アクセス制御をさらに細かく設定するには、外部テーブルGRANT を使用して、外部の場所にある個々のファイルへのアクセスをカプセル化できます。

外部の場所の名前は非修飾なので、メタストア内で一意である必要があります。

外部の場所のストレージ パスは、別の外部の場所のストレージ パス内、または明示的なストレージの資格情報を使用する外部テーブルのストレージ パス内に含めることはできません。

警告

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

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

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

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

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

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

外部の場所の ER 図

-- Grant `finance` user permission to create external location on `my_azure_storage_cred` storage credential, and then create an external location on the specific path to which `my_azure_storage_cred` has access
> GRANT CREATE EXTERNAL LOCATION ON STORAGE CREDENTIAL `my_azure_storage_cred` TO `finance`
> CREATE EXTERNAL LOCATION `finance_loc` URL 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance'
    WITH (CREDENTIAL `my_azure_storage_cred`)
    COMMENT 'finance';

-- Grant read, write, and create table access to the finance location to `finance` user
> GRANT READ FILES, WRITE FILES, CREATE EXTERNAL TABLE ON EXTERNAL LOCATION `finance_loc` TO `finance`;

-- `finance` can read from any storage path under abfss://depts/finance but nowhere else
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/finance` WITH (CREDENTIAL my_azure_storage_cred);
  100
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/hr/employees` WITH (CREDENTIAL my_azure_storage_cred);
  Error

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

-- Cannot list files under an external table with a user that doesn't have SELECT permission 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