Snowflake

Snowflake COPY INTO実務設計ガイド|ロード・アンロード・FILE FORMAT

2026-03-26
更新: 2026-03-27
NicheeLab編集部

COPY INTOはSnowflakeのデータロード/アンロードの中核コマンドです。ステージからテーブルへのバルクロードとテーブルからステージへのデータエクスポートの両方を1つのコマンドで実行でき、FILE FORMAT・ON_ERROR・VALIDATION_MODEなどの豊富なオプションにより柔軟なデータパイプラインを構築できます。

SnowPro Core試験ではDomain 4(Data Loading & Unloading / 配点10〜15%)で出題され、Data Engineer試験ではさらに深いオプション知識が問われます。この記事では、実務設計の観点からCOPY INTOの全体像を整理し、試験頻出ポイントを解説します。

COPY INTO(ロード)構文

ステージからテーブルにデータをロードする基本構文です。

COPY INTO <テーブル名>
  FROM @<ステージ名>/<パス>/
  FILE_FORMAT = (FORMAT_NAME = '<ファイルフォーマット名>'
                 | TYPE = CSV | JSON | PARQUET | AVRO | ORC | XML)
  PATTERN = '.*\.csv\.gz'
  ON_ERROR = ABORT_STATEMENT | CONTINUE | SKIP_FILE | SKIP_FILE_<N>
  PURGE = TRUE | FALSE
  FORCE = TRUE | FALSE;

主要パラメータ

パラメータデフォルト説明
FILE_FORMATCSVファイル形式の指定。名前付きFILE FORMATまたはインライン定義
PATTERN(なし)正規表現でロード対象ファイルをフィルタ
ON_ERRORABORT_STATEMENTエラー発生時の動作。CONTINUE / SKIP_FILE も選択可
PURGEFALSETRUEにするとロード完了後にステージのファイルを自動削除
FORCEFALSETRUEにすると64日以内にロード済みのファイルも再ロード
VALIDATION_MODE(なし)ドライラン。RETURN_ERRORS / RETURN_ALL_ERRORS / RETURN_N_ROWS

COPY INTOのロード重複防止メカニズム

COPY INTOはデフォルトで64日間のロード履歴メタデータを保持し、同じファイルの重複ロードを自動的に防止します。ファイルのパス・サイズ・最終更新日時がメタデータと一致する場合、そのファイルはスキップされます。この動作はFORCE = TRUEで上書きできますが、通常は重複防止を有効にしたまま運用するのがベストプラクティスです。

COPY INTO(アンロード)構文

テーブルからステージにデータをエクスポートする構文です。

COPY INTO @<ステージ名>/<パス>/
  FROM <テーブル名> | (<SELECT文>)
  FILE_FORMAT = (TYPE = CSV | JSON | PARQUET)
  SINGLE = TRUE | FALSE
  MAX_FILE_SIZE = <バイト数>
  HEADER = TRUE | FALSE
  OVERWRITE = TRUE | FALSE;

主要パラメータ

パラメータデフォルト説明
SINGLEFALSETRUEで1ファイルに統合出力。FALSEで並列分割出力
MAX_FILE_SIZE16MB分割出力時の1ファイルの最大サイズ
HEADERFALSETRUEでCSVのヘッダー行を出力
OVERWRITEFALSETRUEでステージの既存ファイルを上書き

アンロード時のFROM句にはSELECT文を直接指定できるため、テーブル全体ではなくフィルタリング・集計・変換を行った結果をエクスポートすることが可能です。

FILE FORMAT の設計

FILE FORMATはデータの形式と解析ルールを定義するオブジェクトです。名前付きFILE FORMATとして事前に作成しておくことで、COPY INTO文のたびにオプションを記述する必要がなくなります。

CREATE FILE FORMAT my_csv_format
  TYPE = CSV
  FIELD_DELIMITER = ','
  RECORD_DELIMITER = '\n'
  SKIP_HEADER = 1
  FIELD_OPTIONALLY_ENCLOSED_BY = '"'
  NULL_IF = ('NULL', 'null', '')
  EMPTY_FIELD_AS_NULL = TRUE
  COMPRESSION = GZIP;

対応フォーマットと用途

フォーマット主な用途ロードアンロード備考
CSV汎用テキストデータSKIP_HEADER・FIELD_DELIMITER等が重要
JSON半構造化データSTRIP_OUTER_ARRAY・STRIP_NULL_VALUESが頻出
Parquet列指向分析データSNAPPY圧縮がデフォルト
Avroスキーマ付きバイナリスキーマ進化をサポート
ORCHadoop連携×ロードのみ対応
XMLレガシーシステム連携×ロードのみ対応

ON_ERROR オプションの使い分け

ON_ERRORはデータロード時のエラーハンドリング戦略を決定する重要なパラメータです。

ON_ERROR値動作推奨シーン
ABORT_STATEMENT(デフォルト)1行でもエラーがあれば全体をロールバック品質が保証されたデータの本番ロード
CONTINUEエラー行をスキップし正常行のみロード品質にばらつきがある外部データ
SKIP_FILEエラーを含むファイルをスキップ多数ファイルの一括ロード
SKIP_FILE_<N>エラーがN行以上のファイルのみスキップ一定の品質基準でフィルタリング
SKIP_FILE_<N>%エラー率がN%以上のファイルのみスキップ割合ベースの品質フィルタリング

ON_ERROR = CONTINUEを使用した場合、スキップされたエラー行の詳細はVALIDATE関数で事後確認できます。SELECT * FROM TABLE(VALIDATE(my_table, JOB_ID => '_last'))で直前のCOPY INTOのエラー行を取得できます。

VALIDATION_MODE(ドライラン)

VALIDATION_MODEを指定するとデータのロードは行われず、ファイルの検証結果のみを返します。本番ロード前の事前チェックに必須の機能です。

モード動作用途
RETURN_<N>_ROWS最初のN行をバリデーションし結果を返すファイルフォーマットの動作確認
RETURN_ERRORSエラー行のみを返す(最大ファイル制限あり)本番ロード前の品質チェック
RETURN_ALL_ERRORS全ファイルの全エラー行を返す包括的な品質レポートの生成
COPY INTO my_table
  FROM @my_stage/data/
  FILE_FORMAT = (FORMAT_NAME = 'my_csv_format')
  VALIDATION_MODE = 'RETURN_ERRORS';

ステージの種類と選択基準

ステージ種類管理者共有用途
ユーザーステージ(@~)Snowflake個人のみ個人の一時ファイル置き場
テーブルステージ(@%table)Snowflakeテーブル単位特定テーブルへのロード専用
名前付き内部ステージSnowflakeロールで制御チーム共有のファイル管理
外部ステージ(S3/Azure/GCS)クラウドプロバイダーIAMで制御既存のクラウドストレージとの連携

実務設計のベストプラクティス

1. 名前付きFILE FORMATを必ず作成する

COPY INTO文にインラインでフォーマットオプションを記述すると、メンテナンスが困難になります。CREATE FILE FORMATで名前付きオブジェクトを作成し、COPY INTO文ではFORMAT_NAME参照を使用してください。フォーマットの変更が発生した場合、FILE FORMATオブジェクト1箇所の修正で全COPY INTO文に反映されます。

2. VALIDATION_MODEで事前検証を行う

特に外部パートナーから受領したCSVファイルなど、品質が保証されていないデータをロードする場合は、VALIDATION_MODE = 'RETURN_ERRORS'で事前検証を実施してください。ファイルフォーマットの不一致・データ型エラー・NULL制約違反を本番ロード前に検出できます。

3. PURGE = TRUEでステージをクリーンに保つ

ロード完了後のファイルをステージに残したままにすると、ストレージコストが累積し、次回のCOPY INTO実行時にファイル一覧の取得が遅くなります。PURGE = TRUEを指定してロード済みファイルを自動削除するか、定期的にREMOVE @stageでクリーンアップしましょう。

4. ファイルサイズを100〜250MBに最適化する

Snowflakeのドキュメントでは、COPY INTOの最適なファイルサイズとして圧縮後100〜250MBを推奨しています。ファイルが小さすぎると(数KB〜数MB)オーバーヘッドが大きくなり、大きすぎると(1GB超)並列処理の効率が低下します。

問題で確認

SnowPro Core - Data Loading

問題 1

COPY INTOコマンドでON_ERROR = 'CONTINUE'を指定した場合の動作として正しいものはどれですか?

  1. 1行でもエラーがあればCOPY INTO全体がロールバックされる
  2. エラーが発生した行をスキップし、正常な行のみテーブルにロードする
  3. エラーが発生したファイル全体をスキップし、他のファイルのみロードする
  4. エラーの内容をログテーブルに記録した後、すべての行(エラー行含む)をロードする

正解: B

ON_ERROR = 'CONTINUE'を指定すると、エラーが発生した行(行レベルのデータ型エラー・NULL制約違反など)をスキップし、正常な行のみをテーブルにロードします(B:正解)。選択肢AはON_ERROR = 'ABORT_STATEMENT'(デフォルト)の動作です。選択肢CはON_ERROR = 'SKIP_FILE'の動作で、ファイル単位でスキップします。選択肢Dのような「エラー行を含めて全行ロード」する動作はどのON_ERRORオプションでも発生しません。CONTINUEでスキップされたエラー行の詳細は、VALIDATE関数(SELECT * FROM TABLE(VALIDATE(table, JOB_ID => '_last')))で事後確認できます。

よくある質問(FAQ)

COPY INTOとSnowpipeはどう使い分けますか?

COPY INTOはバッチ処理でまとまったファイルを一括ロードする場合に使用し、SnowpipeはファイルがStageに到着するたびに自動的にロードする場合に使用します。COPY INTOはVirtual Warehouseのコンピュートを使用し、実行タイミングを明示的に制御できます。一方、Snowpipeはサーバレスコンピュートで動作し、クラウドストレージのイベント通知(S3: SQS / Azure: Event Grid / GCP: Pub/Sub)をトリガーに自動実行されます。日次バッチロードならCOPY INTO、ニアリアルタイムの継続的インジェストならSnowpipeが適しています。コスト面では、ファイルサイズが大きくロード頻度が低い場合はCOPY INTOが、ファイルサイズが小さく頻繁にロードする場合はSnowpipeが有利です。

ON_ERRORオプションはどれを選ぶべきですか?

ON_ERRORオプションの選択は、データ品質要件と業務影響度によって決まります。本番データの初回ロードや品質が検証済みのデータにはABORT_STATEMENT(デフォルト)を推奨します。1行でもエラーがあれば全体をロールバックするため、データの整合性が保証されます。品質にばらつきがあるデータ(外部パートナーのCSVなど)にはCONTINUEを使用し、エラー行をスキップしてロード後にエラー行を別途処理します。SKIPFILEは多数のファイルを一括ロードする場合に有効で、エラーを含むファイルだけをスキップし正常なファイルはロードします。SKIP_FILE_<N>やSKIP_FILE_<N>%はエラー許容閾値を設定できます。

VALIDATION_MODEとは何ですか?

VALIDATION_MODEはCOPY INTOの「ドライラン」機能で、実際にデータをロードせずにファイルの検証だけを行います。RETURN_<N>_ROWS(最初のN行を返す)、RETURN_ERRORS(エラー行のみ返す)、RETURN_ALL_ERRORS(全エラー行を返す)の3つのモードがあります。本番ロード前にVALIDATION_MODE = 'RETURN_ERRORS'で事前検証を実行し、ファイルフォーマットの不一致やデータ型エラーを事前に検出するのがベストプラクティスです。VALIDATION_MODEを指定するとデータのロードは一切行われないため、安全にテストできます。

COPY INTOの問題をもっと解こう

Data Loading & Unloadingドメインの問題でCOPY INTOの理解を深めましょう

無料で問題を解く

Snowflake データロード関連記事

Snowpipe完全解説

自動データロードの仕組みと設定方法

Snowflakeのステージ設計

内部/外部ステージの使い分けと設計指針

半構造化データ処理

VARIANT型・FLATTEN・コロン記法の使い方

Snowflake用語集80選

試験に出る重要用語をカテゴリ別に整理

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.