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

COPY INTOを使用してデータをロードする開始

COPY INTO SQL コマンドを使用すると、ファイルの場所から Delta テーブルにデータを読み込むことができます。これは再試行可能でべき等な操作です。ソースの場所にあるファイルのうち、すでにロードされているものはスキップされます。

COPY INTO には、次の機能があります。

  • クラウドストレージから簡単に設定できるファイルまたはディレクトリフィルター(S3、ADLS、ABFS、GCS、Unity Catalogボリュームなど)。
  • 複数のソースファイル形式のサポート:CSV、JSON、XML、 AvroORCParquet、テキスト、バイナリファイル
  • デフォルトでの Exactly-once (べき等) ファイル処理
  • ターゲット・テーブル・スキーマの推論、マッピング、マージ、および進化
注記

よりスケーラブルで堅牢なファイルインジェストエクスペリエンスを実現するために、Databricks では SQL ユーザーがストリーミングテーブルを活用することを推奨しています。 「Databricks SQL のストリーミング テーブルを使用してデータを読み込む」を参照してください。

警告

COPY INTO 削除ベクトルのワークスペース設定を尊重します。 有効にすると、14.0 以降を実行している SQLウェアハウスまたはコンピュートでCOPY INTO実行するときに、ターゲット テーブルで削除ベクトル Databricks Runtime 有効になります。 有効にすると、削除ベクトルは Databricks Runtime 11.3 LTS 以前のテーブルに対するクエリをブロックします。 「削除ベクトルとは」および「削除ベクトルの自動有効化」を参照してください。

必要条件

アカウント管理者は、ユーザーが COPY INTOを使用してデータを読み込む前に、 取り込み用のデータアクセスの設定 の手順に従って、クラウドオブジェクトストレージ内のデータへのアクセスを設定する必要があります。

例: スキーマレス Delta Lake テーブルにデータを読み込む

注記

この機能は、Databricks Runtime 11.3 LTS 以降で使用できます。

空のプレースホルダー Delta テーブルを作成して、後で COPY INTO コマンド中にスキーマが推論されるようにするには、COPY_OPTIONSmergeSchematrue に設定します。

SQL
CREATE TABLE IF NOT EXISTS my_table
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('mergeSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

上記の SQL ステートメントはべき等であり、データを Delta テーブルに 1 回だけ取り込むように実行するようにスケジュールできます。

注記

空の Delta テーブルは、 COPY INTO以外では使用できません。 INSERT INTOMERGE INTO は、スキーマレス Delta テーブルにデータを書き込むことはサポートされていません。 COPY INTOを使用してデータをテーブルに挿入すると、テーブルはクエリ可能になります。

COPY INTOのターゲットテーブルの作成を参照してください。

例: スキーマを設定し、データを Delta Lake テーブルに読み込む

次の例は、Delta テーブルを作成し、 COPY INTO SQL コマンドを使用して Databricks データセット からテーブルにサンプル データを読み込む方法を示しています。 サンプルの JAVASCRIPT Python、R、Scala 、またはSQL コードは、 Databricksクラスター にアタッチされた ノートブック から実行できます。また、SQL の Databricks SQLSQLウェアハウス に関連付けられたクエリ から コードを実行することもできます。

SQL
DROP TABLE IF EXISTS default.loan_risks_upload;

CREATE TABLE default.loan_risks_upload (
loan_id BIGINT,
funded_amnt INT,
paid_amnt DOUBLE,
addr_state STRING
);

COPY INTO default.loan_risks_upload
FROM '/databricks-datasets/learning-spark-v2/loans/loan-risks.snappy.parquet'
FILEFORMAT = PARQUET;

SELECT * FROM default.loan_risks_upload;

-- Result:
-- +---------+-------------+-----------+------------+
-- | loan_id | funded_amnt | paid_amnt | addr_state |
-- +=========+=============+===========+============+
-- | 0 | 1000 | 182.22 | CA |
-- +---------+-------------+-----------+------------+
-- | 1 | 1000 | 361.19 | WA |
-- +---------+-------------+-----------+------------+
-- | 2 | 1000 | 176.26 | TX |
-- +---------+-------------+-----------+------------+
-- ...

クリーンアップするには、次のコードを実行してテーブルを削除します。

Python
spark.sql("DROP TABLE " + table_name)

メタデータファイルをクリーンアップします

vacuumを実行して、Databricks Runtime 15.2 以降の COPY INTO によって作成された参照されていないメタデータ ファイルをクリーンアップできます。

参考

追加のリソース