Cortex AI SQLとは
SnowflakeのCortex AISQL関数を使えば、SQLクエリの中に直接AIを組み込めます。データを外部に書き出してモデルにかける必要はなく、select文に列を1つ足すだけで、データがある場所そのままでAIを呼び出せます。AI_COMPLETE、AI_EXTRACT、AI_CLASSIFY、AI_SUMMARIZEなどの関数を使えば、テキスト・画像・音声を構造化データと並べて分析でき、OpenAI、Anthropic、Meta、Mistralなどのモデルがすべて利用できます。
ただ、Snowflakeユーザーが見落としがちなのが、トークン課金は従来のウェアハウス課金とは根本的に仕組みが違うという点です。油断するとコストはあっという間に跳ね上がります。
「ちょっとClaude Opusで試してみよう」と始めたチームが、たった半日でかなりのクレジットを溶かしてしまう――そんな現場を何度も見てきました。出力トークンも課金対象だと気づかず、安価なモデルで十分な処理に高価なモデルを選び、しかも気づくための監視も用意していない。よくあるパターンです。
本記事では、Cortex AISQLの料金の仕組みと、Snowflakeのaccount_usageビューを使った具体的なコスト監視の方法を解説します。
Cortex AI SQLの仕組み
Cortex AISQL関数の使い方はいたってシンプルで、他の関数と同じようにSQL文の中で直接呼び出すだけです。以下は、カスタマーフィードバックをポジティブ・ネガティブ・ニュートラルに分類する簡単な例です。
SELECT
customer_id,
feedback_text,
SNOWFLAKE.CORTEX.AI_CLASSIFY(
feedback_text,
['positive', 'negative', 'neutral']
) as sentiment
FROM customer_feedback
LIMIT 10;
唯一の前提条件は、使用するロールにSNOWFLAKE.CORTEX_USERデータベースロールが付与されていることです。デフォルトでPUBLICロールに付与されているので、ほとんどのユーザーはすでにアクセス権を持っています。
必要なのはそれだけ。外部APIキーもデータ移動もインフラ構築も不要で、AIモデルはSnowflake環境内でそのまま実行されます。
まずはSnowflake Credit Consumption Tableを確認
Cortex AISQLのコストを掘り下げる前に1点お伝えしておくと、Snowflakeの料金詳細はすべてCredit Consumption Tableにまとまっており、常に最新の情報に更新されています。下のスクリーンショットを見ると、AIモデルによって料金が大きく異なることがわかります。Claude-4-opusは100万トークンあたり12クレジットですが、小型モデルには100万トークンあたり1クレジット未満のものもあります。
Cortex AI SQLの料金体系
Cortex関数は処理したトークン数に応じて課金されます(生成系関数は入力+出力トークン、埋め込み関数は入力のみが対象)。
生成系関数であるAI_COMPLETE、AI_CLASSIFY、AI_SUMMARIZEなどは、入力トークン(モデルに送るテキスト)と出力トークン(モデルが生成する応答)の両方が課金対象です。100トークンを送信して200トークンが返ってくれば、合計300トークン分の料金がかかります。
主な埋め込み関数はAI_EMBEDで、テキストや画像などのデータをベクトル化します。出力が数値(生成テキストではない)なので、こちらは入力トークンのみが課金対象です。
トークンの基本
- 1トークン ≈ テキスト4文字
- コストのかかる処理を走らせる前に、
COUNT_TOKENS関数で見積もる AI_COMPLETE、AI_CLASSIFY、AI_SUMMARIZEなどは入力・出力の両方が課金対象AI_EMBEDや抽出系関数は入力トークンのみが課金対象
料金の例
コスト規模をイメージしやすいように例をいくつか挙げますが、Snowflakeの料金は随時変更されるため、必ずCredit Consumption Tableで最新情報を確認してください。以下の例ではわかりやすさのため1クレジット=3ドルで計算しています。
小型モデル:
openai-gpt-5-mini:0.32クレジット = 100万トークンあたり0.96ドルmistral-7b:0.12クレジット = 100万トークンあたり0.36ドル- 例:
openai-gpt-5-miniで2万件の製品レビューを分析- 1件あたり平均100トークン:合計200万トークン = 約1.92ドル
中型モデル:
llama3.1-70b:1.21クレジット = 100万トークンあたり3.63ドルopenai-gpt-4.1:1.40クレジット = 4.20ドル- 例:同じ2万件のレビューを
llama3.1-70bで処理 = 約7.26ドル
大型モデル(100万トークンあたり3クレジット以上):
llama-3.1-405b:3クレジット = 100万トークンあたり9ドルclaude-4-opus:12クレジット = 100万トークンあたり36ドル- 例:同じ2万件のレビューを
claude-4-opusで処理 = 約72ドル
Snowflake Cortex AI SQLでコストが膨らむ要因
クレジットが想定以上に消費されてしまう原因はいくつかあります。注意したいポイントを紹介します。
まず、出力が長いとコストは一気に跳ね上がります。生成系関数は入力と出力の両方が課金対象なので、500語の冗長な要約は100語の簡潔な要約に比べて5倍のコストになります。ここはプロンプト設計でコントロールできる部分です。
モデル選びの影響も、多くの人が思っている以上に大きいです。Claude Opusのようなプレミアムモデルは、GPT 5 miniのような基本モデルと比べて37倍のコスト。分類やセンチメント分析のような用途であれば、安価なモデルで十分なケースがほとんどです。
Cortex AI SQLのコストと利用状況を監視する方法
SnowflakeはCortex AISQL関数のコスト監視用に、用途の異なる2つの専用ビューを用意しています。
CORTEX_FUNCTIONS_USAGE_HISTORY - 1時間単位で集計された利用状況データ
- 関数・モデル・時間ごとにトークンとクレジットの消費量を集計
- クエリIDを含まないため、特定のクエリ・ユーザー・ロールなどに紐づけることはできない
- 全体的な利用パターンや傾向を把握するのに最適
- どの関数やモデルがコストを押し上げているかが見える
- データは1時間単位で集計
CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY - クエリ単位の詳細データ
- 個々のクエリごとのトークンとクレジットの消費量を表示
- コストのかかる個別クエリや処理を特定するのに不可欠
- クエリIDが含まれるため、深掘り調査が可能
- 最適化すべきクエリの発見に役立つ
すぐに使えるクエリ例をいくつか紹介します。
関数・モデル別の時間別/日次コストサマリー:
-- 時間別の場合は、ビューから全カラムを選択するだけ:
select
start_time,
end_time,
function_name,
model_name,
warehouse_id,
token_credits,
tokens
from
SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_USAGE_HISTORY;
--日次の場合は集計するだけ
select
date_trunc('day',start_time) as date,
コードを展開
コストが大きいクエリ上位50件。クエリテキスト・ユーザー・ウェアハウスを含めた各クエリのコスト:
SELECT
c.query_id,
q.query_text as query_text,
q.start_time,
q.execution_time / 1000 as execution_seconds,
c.function_name,
c.model_name,
c.tokens,
c.token_credits,
q.user_name,
q.warehouse_name,
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY c
JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY q
ON c.query_id = q.query_id
WHERE q.start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP())
コードを展開
ちなみにsnowflake.account_usage.cortex_aisql_usage_historyというビューも見つけましたが、ドキュメントは見当たりませんでした。このビューはクエリID粒度で、usage_time、user_id、warehouse_idを提供します。おそらくドキュメント化されていないプレビュー機能と思われます。
Cortex AI SQL活用のベストプラクティス
お客様とCortex AISQLのコスト最適化に取り組んできた経験から、いくつかおすすめのポイントを紹介します。
ダッシュボードだけでなくアラートも設定する
先ほどの監視クエリも、誰も実行しなければ意味がありません。Snowflakeで監視したい項目があれば、SQLをスケジュールタスクでラップし、Notification Integrationと組み合わせてSlackやTeamsにアラートを送るカスタムモニターを作れます。もっと手軽に監視機能を導入したい方は、SELECTのモニター機能もぜひチェックしてみてください。
まずトークン数をテストする
10万行を処理する前に、サンプルでCOUNT_TOKENSを実行しましょう。トークン数は想定より多くなることがほとんどです。SELECT AVG(COUNT_TOKENS(your_column)) FROM your_table LIMIT 1000のような簡単なテストを走らせるだけで、相手にしている規模感が掴めます。
動くなかで最小のモデルから始める
これは本当によく見るパターンです。知名度と信頼感からチームはGPT-4や大型のClaudeモデルをデフォルトで選びがちですが、分類やセンチメント分析のようなタスクはgpt-5-miniで十分こなせて、コストは10分の1です。まずプレミアムモデルを100行で試し、次に安価なモデルで同じことをやってみてください。意外と遜色ない結果が出て驚くはずです。
AIに「短く出力するよう」指示する
AI_COMPLETEやAI_SUMMARIZEでは、プロンプトと応答の両方に課金されます。詳細な説明を求めるプロンプトを数千行に対して走らせると、出力トークンはあっという間に積み上がります。応答を短く保つよう、プロンプトで明示的に指示しましょう。
結果をキャッシュする/増分更新で運用する
レポートが実行されるたびに同じ製品説明文を分類しているなら、それはお金の無駄遣いです。AIの結果はテーブルにマテリアライズしておきましょう。当たり前のように聞こえますが、できていないチームは意外と多いものです。
実際に使われているモデルを把握する
先ほどの「ユーザー・ウェアハウス別コスト」クエリを定期的に実行しましょう。開発環境で高価なモデルを使っていたまま、本番でも安価なモデルに切り替えられず運用されている、というケースが頻繁に見つかります。さらに最悪なのは、高価なClaudeモデルで数百万行を処理し続ける暴走クエリが見つかるパターンです。
まとめ
SnowflakeはAISQLのコスト監視に必要なものをひと通り揃えています。コストの詳細が見えるアカウント使用状況ビュー、透明性のある(ただし複雑な)料金体系、そして組み込みのアラート機能です。難しいのは、トークン課金を理解するために考え方を切り替えること。Snowflakeを長く使ってきたユーザーほど、本能的にクエリの実行時間やウェアハウスサイズで物事を捉えがちですが、これからはトークン数とモデル選択にも目を向ける必要があります。Cortex AISQLを使い始めて最初の数週間は学習期間と割り切ってください。小さく始めてしっかり監視し、パターンを確立してからスケールアップする。この料金モデルは、丁寧な実装には報い、「とりあえず全部に流して様子を見る」というやり方には容赦なく跳ね返ってきます。AIコストの暴走でパニックになるチームをいくつも見てきましたが、賢く使えばモデルの料金はむしろ妥当な水準です。日々本当に巨大なデータセットをAI関数で処理しているなら、Snowflakeの担当チームにボリュームディスカウントを相談してみる価値があります。1日あたり数百万トークンに達しているなら、より有利な条件を引き出せる余地があるかもしれません。これで、請求額にひやひやすることなくCortex AISQL関数を活用できる自信がついたのではないでしょうか。皆さんの活用事例もぜひ聞かせてください。
Jeffはデータ&アナリティクスのコンサルタントで、インサイトの自動化とデータ活用によるビジネスプロセス制御に15年以上携わってきました。技術面ではSnowflake + dbt + Tableauを得意とし、業界面では公益事業、臨床試験、出版、CPG、製造業での経験があります。お気軽にご連絡ください:[email protected]。