はじめに:COPY INTOってなに?
こんにちは!今回は、Snowflakeでファイルからテーブルにデータを取り込むときの主役、COPY INTO <table> コマンドをやさしく解説します。CSVやJSONをドンとロードしたい初心者の方にぴったりの内容ですよ。
「データウェアハウスにデータを入れる」と聞くと難しそうに感じますが、Snowflakeではたった1行のSQLで大量のファイルを取り込めます。バルクロード(まとめてロード)の流れ全体については Snowflakeデータロードの全体像|バルク・ストリーミング・サードパーティをやさしく解説 を先に読むと、より理解が深まります。

基本の仕組み:ステージ→テーブルの2ステップ
COP INTOは、いきなりPCのファイルをテーブルに入れるのではなく、まずステージと呼ばれる一時置き場にファイルを置き、そこからテーブルへロードするのが基本です。
ステージの種類や役割は Snowflakeステージとは?内部・外部ステージをやさしく解説 で詳しく紹介しています。ざっくり言うと、内部ステージはSnowflake内部のフォルダ、外部ステージはS3などクラウドストレージへのリンクです。
イメージはこんな感じ:
- ローカルファイル → (PUT) → ステージ → (COPY INTO) → テーブル
具体的に書いてみよう:基本のSQL例
たとえば、employees.csv を EMPLOYEES テーブルへロードする場合の流れを見てみましょう。
1. テーブルとステージを準備
-- テーブル作成
CREATE OR REPLACE TABLE employees (
id NUMBER,
name STRING,
dept STRING,
salary NUMBER
);
-- 名前付き内部ステージ作成
CREATE OR REPLACE STAGE my_stage;
2. ファイルをステージに置く(SnowSQLから)
PUT file:///Users/me/employees.csv @my_stage;
SnowSQLの使い方は SnowSQLのインストールと基本的な使い方を初心者向けに解説 をどうぞ。
3. COPY INTOでロード!
COPY INTO employees
FROM @my_stage/employees.csv
FILE_FORMAT = (TYPE = 'CSV' FIELD_OPTIONALLY_ENCLOSED_BY = '"' SKIP_HEADER = 1)
ON_ERROR = 'CONTINUE';
これだけ!たった3ステップでデータが入ります。FILE_FORMAT はファイルの形式(区切り文字や引用符の扱い)を指定するオプション、ON_ERROR はエラー行が出た時の挙動を決めるオプションです。
知っておきたい便利オプション
- PATTERN: 正規表現で複数ファイルを一括指定(例:
PATTERN = '.*sales_2026.*\.csv') - VALIDATION_MODE:
RETURN_ERRORSを指定すると実際にロードせずエラー行だけ確認できる - PURGE = TRUE: ロード成功後にステージのファイルを自動削除
- FORCE = TRUE: 同じファイルでも再ロード(通常は重複ロードを防ぐ仕組みあり)
よくあるユースケースと注意点
COPY INTOは、毎日深夜に届くCSVを翌朝のレポート前にバルク投入するような定期バッチロードで大活躍します。リアルタイム性が必要ならSnowpipeを使う、というすみ分けです。
注意点としては、ロード処理は仮想ウェアハウスのクレジットを消費するので、終わったらサスペンドさせる(自動サスペンド設定)とお財布にやさしいですよ。また、Snowflakeはデフォルトで同名同サイズのファイルは再ロードされないので、再投入したい時は FORCE = TRUE を忘れずに。
まとめ
COPY INTOは「ステージに置いて、テーブルに流し込む」というシンプルな仕組みでありながら、CSV/JSON/Parquetなど多彩な形式に対応する万能ロードコマンドです。まずは小さなCSVで試して、慣れてきたらFILE_FORMATオブジェクトを作り置きするなど、効率化していきましょう!
参考リンク
関連記事
- Snowflakeデータロードの全体像|バルク・ストリーミング・サードパーティをやさしく解説 – COPY INTOを含むロード手段の全体マップ
- Snowflakeステージとは?内部・外部ステージをやさしく解説 – COPY INTOの前段で使うステージの基礎
- SnowSQLのインストールと基本的な使い方を初心者向けに解説 – PUTコマンドでファイルをステージへ送る前提環境
- Snowflakeウェアハウスとは?サイズと使い分けを初心者向けに解説 – ロード時に使うコンピュート資源の選び方
- Snowflakeの自動サスペンドと自動再開で賢く節約!初心者向け解説 – ロード後のクレジット節約に役立つ設定
- Snowflakeのデータベース・スキーマ・テーブル階層を初心者向けに解説 – ロード先テーブルを正しく指定するための階層理解

