Use COPY INTO to load data with Unity Catalog | Databricks on AWS [2022/8/17時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
COPY INTOでサポートされているソースやファイルフォーマットからUnity Catalogのマネージドテーブル、外部テーブルにデータを取り込む際にCOPY INTOを使用することができます。Unity Catalogでは、生データに対するセキュアなアクセスを設定するための新たなオプションを追加しており、クラウドオブジェクトストレージにあるデータにアクセスするためにUnity Catalogの外部ロケーションやストレージ資格情報を使うことができます。
Unity CatalogテーブルへのCOPY INTO
3レベルの識別子(<catalog_name>.<database_name>.<table_name>
)を用いてUnity Catalogのテーブルを指定することができます。現在のクエリーやノートブックにおけるデフォルトのカタログやデータベースを設定するために、USE CATALOG <catalog_name>
やUSE <database_name>
を使うことができます。
既存のテーブルにCOPY INTOを行いたい場合には、テーブルを格納するカタログとデータベースに対するUSAGE
権限と、当該テーブルに対するMODIFY
権限が必要になります。
一時資格情報が設定されたクラウドオブジェクトストレージロケーションを含む、あなたがアクセスできるソースロケーションからCOPY INTOを実行することができます。
外部ロケーションからのデータのロード
Unity Catalogの外部ロケーションからデータをロードするには、当該ロケーションに対するREAD FILES
権限が付与されている必要があります。外部ロケーションの権限は指定されたロケーション配下にあるすべてのネストされたディレクトリに適用されます。
例えば、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;
データにアクセスするためのストレージ資格情報の指定
データ取り込みに使用されるディレクトリに対しては、外部ロケーションを用いて明示的に権限を設定することをお勧めします。また、COPY INTOは、データにアクセスするためにUnity Catalogのストレージ資格情報をサポートしています。READ FILES
権限は、ストレージ資格情報でアクセスすることができるすべてのクラウドオブジェクトストレージロケーションからのCOPY INTOを用いたデータの取り込みを行うためのアクセス権を付与します。ストレージ資格情報は外部ロケーションよりも広範な権限を持つ場合があるので、ストレージ資格情報へのアクセスを許可する際には注意して使用してください。
以下のサンプルでは、ソースデータへのアクセスを提供するためにUnity Catalogのストレージ資格情報を用いて、S3やADLS Gen2からデータをロードします。
COPY INTO my_json_data
FROM 's3://landing-bucket/json-data' WITH (
CREDENTIAL `bucket-creds`
)
FILEFORMAT = JSON;
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/jsonData' WITH (
CREDENTIAL `adls-creds`
)
FILEFORMAT = JSON;