はじめに:AI × ETLで業務が変わる?
SnowflakeのAI機能CortexのLLM関数を国産ETLツール「DataSpider Servista」から呼び出してみたら、想像以上にスムーズで実用的でした。
本記事ではDataSpiderからSNOWFLAKE.CORTEX.COMPLETE関数を呼び出す手順と実行結果を設定画面を交えて紹介します。
「ETLツールでAIを使うなんて無理でしょ?」と思っているあなたに届けます。
対象
Snowflakeを活用したいエンジニアやデータサイエンティスト
Snowflakeとは
近年、クラウドベースのデータウェアハウスが急速に普及しています。その中でも特に注目されているものがSnowflake。従来のオンプレミス型データベースとは一線を画すアーキテクチャとスケーラビリティを備えており、データエンジニアや分析担当者にとって強力な武器となっています。
Snowflakeは「AI Data Cloud」を称し、AIの活用も大きな魅力の一つです。AI活用のためのフルマネージドサービスであるSnowflake CortexにはLLM関数が提供されており、SQLベースで生成AIを実行できます。これによってデータをSnowflakeから外部に移動させることなく、様々なAIタスクを実行できるようになります。
従来のデータマートはDBテーブルの内容に基づいて生成します。このため、DBテーブルにない情報は作成できません。Cortex LLM関数を利用することで生成AIの出力結果を加えたデータマートを作成することが可能になります。Snowflakeのセキュリティやスケーラビリティを活かしつつ、生成AIを活用してデータ駆動型の意思決定やアプリケーション開発を加速させることができます。
LLM関数には以下のような関数があります。
- COMPLETE関数:指定したLLMに質問を送信して回答を得る
- SENTIMENT関数:英語の入力テキストに対する-1から1までの感情スコアを返す(正がポジティブ)
- CLASSIFY_TEXT関数:指定したカテゴリに分類する
- TRANSLATE関数:別の言語に翻訳する
今回はCOMPLETE関数を呼び出します。
COMPLETE関数は様々なLLMを指定できることが魅力です。同じ質問を複数のLLMに回答させて内容を比較することも可能です。特定のLLMにロックインされない自由度
の高いAI活用の可能性が広がります。
今回は以下のLLMを利用しました。
- llama3.1-8b:Metaの80億パラメータのモデルで、効率的な推論と多言語対応が特徴。
- jamba-1.5-mini:AI21 Labsの軽量モデルで、MambaアーキテクチャとTransformerアーキテクチャを活用するハイブリッドアーキテクチャ。
- mistral-large2: Mistral AIの高精度なテキスト生成を得意とする大規模モデル。
- mixtral-8x7b: Mistral AIのスパース混合エキスパートモデル。
- reka-flash:Rekaのスピードと性能のバランスを重視した210億パラメータのモデル。
DataSpider Servistaとは
セゾンテクノロジーのデータ連携プラットフォームであり、異なるシステム間のデータを柔軟かつ迅速に連携できるソフトウェアです。GUIベースの直感的な操作で、プログラミングの知識がなくてもシステム連携を開発・運用できます。様々なシステムやアプリケーション、データベース、クラウドサービスに対応した豊富なアダプタが用意されていることがセールスポイントです。2025年2月4日リリースのV4.5 SP1から新たにSnowflakeアダプタが提供されました。
アダプタは接続先システムと連携するためのコンポーネント(モジュール)であり、接続先システムのデータを製品内部のデータ形式に変換します。これによってユーザーは様々なシステムのデータを製品の中で統一的に扱えるようになります。
用意するもの
Snowflakeアカウント
DataSpider Servista V4.5 SP1を導入したOS
DataSpiderの構成要素
最初にDataSpiderの構成要素を説明します。
DataSpiderの連携処理のプログラムは「スクリプト」と称します。
このスクリプトを格納する箱がプロジェクトです。これはEclipseのプロジェクトなどと同じようなものです。
DBなど接続先システムの接続情報(ホスト名、ポート番号、ユーザー名、パスワードなど)は「グローバルリソース」に設定し、スクリプトから参照します。これによって接続情報は一括管理できます。接続先のホスト名変更などもグローバルリソースの変更で対応でき、スクリプトの修正は不要です。
作成したスクリプトは「サービス」として登録します。サービスに登録することでスクリプトは製品外部から実行できるようになります。OSコマンドから実行したり、トリガーを設定することで指定日時やファイル生成などのイベントで起動したりするようになります。
今回は「やってみた」ですので、グローバルリソースとスクリプトを作成し、DataSpider上で実行します。
グローバルリソース
最初にグローバルリソースです。DataSpider Studioにログインし、コントロールパネルの「グローバルリソースの設定」を開き、Snowflakeアダプタのグローバルリソースを新規作成します。
空欄に接続情報を設定し、「接続テスト」ボタンを押して「接続に成功しました」と表示されれば成功です。
よくあるエラーには以下があります。
・アカウント識別子の誤り
net.snowflake.client.jdbc.SnowflakeSQLException: JDBC driver encountered communication error. Message: HTTP status=404.
・データベース名の誤り
com.appresso.ds.dp.modules.adapter.snowflake.SnowflakeInvalidContextException: データベース名が不正です。データベース名=XXXX
・プロキシ接続が必要な環境でsystem.propertiesにプロキシ設定をしていない。
net.snowflake.client.jdbc.SnowflakeSQLLoggedException: JDBC driver encountered communication error. Message: No trusted certificate found.
・Snowflake上でキーペア認証が有効になっていない
net.snowflake.client.jdbc.SnowflakeSQLException: Authentication attempt rejected by the current authentication policy.
Snowflakeの認証ポリシーでパスワードまたはキーペア認証が無効化されています。
Snowflakeの認証ポリシーのうち、AUTHENTICATION_METHODSの値にPASSWORDまたはKEYPAIRがセットされていることを確認してください。
スクリプト
接続テストに成功したら、プロジェクトを作成し、スクリプトに連携処理を実装します。
スクリプトはDataSpider Studioのデザイナで作成します。StartからEndまでにアイコンを配置し、矢印で繋げる形で実装します。
今回はLLM関数のCOMPLETE関数を実行するスクリプトを作成しました。
変数questionに格納された質問を複数のLLMに投げ、その結果をCSVで出力します。
最初のSNOWアイコン(検索系SQL実行処理)でSnowflakeにSQL文を実行させ、次のMAPPERアイコンでSnowflakeの実行結果をマッピングし、最後のCSVアイコン(CSVファイル書き込み処理)でCSVファイルに出力します。
SNOWアイコンのプロパティは任意のSQL文を指定できるようになっています。
今回は以下のSelect文を指定します。
SELECT
SNOWFLAKE.CORTEX.COMPLETE('llama3.1-8b', '${question}') AS llama,
SNOWFLAKE.CORTEX.COMPLETE('jamba-1.5-mini', '${question}') AS jamba,
SNOWFLAKE.CORTEX.COMPLETE('mistral-large2', '${question}') AS mistral,
SNOWFLAKE.CORTEX.COMPLETE('mixtral-8x7b', '${question}') AS mixtral,
SNOWFLAKE.CORTEX.COMPLETE('reka-flash', '${question}') AS reka
このSelect文で一つの質問を5種類のLLMに投げることができます。
実行
変数questionに質問文を指定してスクリプトを実行します。
スクリプトの実行はDataSpider Studioのデザイナの実行ボタンを押すだけです。
質問①鎌倉幕府の成立年
質問文は日本史で見解の分かれる「鎌倉幕府の成立は西暦何年ですか。」としました。
実行結果は以下の通りでした(尚、生成AIは冪等性がないことを特徴としており、再度実行したとして同じ結果になるとは限りません)。
●llama3.1-8b
1192年です。
●jamba-1.5-mini
鎌倉幕府の成立は西暦1185年です。
●mistral-large2
鎌倉幕府の成立は西暦1192年です。この年、源頼朝が征夷大将軍に任命され、鎌倉に幕府を開いたことで、日本の政治体制が大きく変わりました。鎌倉幕府は、日本初の武家政権として、約150年間にわたって続きました。
●mixtral-8x7b
鎌倉幕府は西暦1185年に成立しました。この時、戦争で勝利を得た最強の武士たちが政治的な権力を独占する形で政治制度が確立されました。幕府の最初の将軍は、戦争で最大の勝利を上げた源頼朝でした。鎌倉幕府は約700年にわたり日本の政治を支配し、幕府時代と呼ばれる時代を形成しました。
●reka-flash
鎌倉幕府の成立は西暦1185年です。この年には、以下の重要な出来事がありました。
- 源平合戦の終結:源義経と平家の間で続いた合戦が、壇ノ浦の戦いで平家が滅亡しました。
-
鎌倉に幕府の設立:源義経の弟である源頼朝が、鎌倉に幕府を設立し、武家政権の基盤を築きました。
このため、1185年が鎌倉幕府の成立年とされています。
■コメント
LLMも1185年説と1192年説に分かれました。理由も書いている回答では1192年説は源頼朝の征夷大将軍就任を根拠とする点は日本史と同一です。これに対して1185年説の理由では日本史で根拠とされる守護・地頭の設置には言及せず、戦争への勝利を根拠としています。
1185年説の回答の理由には日本史知識からすると怪しいところがあります。
mixtralの回答「武士たちが政治的な権力を独占」は歴史学からは批判されるでしょう。朝廷と幕府の二元的支配体制や幕府が朝廷や寺社らの権門と競合・補完する関係と説明されます。
mixtralの回答「鎌倉幕府は約700年にわたり日本の政治を支配」は誤りです。700年間は武家政権全体の期間です。
rekaの回答「源義経の弟である源頼朝」は誤りです。頼朝は義経の兄です。
質問②三重県の地方区分
次に地理で見解の分かれる「三重県は中部地方ですか、近畿地方ですか。」を質問しました。実行結果は以下の通りでした。
●llama3.1-8b
中部地方です。
●jamba-1.5-mini
三重県は中部地方に位置します。
●mistral-large2
三重県は近畿地方に属します。近畿地方には、大阪府、京都府、兵庫県、奈良県、滋賀県、和歌山県、三重県が含まれます。中部地方には、愛知県、岐阜県、静岡県、長野県、新潟県、富山県、石川県、福井県、山梨県が含まれます。
●mixtral-8x7b
三重県は中部地方(チュウブU地方)に属します。
Explanation:
Mie Prefecture is located in the Chubu region of Japan, not in the Kinki region as some people might think. The Chubu region, also known as the Central Region, is one of the eight regions in Japan and is located in the central part of the main island of Honshu. It includes nine prefectures, including Mie Prefecture. The Kinki region, on the other hand, is located in the south-central part of Honshu and includes prefectures such as Osaka, Kyoto, and Hyogo. While Mie Prefecture is geographically close to the Kinki region, it is not part of it.
●reka-flash
三重県の地理的位置と行政区分から見ると、以下のようになります。
地理的位置
- 三重県は、日本の中央部に位置し、東は東海地方、西は近畿地方に接しています。
- 伊勢湾に面しており、東は静岡県、西は滋賀県と接しています。
行政区分
-
三重県は、通常は東海地方に分類されます。
- 東海地方は、愛知県、岐阜県、三重県の3県から構成されています。
近畿地方との関係
- 近畿地方は、大阪府、兵庫県、京都府、滋賀県、奈良県の5府県から構成されています。
- 三重県の西部は滋賀県と接しており、地理的には近畿地方に近い部分もありますが、行政区分としては東海地方に属しています。
結論
- 三重県は、行政区分としては東海地方に属します。ただし、地理的には近畿地方にも接しているため、両地方の中間的な位置にあるとも言えます。
まとめ
- 地理的位置: 中部地方に近いが、行政区分では東海地方
- 行政区分: 東海地方
したがって、正確には東海地方に分類されます。
■コメント
LLMの回答は中部地方、近畿地方、東海地方に分かれました。このようにLLMによって回答は異なります。これは単なる誤差ではなく、それぞれのモデルが異なる視点や知識を持っていることの証です。だからこそ、一つのLLMに依存するのではなく、複数のLLMを活用することで、より広範で多角的な知見を得ることができます。
まとめ
DataSpider ServistaのSnowflakeアダプタを活用することで、GUI操作を通じてSnowflake CortexのLLM関数呼び出しが簡単にできました。SQL文の中でAI機能をシームレスに実行できるため、従来のデータ連携プロセスに自然な形でAIを組み込むことができます。これにより、業務効率とデータ活用の幅が大きく広がります。
●本記事で利用した製品の公式ページは以下になります。
Snowflake AIデータクラウド
データ連携プラットフォーム DataSpider Servista
利用時のSnowflakeバージョンは9.21.1です。
バージョン9.22からテスト利用が可能になる2025_05 Bundleではjamba-1.5-mini及びreka-flashがdeprecatedになると発表されました。
2025_05 Bundleは2025年10月にGenerally Enabledとなる予定です。
Snowflake Cortex: Model deprecation (Preview)
We Are Hiring!