COPY INTO を使用して、 Unity Catalog ボリュームまたは外部ロケーションでデータをロードする

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

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

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

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

始める前に

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

  • ボリュームに対する READ VOLUME 権限、または外部ロケーションに対する READ FILES 権限。

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

    外部ロケーションの作成の詳細については、「クラウド ストレージを Databricksに接続するための外部ロケーションを作成する」を参照してください。

  • ソースデータへのパス (クラウドオブジェクトストレージの 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/のボリュームにアクセスできる場合、次のコマンドは有効です。

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;

外部ロケーションを使用したデータのロード

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

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

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

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

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

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;

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

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>.<database_name>.<table_name>) を使用してターゲットに設定できます。 USE CATALOG <catalog_name> コマンドと USE <database_name> コマンドを使用して、現在のクエリまたはノートブックのデフォルト カタログとデータベースを設定できます。