メインコンテンツまでスキップ

Unity Catalogボリュームまたは外部ロケーションとCOPY INTOを使用したデータの読み込み

この記事では、 COPY INTO コマンドを使用して、AWS アカウントの Amazon S3 (S3) バケットから Databricks SQL のテーブルにデータをロードする方法について説明します。

この記事の手順では、管理者が Unity Catalog ボリュームまたは外部ロケーションを構成して、 S3でソース ファイルにアクセスできることを前提としています。 管理者が インスタンスプロファイルを使用するようにコンピュート リソースを構成した場合は、「AWSCOPY INTOインスタンスプロファイルを使用して データをロード する」または「チュートリアル:COPY INTO を使用してSpark SQL する」を参照してください。管理者から一時的な認証情報 (AWS アクセスキー ID、シークレットキー、セッショントークン) が提供された場合は、代わりに 一時的な認証情報を使用して COPY INTO を使用してデータをロード するを参照してください。

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

要件​

COPY INTO を使用して Unity Catalog ボリュームまたはUnity Catalog外部ロケーションとして定義されているクラウドオブジェクトストレージパスからデータをロードする前に、次のものが必要です。

  • ボリュームに対するREAD VOLUME権限、または外部ロケーションに対するREAD FILES権限。ボリュームの作成に関する詳細については、 Unity Catalogボリュームとは?」を参照してください。 外部ロケーションの作成の詳細については、 「外部ロケーションの概要」を参照してください。

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

    クラウドオブジェクトストレージのURLの例: s3://landing-bucket/raw-data/json。

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

  • ターゲットテーブルを格納するスキーマに対する USE SCHEMA 特権。

  • 親カタログの USE CATALOG 特典。

Unity Catalog権限に関する詳細については、 Unity Catalog権限リファレンスを参照してください。

ボリュームからのデータの読み込み​

Unity Catalog ボリュームからデータを読み込むには、 READ VOLUME 権限が必要です。 ボリューム権限は、指定したボリュームの下にあるネストされたすべてのディレクトリに適用されます。

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

SQL
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/パス形式の使用を推奨しています。

外部ロケーションを使用したデータの読み込み​

注記

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

次の例では、Unity Catalogの外部ロケーションを使用してソースデータにアクセスし、S3からテーブルにデータをロードします。

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

外部ロケーション特権の継承​

外部ロケーション権限は、指定したロケーションの下にあるネストされたすべてのディレクトリに適用されます。

たとえば、URL s3://landing-bucket/raw-dataで定義された外部ロケーションにアクセスできる場合は、次のコマンドが有効です。

SQL
COPY INTO landing_table
FROM 's3://landing-bucket/raw-data'
FILEFORMAT = PARQUET;

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

この外部ロケーションに対するアクセス許可は、指定されたロケーションの上位または並列のディレクトリに対するいかなる権限も付与しません。例えば、以下のコマンドはどちらも無効です。

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

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

ターゲット・テーブルの 3 レベル・ネームスペース​

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

次の例では、3階層の名前空間を使用してボリュームからテーブルにデータをロードします。

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

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

SQL
USE CATALOG quickstart_catalog;
USE SCHEMA quickstart_schema;

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