見出し画像

Snowflakeさわってみた。データ入れてみた。

分析屋の下滝です。

Snowflakeが気になりだしてきたので、適当にさわっていきます。

まずは、単純にデータを入れるところまでです。

30日間の無料トライアルができるので、登録してください。

登録後、ログインすると、次のような画面になります。

データを入れるために、まずは、入れるためのテーブルを作成します。「データ」のメニューをクリックします。

データベースの一覧が表示される画面になります。右上のデータベースボタンを押します。

名前を入力してデータベースを作成します。日本語の名前を入れる場合は、ダブルクオーテーションでくくります。

作ったらこのような画面になると思います。

PUBLICのスキーマを選びます。

右上の作成ボタンからテーブルを選びます。

テーブル作成画面になります。おそらく、ポチポチ画面を押してテーブルを作成できるようなUIはなさそうです。

適当にテーブルを作ります。クエリを実行してテーブルを作ります。

create or replace TABLE PRODUCT (
    ID INT,
    NAME VARCHAR(30),
    PRICE INT
);

Snowflakeの仕様で int は number(38, 0)となるようです。

データをポチポチ入れようかと思って、データプレビューなどのタブやメニューを見てみても、どうやらWeb画面上からは入れられないようです。

snowflakeへのデータロードはここに書いているようです。

あまり、深く見ないで、今回は、COPY コマンドでやってみたいと思います。

このオプションを使用すると、クラウドストレージで既に使用可能なファイルからデータのバッチをロードしたり、ローカルマシンから内部(つまり、Snowflake)クラウドストレージの場所にデータファイルをコピー(つまり、 ステージング)したりすることが、データをテーブルにロードする前に COPY コマンドを使用してできるようになります。

https://docs.snowflake.com/ja/user-guide/data-load-overview.html#bulk-loading-using-the-copy-command

ローカルファイルシステムからの一括ロード、にチャレンジしてみます。

ステップとしては、次のようになるそうです。
ステップ1 PUT コマンドを使用して、1つ以上のデータファイルをSnowflakeステージ(名前付き内部ステージまたはテーブル/ユーザーステージ)にアップロード(ステージング)します。

ステップ2 COPY INTO <テーブル> コマンドを使用して、ステージングされたファイルの内容をSnowflakeデータベーステーブルにロードします。

https://docs.snowflake.com/ja/user-guide/data-load-local-file-system.html

ステップ1ですが、PUTコマンドを使うというのと、Snowflakeステージ、というものが関わります。

PUTコマンドは、クライアントマシン上のローカルディレクトリ/フォルダーからSnowflakeステージデータファイルをアップロード(ステージング)するためのものです。

Snowflakeでは、次の型の内部ステージがあるようです(上記の図でも表示されています)。
・ユーザー
・テーブル
・名前付き

今回は名前付きステージを試してみます。各ステージの詳しい説明は公式ドキュメントを参照してください。

スキーマを選び、右上の作成ボタンからステージを作成します。

とりあえず、デフォルトで作成します。

MY_INT_STAGEというステージが作成されました。

PUTコマンドでMY_INT_STAGEステージにファイルを入れていきます。

おそらく、ローカルファイルを指定するので、Web画面上からは、PUTコマンドは使えません。

今回は、SnowSQLを使ってコマンドラインでPUTコマンドを実行します。

SnowSQL は、Snowflakeに接続して SQL クエリを実行し、データベーステーブルに対するデータのロードとアンロードを含むすべての DDL および DML 操作を実行するためのコマンドラインクライアントです。

https://docs.snowflake.com/ja/user-guide/snowsql.html

環境に合わせて、適当にインストールしてください。

ここではwindowsにインストールしました。snowsqlの実行ファイルが使えるようになります。

>snowsql -v
Version: 1.2.24

まずは、snowflakeに接続する必要があります。接続方法は色々ありそうですがここでは、アカウント識別子、ユーザー名、パスワードで接続してみます。

>snowsql -a kw71477.ap-northeast-1.aws -u shimotaki
Password:

SnowSQL * v1.2.24
Type SQL statements or !help
shimotaki#(no warehouse)@(no database).(no schema)>

-a がアカウント、-u がユーザー名を示します。アカウント識別子が何かがわからず、少しはまりました。ウェブ画面の左下のやつから、アカウントURLをコピーします(他に方法があるかもしれません)。

私の場合は、URLは以下でした。

https://kw71477.ap-northeast-1.aws.snowflakecomputing.com

kw71477.ap-northeast-1.aws までがアカウント識別子になるようです。レガシー形式の表記方法のようです。(トライアルなのでレガシーになったのかもしれません)。

PUTする先のデータベースを選択します。use DATABASEコマンドを使います。

shimotaki#(no warehouse)@(no database).(no schema)>use DATABASE "テスト";
shimotaki#(no warehouse)@テスト.PUBLIC>

PUTするファイルを作成します。test.csv というファイル名でカレントディレクトリに作成しました。中身は一行です。ID、製品名、価格を表します。
1,aaaa,1000

MY_INT_STAGEステージにPUTします。

shimotaki#(no warehouse)@テスト.PUBLIC>put file://test.csv @MY_INT_STAGE;

アップロードされました。

LISTコマンドでステージ内のファイル一覧を確認できます。

shimotaki#(no warehouse)@テスト.PUBLIC>list @MY_INT_STAGE;

続いて、copy into でテーブルにデータを入れていきます。その前に、snowfalkeではデータをロードするには、ウェアハウスが必要になります。計算リソースが必要になる操作を実行するのに必要となります。

ウェアハウスをWeb画面から作成する場合には、管理者メニューのウェアハウスを選んでください。

右上のボタンを押して作成します。日本語の名前を入れる場合は、ダブルクオーテーションでくくります。

use WAREHOUSE コマンドで作成したウェアハウスを選びます。

use WAREHOUSE "テストウェアハウス";

copy into コマンドを実行します。

shimotaki#テストウェアハウス@テスト.PUBLIC>copy into product from @my_int_stage;

データがロードされているかselectで確認します。

shimotaki#テストウェアハウス@テスト.PUBLIC>select * from product;


Web画面からでも確認ができます。データプレビュータブで見れます。

クエリは、Web画面のワークシートでも実行できます。

ワークシートメニューから新しく作成する場合は、右上のボタンをクリックします。

データベースを選択し、クエリを入力します。

右上の実行ボタンで実行できます。


株式会社分析屋について

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。