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 特権。

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

    外部ロケーションの作成の詳細については、 「クラウド ストレージを 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;

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

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

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 レベルの名前空間

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