
#2 Snowflakeの ハンズオントレーニングを受けてみた(Badge 2: Data Application Builders Workshop)
先日、Snowflakeのハンズオンのうち第二弾となる、"Data Application Builders Workshop" を受講してみました。第一弾に引き続き、受講レビューをしたいと思います。

このハンズオンシリーズの体験談は珍しいと思うので、Snowflakeのスキルを次のレベルに持っていきたい方のために、このnoteがお役に立てば嬉しいです!
第一弾、"Badge1: Data Warehousing Workshop"のレビューはこちらからどうぞ 👇Snowflakeって何?Snowflakeのハンズオンって何?といったギモンにも幅広く触れています!
コースの内容
この内容は、Snowflakeをゴリゴリ使った前回の "Badge1: Data Warehousing Workshop" とは異なり、どちらかというと アプリケーションを開発して、バックエンドでSnowflakeと連携させてみましょう といった内容になっており、Snowflakeの登場割合は前回と比べてかなり少ないです。
とはいえ、(簡単な)アプリケーションを作ることができるため、
アプリケーション開発における周辺知識を身に着けることができる
Snowflakeをバックエンドに設定することでどんなメリットがあるか を知ることができる
コースとなっています。
必要なアカウント一覧
⚠️Snowflakeだけに集中できた前回のコースとは違い、アプリケーションの開発のために様々なサービスを利用することになります。そして、このコースを完了させるためにはそれらのサービスのアカウントを作ることが必須となります。
Google FormとGoogle Spreadsheetを利用します。
社用のアカウントはNG, 個人で使っているアカウントの使い回しも推奨されておらず、できればこのコースのためにアカウントを作ることが推奨されています。
理由は、途中でRivery(後述)とGoogle Spreadsheetを連携する際にOAuth経由でいくつかのパーミッションを与えることになるので、他にすでにお使いの重要なSpreadsheetに影響を及ぼさないためです。(まあ"念のために"別のアカウントを作ってください、というところですね)
Github
Githubでコードを書きます。
Streamlit
Snowflakeは、データアプリケーション構築フレームワークであるStreamlitを2022年3月に買収しました。これにより、さらに機械学習やアプリケーション開発におけるSnowflakeの活用が一気に進むことが期待されています。
Githubで書いたコードをStreamlitで挙動確認します。このコース内のユースケースだけであれば、「あれ、これlocalhost でもいけるやつでは…?」と思わなくも無いですが、①既にPythonがインストールされている ②各種ライブラリもすぐに使える ③全てブラウザ上で完結できるため環境開発が不要 な点はとても便利だと思いました。
あと、UIが可愛いです。UI/UXが可愛いのは正義だと思います。
Rivery
Riveryはデータインテグレーションツールです。
Snowflakeには外部ステージと内部ステージがあり、外部ステージはAWS S3, Azure blob, GCP Google Cloud Storage に対応しています。
実際の企業におけるエンタープライズレベルでのユースケースの場合はこれらのクラウドサービスを利用していることが多いと思いますが、中小企業や個人の場合はどうでしょうか。上記以外のサービス、例えばRedshift, BigQueryなどのクラウドデータベースだったり、SpreadsheetやAPIを介したウェブデータ(Instagramなど)と接続したいといったユースケースもあると思います。
そのような、Snowflakeがネイティブコネクションを持っていないサービスとSnowflakeを繋ぐのがRiveryです。気になった方はこちらからRiveryの素晴らしいコネクションリストをご覧ください!
SnowSQL
SnowSQLはPCにインストールするアプリケーションです。PUTコマンドを使ってローカルファイルをSnowflakeの内部ステージに配置することができます。
あると便利な前提知識
このコースも、前回のコースと同様、初心者の方でもゼロから学べる内容となっていて、実際に一つ一つの説明がとてもわかりやすく、細かいです。なので、ぜひぜひ初学者の方も取り組んでいただきたいです!!
とはいえ、アプリケーション開発なのである程度の前提知識があると、より学習がスムーズになります。
Githubのブランチやコミットの仕組みを理解している
Pythonでコードを書いたことがある(pandasなどのライブラリや変数を使ったことがある)
APIを使ったことがある(パラメーター、API Keyの取得など)
CLI (Command Line Interface) に抵抗がない、コマンドが使える
などの経験がある方はよりスムーズに進められると思います。
上記の内容が、何を言ってるか分からない…と思われた方、ご安心ください!!コース内で丁寧に教えてくれますので、受講後には理解できているはずです!!!
コースはMacを使っても進められるのですが(私もMacです)、出てくるコマンドはWindows用となっています。
特にSnowSQLの利用にあたってはコマンドを使わないと進められないので、Macの方はLinuxのコマンドを自力で叩けるレベルじゃないと少し難しいかもしれません😢
とはいえ、困ったことがあればコース受講者同士でフォローし合えるフォーラムもあるので、そこでMac固有の質問をすれば誰かが助けてくれるはずです!
学習時間の目安
家事と仕事の合間を縫って、細切れに取り組みましたが、合計で約8-10時間くらいかかりました。各種アカウントを設定するための時間も含んでいます。(ちなみに私は上記の前提知識があるレベルです)

ハマった点
ほぼ(というか全て)SnowSQLがらみです。やはりインストールして環境開発しないといけないものは、どうしても手間がかかりがちですね…
SnowSQLのパーミションエラー
SnowSQLを実行しようとすると、以下のようなエラーが出ました。
(base) computername ~ % /Applications/SnowSQL.app/Contents/MacOS/snowsql
We were unable to create or write to the ../snowsql_rt.log_bootstrap. Make sure you have permission to write to the log file's parent folder or to modify the location of the log file specified in the SnowSQL log_file configuration option. See docs: https://docs.snowflake.com/en/user-guide/snowsql-config.html#log-file
Observed error: [Errno 13] Permission denied: '/Users/snowsql_rt.log_bootstrap'
ログファイルへの書き込み権限がないことによるパーミッションエラーだそうで、以下のブログを参考にさせて頂き、解決することができました。
viエディタでつまづく
上記のconfigファイルの編集のためにviエディタを使わないといけなかったのですが(Macなので)、いかんせん、私のviエディタ経験は100年前に1回使ったのが最後なので、一箇所文字を編集するだけでもぐぬぬ、、、となりました。最終的にググりながら解決。
PATHが通ってない
上記のパーミッションエラーを解決した後、snowsql -v で疎通確認を兼ねてバージョンチェックをしたところ、command not found エラーが出ました。
エイリアス設定をすることで解消しました。
公式ドキュメントにも書いてありました。
PUTコマンドの書式
MacのSnowSQLでPUTコマンドを使う時には、ファイルパスの冒頭にスラッシュが必要。👇こんな感じです。公式ドキュメントにも書いてありますが、最初読んで無かったので、時間を無駄にしてしまいました。公式ドキュメントは面倒くさがらずにちゃんと目を通しましょう。
username#(no warehouse)@(no database).(no schema)>put file:////Users/yourname/dora1.txt @demo_db.public.my_internal_named_stage;
学んだこと
ほぼ自分の備忘録ですが、ハンズオンを通して学んだことは以下の通りです。
スタブを初めて使えた(手法としては知っていたのですが実機操作をしたことが無かったので勉強になりました)
RiveryはSnowflake側のテーブル定義もRiveryの可愛いUIから簡単に作れてとても便利だった。(特にSpreadsheetから列名を取得してSnowflakeのテーブル定義に適用するオートマッピングが良かった)
SnowSQLはCLI上でもSQLを使ってSnowflake内のデータの操作ができるのが便利(テーブルにロードしていない内部ステージ上にあるデータでもSELECTが可能)
PUTコマンドはSnowSQLを使って内部ステージにアップする以外はあまり役に立たない。(でもSnowPro Coreの試験には出るので実機で触れて良かった)
PUTコマンドを使ってアップロードしたときは元のファイル形式がテキスト形式でも.gzの圧縮型になる。
最後までお読みいただきありがとうございました。
技術への好奇心があれば誰でもエンジニアに向いています!エンジニアにも色々と種類があって、きっとあなたにあうキャリアパスが見つかるはずです。(プログラマになる、セールスエンジニアになる、ITコンサルタントになる etc)
私のnoteを通して、もっとセールスエンジニアの認知度を上げて、多くの人にセールスエンジニアのキャリアを目指していただきたいと思います。
何かご質問があればコメントでお知らせください!
P.S. ハンズオン第三弾の体験談はこちら👇
最後までお読みいただきありがとうございました!
スキ・フォローよろしくお願いします☺