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

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

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

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

始める前の準備

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

  • ボリュームに対する READ VOLUME 特権、または外部の場所に対する READ FILES 特権。 ボリュームの作成の詳細については、「Unity Catalog ボリュームとは」を参照してください。 外部の場所の作成の詳細については、「外部の 場所の概要」を参照してください。

  • クラウド オブジェクト ストレージ 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 カタログ権限の詳細については、 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: スキーム プレフィックスはボリューム パス (dbfs:/Volumes/... など) でもサポートされていますが、Databricks では上記の/Volumes/パス形式を使用することをお勧めします。

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

Note

Databricks では、ボリュームを使用してクラウド ストレージ内のファイルにアクセスすることをお勧めします。 外部の場所はサポートされていますが、推奨される方法ではありません。 「管理テーブルと外部テーブル」を参照してください。

次の例では、Unity カタログの外部の場所を使用して ADLS のデータをテーブルに読み込み、ソース データへのアクセスを提供します。

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 'abfss://container@storageAccount.dfs.core.windows.net'
FILEFORMAT = PARQUET;

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

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

3 レベルの名前空間 (<catalog_name>.<schema_name>.<table_name>) を使用して、Unity カタログ テーブルをターゲットにすることができます。 USE CATALOG <catalog_name>コマンドとUSE SCHEMA <schema_name> コマンドを使用して、現在のクエリまたはノートブックの既定のカタログとスキーマを設定します。

次の例では、3 レベルの名前空間を使用して、ボリュームからテーブルにデータを読み込みます。

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

最初に既定のカタログとスキーマを設定することもできます。

USE CATALOG quickstart_catalog;
USE SCHEMA quickstart_schema;

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