Snowflake

Cortex Analyst に日本語で聞くと、セマンティックビューの有無で答えが変わる

Ryosuke Ishii

前に、一番飯店の Instagram 月次レポートの集計の決まりを、Snowflake のセマンティックビューに書きました。今回は、そのセマンティックビューに Cortex Analyst(日本語の質問から SQL を作って答える Snowflake の機能)で質問してみます。

まず Snowsight(Snowflake の画面)で実際に質問し、どう答えるかを見ました。そのあと、同じ質問を「セマンティックビューを渡さない AI」にもして、答えを比べています。

定義があると6問とも正解
定義があると6問とも正解

画面でセマンティックビューを開く

Snowsight の左のメニューで「AI と ML」→「Cortex アナリスト」を開き、データベースとスキーマを選ぶと、作ってあるセマンティックビューが一覧に出ます。名前をクリックすると、次の確認が出ました。

ワークスペースで開く前の確認。作った役と開く役が違うと注意が出る
ワークスペースで開く前の確認。作った役と開く役が違うと注意が出る

セマンティックビューは、作った役(ロール)のものです。今回は作業用の役で作り、管理者の役で開いたので、「このセマンティックビューを所有していません」と注意が出ました。写しを開いて見ることはできますが、変更を反映するには持ち主の役が要ります。

「開く」を押すと、ワークスペース(Snowsight の作業場所)に設定の写し(`.sv.yaml`)ができ、中身が画面で見えるようになります。

セマンティックビューの中身。AI への指示や、指標20個が並ぶ
セマンティックビューの中身。AI への指示や、指標20個が並ぶ

「SQL生成」の欄には、AI への指示として書いた決まりが並んでいます。月の区切り、保存率の計算のしかた、目標の本数、2026年8月以降はデータが無いこと、などです。下には、表ごとの切り口・事実・指標(メトリック)が並びます。

プレイグラウンドで質問する

右側の「プレイグラウンド」に、日本語で質問を打ちます。最初に「2026年6月の保存率は?」と聞いたところ、次のように止まりました。

質問の読み方と SQL は出るが、実行で権限エラーになる
質問の読み方と SQL は出るが、実行で権限エラーになる

Cortex Analyst は、質問をこう読んでいます。

2026年6月の保存率を計算する。投稿ごとの保存率の平均ではなく、月全体の保存合計÷リーチ合計×100を使う。

セマンティックビューに書いた決まりどおりの読み方です。SQL もできています。ただ、その SQL を流すところで「セマンティックビューを読む権限が無い」と止まりました。開いている管理者の役に、このセマンティックビューを読む許可が無かったためです。

管理者の役に読む許可を渡しました。権限を渡す作業は、AI ではなく人が画面で流しています。

GRANT SELECT ON SEMANTIC VIEW ORDER_SYSTEM.SEMANTIC_SANDBOX.ICHIBAN_INSTAGRAM_SV TO ROLE ACCOUNTADMIN;

同じ質問をもう一度すると、答えが出ました。

保存率 0.20%。公開しているレポートと同じ値
保存率 0.20%。公開しているレポートと同じ値

0.20% は、公開している月次レポートと同じ値です。SQL は `SEMANTIC_VIEW(… METRICS monthly_save_rate …)` という形で、セマンティックビューの指標を名前で呼んでいます。計算式を組み立て直していないので、決まりから外れようがありません。

判定・データに無いこと・「先月」を聞く

目標に届いたかを聞く

「2026年5月から7月で、投稿数が目標に届かなかった月は?」と聞きました。

目標9本に届かなかった月を、判定の指標で答える
目標9本に届かなかった月を、判定の指標で答える

目標が9本であることを読み取り、判定の指標(`post_count_check`)を使って、6月(1本不足)と7月(6本不足)を返しました。どちらもレポートと同じです。

データに無いことを聞く

「2026年6月の売上はいくら?」と聞きました。このセマンティックビューには、売上のデータはありません。

売上のデータは無いと答え、代わりに聞ける質問を出す
売上のデータは無いと答え、代わりに聞ける質問を出す

SQL を作らず、「売上に関するデータは含まれていません」と答えました。代わりに聞ける質問も3つ出しています。無いものを無理に作って答えなかったのは、安心できる動きです。

「先月」と聞く

「先月の保存率は?」と聞きました。データは2026年8月11日までしか入っていません。

2026年9月と読み、データが無いかもしれないと断ったうえで、空の結果を返す
2026年9月と読み、データが無いかもしれないと断ったうえで、空の結果を返す

今日の日付から「先月」を2026年9月と読み、AI への指示に書いた「2026年8月以降はデータが無い」ことにも触れました。ただ、そのまま9月で問い合わせたので、結果は「行がありません」でした。

聞いた人が「データが無い月を聞いた」と気づけるかは、説明文を読むかどうかにかかっています。月を指定して聞くか、AI への指示に「データの最新月を答えに添える」と書いておくのがよさそうです。

セマンティックビューを渡さない AI と比べる

画面で見た答えが、セマンティックビューのおかげなのかを確かめるため、同じ質問を3通りで聞き比べました。こちらは手元のプログラムから Cortex Analyst の API と、Snowflake の中の AI(claude-sonnet-4-5)を呼んでいます。

  • A:Cortex Analyst + セマンティックビュー(画面と同じ)
  • B:元の表(毎日の記録が積み上がる4つの表)の列名だけを渡した AI
  • C:1行が1投稿に整えた表の列名だけを渡した AI。データの下ごしらえは済んでいて、集計の決まりだけが無い
質問AB(元の表だけ)C(整えた表だけ)
6月の保存率正解数字は合ったが、計算のしかたが違う日付の書き方で SQL が止まる
5月のリール本数と目標正解目標を自分で決めて「未達」日付の書き方で止まる
7月の月間リーチ正解正解の6,000倍以上日付の書き方で止まる
5〜7月の保存数の合計正解正解の40〜70倍SQL を作らない
7月のリール平均視聴秒正解ミリ秒のまま日付の書き方で止まる
投稿数が目標に届かなかった月正解目標を30本と決めて判定本数は出るが判定できない
6月の売上(データに無い)答えない空の結果を返す「含まれていない」と返す
元の表だけの AI がつまずいた3つの決まり
元の表だけの AI がつまずいた3つの決まり

B の誤りは、セマンティックビューに書いた決まりとほぼ1対1で対応していました。毎日の記録を全部足す(リーチが6,000倍以上になった)、ミリ秒を秒に直さない、表に無い目標を自分で決める、といった誤りです。

C は、データを整えた表を渡しても、目標の本数を知らないので判定ができませんでした。データの整理だけでは足りず、指標と判定の決まりを書いておくことが効いています。

一番危ないと感じたのは、B の保存率です。レポートとは違う方法で計算したのに、たまたま同じ数字が出ました。答えだけを見て「合っている」と判断すると、別の月で外れても気づけません。

同じ質問を3回聞く

AI の答えは、聞くたびに変わることがあります。A に12の質問を3回ずつ聞きました。

  • 12問中10問は、3回とも同じ正しい答えだった(データに無い売上を答えなかった問いを含む)
  • 「7月末のフォロワー数」は、3回中1回だけ、7月の日ごとの値を全部並べた
  • 「先月の保存率」は、3回とも9月と読み、空の結果を返した

フォロワー数のように「いつ時点の値か」があいまいな問いは、答えの形が揺れました。月末の値を答える決まりを、AI への指示に足しておくのがよさそうです。

まとめ

  • Snowsight のプレイグラウンドで日本語で聞くと、質問の読み方・SQL・結果が並んで出る。セマンティックビューの決まりどおりに読んでいるかを、画面で確かめられる
  • 開く役に、セマンティックビューを読む許可が要る。作った役と見る役が違うときは、許可を渡すのを忘れない
  • セマンティックビューを渡さない AI は、数え方・単位・目標でつまずいた。データを整えるだけでは足りず、指標と判定の決まりを書いておくことが要る
ABOUT ME
石井 亮介(りょうさん)
石井 亮介(りょうさん)
データパレード 代表取締役
㈱データパレードの代表取締役で、高田馬場の町中華「一番飯店」のChief Data Officerも務めています。BIツールのセールスエンジニア・システムエンジニア・カスタマーサクセス歴15年。大学のデータサイエンス教育で講師も担当してきました。現在は自社業務のほとんどをAIに移管し、AI10部署と50を超える自動処理が24時間動く「AI経営」を実践中。その実践知をこのブログで発信しています。
記事URLをコピーしました