Unity Catalog ボリュームまたは外部の場所で COPY INTO を使用してデータを読み込む

COPY INTO を使用して、COPY INTO でサポートされている任意のソースおよびファイル形式から Unity Catalog のマネージド テーブルまたは外部テーブルにデータを取り込む方法を説明します。 Unity Catalog では、生データへの安全なアクセスを構成するための新しいオプションが追加されています。 Unity Catalog ボリュームまたは外部の場所を使用して、クラウド オブジェクト ストレージ内のデータにアクセスできます。

Databricks では、COPY INTO を使用した取り込みプロセスの一環として、ボリュームを使用して クラウド ストレージ内のファイルにアクセスすることを推奨します。 ボリュームと外部の場所を使用するための推奨事項の詳細については、「Unity Catalog のベスト プラクティス」を参照してください。

このチュートリアルでは、COPY INTO コマンドを使用して、Azure アカウント内の Azure Data Lake Storage Gen2 (ADLS Gen2) コンテナーから Databricks SQL のテーブルにデータを読み込む方法を説明します。

この記事の手順では、ADLS Gen2 のソース ファイルにアクセスできるように、管理者が Unity Catalog ボリュームまたは外部の場所を構成していることを前提としています。 管理者がサービス プリンシパルを使用するようにコンピューティング リソースを構成した場合は、「サービス プリンシパルで COPY INTO を使用してデータを読み込む」または「チュートリアル: Spark SQL を使用した COPY INTO」を参照してください。 管理者が一時的な資格情報 (BLOB SAS トークン) を与えた場合は代わりに、「一時的な資格情報で COPY INTO を使用してデータを読み込む」の手順に従ってください。

準備

COPY INTO を使用して、Unity Catalog ボリュームから、または外部の場所として定義されているクラウド オブジェクト ストレージ パスからデータを読み込むには、次の情報が必要です。

  • ボリュームに対する READ VOLUME 特権、または外部の場所に対する READ FILES 特権。

    ボリュームの作成の詳細については、「Unity Catalog ボリュームとは」を参照してください。

    外部の場所を作成する方法の詳細については、「クラウド ストレージを Azure Databricks に接続するための外部の場所を作成する」を参照してください。

  • クラウド オブジェクト ストレージ URL またはボリューム パスの形式でソース データへのパス。

    クラウド オブジェクト ストレージ URL の例: abfss://container@storageAccount.dfs.core.windows.net/raw-data/json

    ボリューム パスの例: /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json

  • ターゲット テーブルを含むスキーマに対する USE SCHEMA アクセス許可。

  • 親カタログに対する USE CATALOG アクセス許可。

Unity Catalog の特権の詳細については、「Unity カタログの特権とセキュリティ保護可能なオブジェクト」を参照してください。

ボリュームからデータを読み込む

Unity Catalog ボリュームからデータをロードするには、READ VOLUME 権限が必要です。 ボリュームへの権限は、指定したボリュームのすべての入れ子になったディレクトリに適用されます。

たとえば、パス /Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/ のボリュームにアクセスできる場合は、次のコマンドが有効です。

COPY INTO landing_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM '/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json'
FILEFORMAT = JSON;

必要に応じて、dbfs スキームでボリューム パスを使用することもできます。 たとえば、次のコマンドは有効です。

COPY INTO landing_table
FROM 'dbfs:/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM 'dbfs:/Volumes/quickstart_catalog/quickstart_schema/quickstart_volume/raw_data/json'
FILEFORMAT = JSON;

外部の場所を使用してデータを読み込む

次の例では、Unity Catalog の外部の場所を使用して、ADLS Gen2 からテーブルへデータを読み込み、ソース コードへのアクセスを提供します。

COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/jsonData'
FILEFORMAT = JSON;

外部の場所のアクセス許可の継承

外部の場所への権限は、指定した場所のすべての入れ子になったディレクトリに適用されます。

たとえば、URL abfss://container@storageAccount.dfs.core.windows.net/raw-data で定義された外部の場所にアクセスできる場合は、次のコマンドが有効です。

COPY INTO landing_table
FROM 'abfss://container@storageAccount.dfs.core.windows.net/raw-data'
FILEFORMAT = PARQUET;

COPY INTO json_table
FROM 'abfss://container@storageAccount.dfs.core.windows.net/raw-data/json'
FILEFORMAT = JSON;

外部の場所に対するアクセス許可によって、指定された場所の上位または並列のディレクトリに対する権限が付与されることはありません。 たとえば、次のコマンドはどちらも有効ではありません

COPY INTO parent_table
FROM 's3://landing-bucket'
FILEFORMAT = PARQUET;

COPY INTO sibling_table
FROM 's3://landing-bucket/json-data'
FILEFORMAT = JSON;

ターゲット テーブルの 3 レベルの名前空間

3 階層の識別子 (<catalog_name>.<database_name>.<table_name>) を使用して Unity Catalog テーブルを対象にできます。 USE CATALOG <catalog_name> および USE <database_name> コマンドを使用して、現在のクエリまたはノートブックの既定のカタログとデータベースを設定できます。