金融データ活用チャレンジに参加したのをきっかけに、
初めてSnowflakeを触りました。
SQLは触ったことがある。でもSnowflakeは初体験。
結果から言うと、
JSONが全件NULLになって絶望しました。
この記事はその失敗と解決ログです。
そもそもSnowflakeって何?
最初に混乱したのがここ。
Snowflakeはクラウド上のデータベースですが、普通のRDBとちょっと違います。
一番の違いはこれ:
- データを保存する場所(Database)
- SQLを実行するエンジン(Warehouse)
が分かれていること。
私は最初これを理解しておらず、
SQLが動かない…?
となりました。
原因はシンプル。
Warehouseが停止していた。
Snowflakeは使った時間だけ課金されるので、
自動で止まる仕組みになっています。
つまり、
「作業員が寝ているとSQLは動かない」
という世界でした。
2つ目の罠:DBとSchemaで迷子になる
テーブルを作ったはずなのに見えない。
原因は、
USE DATABASE xxx;
USE SCHEMA PUBLIC;
をしていなかっただけ。
Snowflakeは「今どの箱の中にいるか」が超重要。
ここで30分溶かしました。
最大の罠:LLMのJSONが全部NULLになる
今回やりたかったのはこれ。
- SnowflakeのCortexで文章を評価
- JSONで結果を返してもらう
- それをテーブルに保存
うまくいったと思ったら、
eval_null = 10 / 10
全部NULL。
絶望。
原因調査
raw_text(AIの生出力)を確認すると、こうなっていました。
評価結果は以下の通りです。
{
"score": 0.82,
"confidence": 0.91
}
Snowflakeは
JSONだけくれ
と言っているのに、
文章+JSON
が返ってきていた。
だから TRY_PARSE_JSON() が失敗していた。
解決策:タグで囲ませる
プロンプトを修正。
<JSON>
{
...
}
</JSON>
で出力させる。
そしてタグの中身だけ抜き出す。
TRY_PARSE_JSON(
SPLIT_PART(
SPLIT_PART(raw_text, '<JSON>', 2),
'</JSON>',
1
)
)
結果:
eval_null = 0
全部成功。
ここが今回一番の学びでした。
無料枠はどのくらい使った?
- データ取り込み
- LLM評価テスト
- デバッグ
を繰り返しても、無料クレジット内で十分回せました。
ただし、
Warehouseを止め忘れると地味に減る
ので注意。
Snowflake初心者が学んだこと
- Warehouseは「計算エンジン」
- DBとSchemaは常に意識
- LLM出力は信用しない
- JSONはタグで囲ませると安定する
- raw_textを必ず確認する
まとめ
Snowflakeは難しそうに見えますが、
構造を理解すれば普通のSQLの延長線上です。
一番大事なのは、
うまくいかないときは生データを見る
これに尽きます。
もしこれからSnowflake+LLMを触る人がいたら、
同じ罠にハマらないことを祈ります。