分析・集計業務では、報告書やレポートを作成するために、各種集計や検証結果をCSVファイルとしてエクスポートできると便利です。
SnowflakeでCSVファイルをエクスポートする方法としては、WebUIを使う方法と、SnowSQLを使う方法の2つが存在します。
手軽なのはWebUIを使う方法ですが、ファイルを1つづ手動でダウンロードする必要やファイル名の指定ができないため、ファイル数が多かったり、何度もエクスポートを実行するケースには適していません。
一方、SnowSQLを使う方法は、慣れるまで時間がかかりますが、出力ファイル名やフォルダを指定できるし、ファイルを一度に複数ダウンロードできたりと便利です。
この記事では、SnowflakeのWebUIとSnowSQLを使って、CSVファイルを出力する方法を説明します。
WebUIを利用したCSVファイルの出力方法
まず、WebUIを利用したCSVファイルの出力方法を説明します。
WebUIを利用したCSVファイルの出力は、SQLの実行結果が表示された画面より「ダウンロードボタン」を押下することで実現できます。

ダウンロードボタンを押下することで、「.csvとしてダウンロード」、「Excelの.csvとしてダウンロード」、「.tsvとしてダウンロード」の3択が表示されますので、「.csvファイルとしてダウンロード」を押下します。
押下後、ダウンロードが自動的に始まります。ファイル名は指摘できず、ダウンロード場所もブラウザの標準フォルダとなります。
WebUIによるCSVダウンロードはファイル数が少なければ良いですが、出力ファイル数が多いケースでは、手作業でダウンロードボタンを何度も押下する必要があったり、保存するファイル名も指定できないため、使い勝手が悪いです。
SnowSQLを利用したCSVファイルの出力方法
一度に複数のCSVファイルを出力場所やファイル名を指定してエクスポートするには、SnowSQLを使う必要があります。
SnowSQLは、Windowsのコマンドプロンプトから起動し、Snowflakeを操作するツールです。CLIクライアント(コマンド・ライン・インターフェース)とも呼ばれています。
SnowSQLを利用したCSVファイルの出力には3つの手順が必要です。
- ①内部ステージにCSVファイルを出力
- ②PC上でSnowSQLの起動
- ③SnowSQLを利用してCSVを取得

①の「内部ステージにCSVファイルを出力」は、Snowflake上で実施、②の「PCからSnowSQLを利用してCSVを取得」は、クライアントPCからSnowSQLを使って実施します。
内部ステージとは、Snowflakeの内部にあるファイルを入出力するエリアのことです。
対となる言葉として、外部ステージがあります。こちらは、S3、GoogleCloudStarge等の外部クラウドサービスのことを指し、クラウドサービス経緯でファイルの入出力を行うエリアですが、今回は利用しません。
以下、各処理の詳細を説明します。
①内部ステージにCSVファイルを出力
Snowflakeより内部ステージへCSVファイルを出力するには、COPY INTO 句を使います。構文は以下となります。
COPY INTO @~/【出力ファイル名】 from (【テーブル】) 【パラメーター】;
【ファイル出力先】は、英語で指定するのが無難です。※Snowflakeの扱う文字コードがUTF-8なので、Windowsと文字コードが一致せず、日本語を使うと予期せぬ動きとなる可能性があります。
【テーブル】は、出力したいテーブルの名称またはSelect文を指定します。テーブルを指定した場合、行の出力順はコントロールできませんが、Select文でOrderBy句を使うことで、データの出力順を制御可能です。
【パラメータ】は、ヘッダーの有無やファイルタイプ、圧縮指定、上書き指定等のパラメータを設定します。とりあえず意味は分からなくてもよく、後述するサンプルコードのコピペで問題ありません。
以下 テーブル”TEST”からCSVファイル「OUTPUT.csv」を出力するコマンドのサンプルコードになります。
COPY INTO @~/OUTPUT.csv from (select * from "TEST" )
HEADER=true FILE_FORMAT=(type = 'CSV' FIELD_DELIMITER = ','
COMPRESSION=NONE FIELD_OPTIONALLY_ENCLOSED_BY='"' NULL_IF='') OVERWRITE = TRUE SINGLE = TRUE;
上記を実行する、CSVファイルが内部ステージに格納されます。
②PC上でSnowSQLの起動
クライアントPCのコマンドプロンプトを立ち上げて、SnowSQLを起動します。
$ snowsql -a <アカウント名> -u <ユーザ名> -w <仮想ウェアハウス名>
XXXXXXXXXXXX@(no database).(no schema)>
上記のようにコマンド入力できる状態になるとログイン成功です。
③PCからSnowSQLを利用してCSVを取得
今回は内部ストレージからCSVファイルのダウンロードをするため、get コマンドを使用します。get コマンドの構文は以下の通り。
get 【内部ストレージ】 【保存先】 PATTERN=’【ファイル名】’;
パラメーター | 説明等 |
【内部ストレージ】 | ファイルを取得する場所を指定します。今回のケースでは「@~」を指定します。 |
【保存先】 | クライアントPCの特定のフォルダを指定します。Cドライブ直下のXXXXというフォルダを指定したい場合は次のように記述します。「file://c:/XXXX」 |
【ファイル名】 | ファイル名を指定します。 複数のファイルをダウンロードしたい場合は、正規表現の「.*」(ドットアアスタリスク)を使うこともできます。 例えば PATTERN=’OUT.*’ とした場合は、ファイル名がOUTで始まるファイルをすべてダウンロードします。 |
Cドライブのフォルダ「test」にOUTPUT.CSVをダウンロードするケースのサンプルコードは以下になります。
get @~ file://c:/test PATTERN='OUTPUT.CSV';
GETコマンド実行後、CSVファイルが対象フォルダにダウンロードできていることを確認ください。
SnowSQLを使う際の注意点
SnowSQLを使った方法にはいくつか注意点があります。
注意点1 COPY INTO句はストアドプロシージャーで実行不能
まず、COPY INTO 句は ストアドプロシージャーの内部では実行できません。データ加工からCSV出力までを関数でまとめて記載できないのは残念ですが、仕様なのであきらめましょう。
注意点2 出力ファイルの文字コードはUTF-8
SnowSqlで出力したファイルのエンコードはUTF-8なります。日本語のデータがあるとExcel等で読みこんだ時に文字化けします。
文字化けを回避したい場合は、エディタで文字コードの変換やExcelで読み込む際にエンコード指定を行う必要があります。
注意点3 アプリのインストールが必要
SnowSQLを使う場合、アプリケーションのインストールが必要です。会社支給のPCで権限が不足しており、アプリケーションのインストールができない場合は、SnowSQLを使うことができませんのでご注意ください。
まとめ
SnowflakeからSnowSqlを使用して複数のCSVファイルをエクスポートする方法を説明しました。
内部ステージという概念の理解やSnowSQLの使用方法の理解が大変ですが、定期的に分析・集計結果を出力する業務において、SnowSQLによるCSVファイル出力はとても役立ちます。
正規表現でファイル名を指定できることも便利です。
私自身、この方法を使って週に1回100ファイルぐらい出力しています。
この記事を参考にして、SnowSQLを活用いただけると嬉しいです。
コメント