本記事では、2025年6月にパブリックプレビューが開始となったSnowflake Cortex AISQLのチュートリアルを通じて、Snowflakeの新しいSQL関数の性能について紹介します。
Snowflake Cortex AISQLとは
Snowflake Cortex AISQL(以下、Cortex AISQL)とは、Snowflake上でのSQLの様式にAIを組み込んだ、新しいSQLの機能群を指します。
こちらの機能を使うと、画像や図表などのマルチモーダルなデータ(非構造化データ)に対して、複雑なコードや機械学習パイプラインを記述することなく、通常のSQL構文だけを用いて文章の要約や画像の分類が実行できるようになります。
これにより、構造化データと非構造化データの壁を取り払い、同一のプラットフォーム上で様々なデータを統一的に分析できるようになることが見込まれます。
また、Snowflake自身は、Cortex AISQLによって以下のようなメリットが得られると述べています*1(筆者意訳)。
- 様々なシーンで構成可能な AI 演算子
- FILTER や AGGREGATE などの使い慣れたSQL とシームレスに統合された新しいAIの演算子により、直感的で強力なデータ操作が可能になります。
- 簡素化されたAIパイプライン
- 標準的な SQL を使用することで、高度でマルチステップな AI パイプラインを簡便かつ効率的に構築します。
- すべてのデータに対する統合データ分析
- 構造化/非構造化データを同じ SQL クエリ内で分析し、サイロ化されたデータ構造を解体します。
- ネイティブなマルチモーダル対応
- Cortex AISQL オペレーターは、さまざまなモダリティ(データ種別)間でスムーズに動作するよう設計されているため、テキストデータ/画像データでそれぞれ個別の処理システムを用意する必要がありません。
- パフォーマンス強化
- Snowflake 内のクエリエンジンのパフォーマンスとスケーラビリティが向上します。
以上のように、Cortex AISQLはSnowflakeにおける「AI時代のSQL」ともいうべき新機能で、データ分析に革新をもたらすことが期待されています。
Cortex AISQL関数
Cortex AISQLは、いくつかのAI対応SQL関数を通じて提供されています。
チュートリアルの前に、基本的な関数と機能のSnowflakeによる紹介を以下に記します*2(筆者意訳)。
- AI_FILTER
- テキスト/画像入力に対し、平易な言葉によるYes/No質問で評価し、SELECT、WHERE、および JOIN 句の結果を、AI 機能を使用してフィルター処理できるようにします。
- AI_CLASSIFY
- 平易な言語に基づいて、テキスト/画像入力を1つまたは複数のユーザー定義カテゴリに分類します。
- AI_AGG
- テキスト列を集計し、ユーザー定義のプロンプトに基づいて複数行にわたる洞察を返します。
- この関数は、コンテキストウィンドウ(AIモデルが一度に扱うことができるトークン単位のテキスト量)の制限を受けません。
- AI_SUMMARIZE_AGG
- テキスト列を集計し、複数行にわたる要約を返します。
- この関数についても、コンテキストウィンドウの制限を受けません。
- AI_SIMILARITY
- エンベディング(テキスト/画像データをAIモデルが扱いやすい数値ベクトルに変換したもの)を明示的に作成する必要がなく、2つの入力間のエンベディングの類似度を計算します。
- AI_COMPLETE
- 利用可能なLLMを使用して、与えられたテキスト文字列/画像のcompletionを生成します。
- この関数は、他の関数ではカバーされていない生成AIタスクに使用できます。
「AI_AGG」ではプロンプトをSQLクエリに直接組み込み、データに関する要約やグラフでの可視化ができたり、「AI_COMPLETE」では実行するモデルとプロンプトを組み込み、そのクエリ結果をテーブルに挿入できたりと、データフロー上の一度のクエリ実行だけで、AIモデルの処理までを行うことができるのはやはり魅力的です。
上記の中で、特に「AI_FILTER」「AI_CLASSIFY」「AI_AGG」「AI_COMPLETE」関数について、この後のチュートリアル中で具体的な機能とふるまいについて紹介します。
チュートリアル
チュートリアルについては、Snowflakeが提供している以下の公式チュートリアルを実施します。
チュートリアルで実行するプロセスは、以下の通りです。
- 顧客のメールデータから、テキストデータと画像データをそれぞれ抽出してテーブルを作成する
- メールデータから顧客の問い合わせ内容を要約し、既存のソリューションとの紐づけを行う
- 主な問い合わせに関する月ごとの統計を行い、集計した結果を棒グラフや円グラフで可視化する
前提条件
チュートリアルに記載の通り、ACCOUNTADMINロールを持つSnowflakeアカウントが必要です。
こちらのロールがないと、チュートリアルの「2. セットアップ」で実行する以下クエリが実行できません。
-- Enable cross-region inference ALTER ACCOUNT SET CORTEX_ENABLED_CROSS_REGION = 'ANY_REGION';
セットアップ
チュートリアル「2. セットアップ」に記載の通り、Snowsight上で必要なステートメントをそれぞれ実行していきます。
以下は、実行するファイルの簡単な概要です。具体的なファイルの中身については、上記チュートリアルからご確認ください。
setup.sql
スキーマやウェアハウスなど、Snowflakeデータベース環境を設定するための一連のコマンドを実行します。
また、チュートリアルで扱うメールデータなどを格納するステージを作成したり、Snowflakeのクロスリージョン推論を有効にしたりします。
images.sql
画像ファイルを管理・分析するためのテーブルを作成し、画像ファイルの一覧をステージから読み込む設定を行います。
Cortex AISQL実行
Snowflake Notebook上で、Cortex AISQLを実行していきます。
ライブラリのインポート後、以下にならって各SQL関数ごとのセルを実行していきましょう。
AI_COMPLETE
テキストデータから画像データにおよぶ問い合わせ内容を特定するために、「AI_COMPLETE」関数を実行します。
チュートリアルでは、テキストや画像データが含まれる問い合わせを、簡潔な一文で要約するように指示するプロンプトを使用します。
「AI_COMPLETE」関数を実行した結果、テキストと画像データを1つのテーブル上で統合して表示できていることが確認できます。*3
テキストデータに対する「AI_COMPLETE」関数の構文は以下の通りです。*4*5
AI_COMPLETE(<model>, <prompt> [ , <model_parameters>, <response_format>, <show_details> ] )
また、画像データに対するものは以下の通りです。*6
AI_COMPLETE(<model>, <predicate>, <file> [, <model_parameters> ] )
その他、関数を使用する際の制約などについては、以下の「AI_COMPLETE」ドキュメントをご確認ください。
AI_FILTER
作成したテーブルの「CONTENT」列から、特定の内容をフィルターするために、「AI_FILTER」関数を実行します。
また、「AI_FILTER」関数内のプロンプト文によって、既存テーブルを参照し、フィルタリングしたテーブルとの「JOIN」(結合)も実行します。
チュートリアルでは、上記要件に対応する形として、顧客の問い合わせ内容そのものを抽出するよう指示し、また、それぞれの問い合わせに既存のソリューションが対応しているかを確認するよう、プロンプト文に記載します。
「AI_FILTER」関数を実行した結果、問い合わせのフィルタリングと、フィルタリングした内容が既存ソリューションと結合できていることが確認できます。
こちらで実行したCortex AISQL関数の構文は、以下の通りです。*7*8
AI_FILTER(prompt('<template_string>', <expr_1> [ , <expr_2>, ... ]))
その他、「JOIN」を実行する際のテーブル数の上限などについては、以下の「AI_FILTER」ドキュメントをご確認ください。
AI_AGG
複数のカラムにおよぶテキストデータを集計し、そのデータの分析を行うために「AI_AGG」関数を実行します。*9
チュートリアルでは、上記要件に対応する形として、各問題の出現割合をパーセンテージで示すようプロンプトに記載し、月ごとの集計(総チケット数、ユニークユーザ数、上記プロンプトを使用した主要問題点のレポート)を行います。
上記のデータについてはpandasのデータフレームに変換し、集計数や問題点のリストを表示したり、月ごとの総チケット数やユニークユーザ数を棒グラフによって可視化します。
「AI_AGG」関数を実行した結果は以下の通りです。
各問題点とその割合が多い順にリストで表示され、また、各月ごとの棒グラフが数の多い月順に可視化されていることが確認できます。
こちらで実行したCortex AISQL関数の構文は、以下の通りです。*10
AI_AGG( <expr>, <task_description> )
その他、最適なパフォーマンスを得るための注意点などについては、以下の「AI_AGG」ドキュメントをご確認ください。
AI_CLASSIFY
大量のデータの内、ユーザーの定義したカテゴリに該当するかを判断して分類を行うために、「AI_CLASSIFY」関数を実行します。
チュートリアルでは、顧客の問い合わせに音楽ジャンルの好みが含まれているかどうかを判定し、分類した結果を抽出しています。
「AI_CLASSIFY」関数を実行した結果は以下の通りです。ランダムに抽出した500件のレコードの中で、音楽ジャンルの言及があると思われるコメント26件だけを抽出して、分類された音楽ジャンルの結果が円グラフに可視化されていることが確認できます。
こちらで実行したCortex AISQL関数の構文は、以下の通りです。*11
AI_CLASSIFY( <input> , <list_of_categories> [, <config_object>] ))
その他、インプットの際に考慮すべき点などについては、以下の「AI_CLASSIFY」ドキュメントをご確認ください。
おわりに
本記事では、Cortex AISQLの新しいSQL関数の基本的な使い方について紹介しました。
Cortex AISQLは、SQLという馴染み深い言語で強力な生成AI技術を扱えるようにした、画期的な機能です。
この新しい関数を用いて、データ分析に関わる課題解決にどのようなコミットができるか、より一層の調査を進めていけたらと思います。
*1:https://docs.snowflake.com/en/release-notes/2025/other/2025-06-02-cortex-aisql-public-preview
*2:https://docs.snowflake.com/en/release-notes/2025/other/2025-06-02-cortex-aisql-public-preview
*3:こちらのテーブルでは、Snowflakeからのクエリ結果のセルに含まれるファイル情報をURLに変換し、画像として表示するINPUT_FILE列が追加されています
*4:https://docs.snowflake.com/en/sql-reference/functions/ai_complete-single-string#responses-from-table-column
*5:[]はオプション、以下同様
*6:https://docs.snowflake.com/en/sql-reference/functions/ai_complete-single-file#syntax
*7:https://docs.snowflake.com/en/sql-reference/functions/ai_filter#syntax
*8:https://docs.snowflake.com/en/sql-reference/functions/prompt#syntax
*9:こちらの記事では触れませんが、プロンプトの記載によっては、これまでの定量的な集計にとどまらず、定性的な評価までもがこちらの関数で実行できるようになると思われます。
*10:https://docs.snowflake.com/en/sql-reference/functions/ai_agg#syntax
*11:https://docs.snowflake.com/en/sql-reference/functions/ai_classify#syntax
色部 晟洋(日本ビジネスシステムズ株式会社)
SharePoint Onlineサイト構築・Microsoft365移行等でプリセールス・PMを経験後、AI等の先端技術を扱う部門に異動。好きな映画は『風立ちぬ』です。
担当記事一覧