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

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

この記事では、 COPY INTO コマンドを使用して、Google Cloud Storage (GCS) バケットから Databricks SQL のテーブルにデータを読み込む方法について説明します。

この記事の手順では、管理者が Unity Catalog ボリュームまたは外部ロケーションを構成して、 GCSでソース ファイルにアクセスできることを前提としています。

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

始める前に

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

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

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

    クラウドオブジェクトストレージのURLの例: gs://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の外部ロケーションを使用してソースデータにアクセスし、GCSからテーブルにデータをロードします。

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

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

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

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

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

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

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

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

COPY INTO sibling_table
FROM 'gs://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;