SnowSQLを利用した複数CSVファイルのエクスポート方法

分析

分析・集計業務では、報告書やレポートを作成するために、各種集計や検証結果を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を活用いただけると嬉しいです。

コメント

タイトルとURLをコピーしました