Databricks の Auto Loader と COPY INTO はどちらも外部ストレージから Delta Lake やテーブルにデータを取り込むための機能ですが、
アーキテクチャや用途が大きく違います。
1. Auto Loader
-
概要
- ストリーミングベースの継続的取り込み
- 新規ファイルのみを自動検出して取り込む(状態を保存)
- スキーマ進化(
addNewColumns
,rescue
など)に対応
-
特徴
-
Incremental ingest(増分取り込み)
-
検出モード:
- File Notification モード(高速&コスト効率)
- Directory Listing モード(簡単設定)
-
取り込みの状態管理は自動(checkpoint使用)
-
-
用途
- 継続的データ収集(IoTログ、イベントストリーム、毎日追加されるCSVなど)
- データ到着タイミングがバラバラな場合
-
例
(spark.readStream .format("cloudFiles") .option("cloudFiles.format", "json") .load("/mnt/raw/data"))
2. COPY INTO
-
概要
- バッチベースの一括ロード
- 指定パスからテーブルにファイルをロード(既存ファイルはスキップ可能)
- SQL コマンド形式
-
特徴
- 単発または定期スケジュールで利用
- 自動スキーマ進化なし(事前定義が必要)
- 同じファイルの再ロード防止機能あり(メタデータ管理)
-
用途
- 定期的にまとめて取り込み(1日1回のデータ配信など)
- 大量の履歴ファイルを初回ロード
-
例
COPY INTO my_table FROM 's3://my-bucket/data/' FILEFORMAT = PARQUET PATTERN = '*.parquet';
使い分けの目安
条件 | Auto Loader | COPY INTO |
---|---|---|
データ到着が継続的 | ✅ | ❌ |
定期的なバッチ処理 | △ | ✅ |
スキーマ進化対応が必要 | ✅ | ❌ |
初回の大量データロード | ❌ | ✅ |
状態管理を自動化したい | ✅ | ❌ |
単発・手動実行 | ❌ | ✅ |
まとめ
- Auto Loader → 継続的な増分取り込み & スキーマ進化に強い。ストリーミングジョブ向き。
- COPY INTO → 単発またはスケジュール実行の一括取り込み。初期データロードや低頻度バッチ向き。