Snowflakeの使い勝手をユーザー視点から考えてみる
はじめに
元々、ビッグデータの管理や集計はGoogle CloudのBigQueryを用いていたのですが、直近この1週間くらい仕事柄Snowflakeを使う機会に恵まれました。
元々、Snowflakeについては話を聞くこともあったのですが、インフラ面の凄さ(多数のクラウドサービスで動くよとか)ばかりで、ユーザー視点の使い勝手については、見たことがなかったので、Snowflake初心者のユーザー目線で、その良さ・微妙さについてまとめていきます。
主に内容としては、BigQueryと比較しています。
なので、「他のRDBでもできないよ」とかはわかりかねます。
あと、ユーザー視点の使い勝手なので、細かい話になることをご了承ください。
Snowflakeの長所
柔軟な処理速度の調整
Snowflakeでは、異なるサイズのウェアハウスを選択することで、必要に応じて処理速度を調整できます。例えば、大規模なデータセットを扱う際には大きなウェアハウスを選び、小規模な分析では小さなウェアハウスを使用することが可能です。これにより、コストとパフォーマンスのバランスを取ることができます。
迅速なSQL補完
SQLのコーディング中に、補完機能が素早く反応し、キーワードやテーブル名、列名の提案を迅速に行います。これは、特に複雑なクエリを書く際に時間の節約になります。
この補完の速さは、BigQueryよりも速く非常に楽に感じました
Python APIのシンプルさ
SnowflakeはPython APIが非常にシンプルで直感的です。Pythonからのデータベースへの接続やクエリの実行が容易であり、データサイエンスのプロジェクトにおいてスムーズに統合できます。
具体的には、1度認証をしてしまえば、Snowflake内でのSQL実行と、Pandas DataFrameへの出力が一回でまとめてできてしまいます。
ctx = snowflake.connector.connect('ここで認証')
cur = ctx.cursor()
cur.execute(query) # ここでSnowflake内でSQLが実施される
df = cur.fetch_pandas_all() # ここでPandas DataFrameに出力
一方でBigQueryの場合は、
単純にSQLを実行する場合
client = bigquery.Client(PROJECT)
dataset = client.dataset(DATASET)
job_config = bigquery.QueryJobConfig()
job_config.destination = dataset.table(destination_table) #出力先テーブル
job = client.query(query, job_config=job_config)
SQLを実行して、Pandas DataFrameに出力する場合
client = bigquery.Client(PROJECT)
df = client.query(query).to_dataframe()
とそれぞれ違った処理を実行することになり、2度手間になることが間々ありました。
Snowflakeの短所
一方で、ちょっと使い勝手が悪いなぁと思うところもありました。
もし、これらの解決手段ご存知の方いたら、ぜひ教えてください。
実行前のエラーの非表示
SQLクエリを実行する前に、潜在的なエラーを検出する機能が不足しています。これにより、問題の発見と解決に余分な時間がかかることがあります。
ただ、エラーメッセージは、日本語で出るので、そこは分かり易いです。
文字列表記の厳格さ
Snowflakeでは、文字列をダブルクオーテーション("A001")で囲むとエラーが発生します。('A001'のみOK)
これはBigQueryで許容される表記方法と異なり、ユーザーが慣れるまで混乱を招く可能性があります。
コメントの厳格さ
BigQueryでは「# コメント」と「-- コメント」の両方が許容されますが、Snowflakeでは「# コメント」を使用するとエラーが生じます。この違いは、特に両方のプラットフォームを使用するユーザーにとっては注意が必要です。
Select文の厳格さ
BigQueryでは
select a, b, c,
from table
のように最後の項目に「,」をつけてもつけなくても問題ないのですが、
Snowflakeでは
select a, b, c
from table
としないとエラーになりました。
まとめ
考えながら書いていたら、思いのほか、Snowflakeの短所が細かいことだらけになりました。
ただ、その細かいことが結構鬱陶しかったりするんですよね。
特に、ダブルクォーテーションや#によるコメントアウトなどは、それをBigQueryでメインに使っている私からすると、何度同じエラーになったことか。(逆に、BigQueryが自由すぎるのかもしれませんが)
一方で、長所で挙げたようなメリットも多く、細かい点に気を付けて触れば、BigQueryを使っていた人間からすると、Snowflakeもほぼ違和感なく使えています。
Python環境があったり、ダッシュボードやStreamlitを作れたりと、SQLの派生領域で使える機能も充実しているので、ぜひ今後はそれらも使っていきたいところです。
Discussion