3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflake Summit 直前!データアプリケーション機能をおさらいしておこう

Last updated at Posted at 2024-06-03

はじめに

本記事は、データクラウド/データアプリケーション機能を動作イメージを含めながらざっくりと紹介する記事です。特にサミット直前のおさらい(今そもそもどんな機能があるんだっけ?)をしておくためにもご活用いただけるように記載いたしました!

また、サミットのオンライン配信についてはこちらの記事にまとめていますので、あわせてご確認ください!

Snowpark for Python

何をするにしても、まずはここを抑えておくことで、Snowflake のデータアプリケーション構築が楽になります。リリース当初は Python コネクタや Snowpark だけでしたが、いまや Python API や ML API も追加されています。

しかし、その影響もあり、Snowflake × Python でどんなライブラリがあるの?何を使えばいいの?という声を聞くことも多くなりました。そこで、Snowflake はこんな図を用意してくれています。
image.png
Snowflake Python API: Managing Snowflake objects with Python

ライブラリをインポートするときは、上図に則って使えばよいです。

ライブラリでいうと下記のとおりです。

  • snowflake-connector-python
  • snowflake-snowpark-python
  • snowflake-ml-python
  • snowflake(Python API:Core/Apps/Streamlit)

Python コネクタ/Snowpark Python

Pythonコネクタは、原始的なデータベース接続ライブラリです。Snowparkは、Snowflakeとプッシュダウンの効くデータフレームや、Snowflake上にPython関数を定義するための機能を持つライブラリです。これらの違いは多々ありますが、特に、ローカルでデータを処理するのか、リモート側(Snowflake)でデータを処理するのかという違いが大きいです。

例えば、下記は Snowpark for Python でテーブルを取得するコードです。

import snowflake.snowpark as snowpark
from snowflake.snowpark.functions import col

df = session.table("information_schema.packages").filter(col("language") == "python")
df.show()
結果例
PACKAGE_NAME VERSION LANGUAGE RUNTIME_VERSION
abseil-cpp 20200923.3 python NULL
abseil-cpp 20210324.2 python NULL
abseil-cpp 20211102.0 python NULL
abseil-cpp 20230802.0 python NULL
absl-py 0.10.0 python 3.8
absl-py 0.12.0 python 3.10
absl-py 1.3.0 python 3.10
absl-py 1.3.0 python 3.11
absl-py 1.3.0 python 3.8
absl-py 1.3.0 python 3.9

この df オブジェクトによるクエリ(今回だと filter()など)は、Snowflake 側で SQL として実行されており、ローカル側のリソースを使用する必要がほぼありません。

Snowflake ML

Snowflake ML は、Snowflake とネイティブに統合された scikit-learn や xgboost などのライブラリや MLflow と似た API を持つ MLOps に関するライブラリ、そして最新の Cortex を関数として扱えるライブラリを含みます。

このライブラリにより、データ加工・ML パイプラインの定義を Python で記述でき、その実行は Snowpark DataFrame 同様に、Snowflake 側にプッシュダウンすることができます。

Python API

これまで紹介したライブラリがデータを扱うためのものだったのに対し、Snowflake ライブラリはリソースを扱うためのライブラリとなります。Python 関数で、簡単に Snowflake オブジェクトを作成・削除、一覧化、起動・停止することができます。

例えば、下記はウェアハウスを一覧化し、その詳細を確認するコードです。

from snowflake.core import Root
from snowflake.core.warehouse import Warehouse, WarehouseCollection

warehouses: WarehouseCollection = root.warehouses
wh_iter = warehouses.iter(like="%")

for wh_obj in wh_iter:
    print(wh_obj.name)
    wh = root.warehouses[wh_obj.name].fetch()
    print(wh.to_dict())
結果例 COMPUTE_WH

{'name': 'COMPUTE_WH', 'warehouse_type': 'STANDARD', 'warehouse_size': 'X-Small', 'max_cluster_count': 1, 'min_cluster_count': 1, 'scaling_policy': 'STANDARD', 'auto_suspend': 180, 'auto_resume': 'true', 'resource_monitor': 'null', 'enable_query_acceleration': 'false', 'query_acceleration_max_scale_factor': 8, 'type': 'STANDARD', 'size': 'X-Small'}

これらの Snowflake Python ライブラリを使って、Snowflake のデータ・リソースの双方を、Python で幅広く操作できることがおわかりいただけると思います。

Python でこうした操作が行えることで、上記のように動的な処理や Python の豊富なライブラリを活用することができます。もちろん、SQL が苦手なユーザーが Python で Snowflake を操作できることも重要なポイントです。

Streamlit in Snowflake(SiS)

Snowflake で、Python の Web アプリフレームワークである Streamlit をホストしてくれる機能です。インタラクティブなデータ可視化アプリケーションだけでなく、先述の Python API を使って Snowflake のリソースを操作するアプリケーションを構築することも一部ですが可能です。
image.png

Snowflake Notebooks

サミット直前ですが、すでに Public Preview となり、かなりの盛りあがりを見せるこの Snowflake Notebooks です。
image.png

Python や SQL による分析をノートブック形式に行うことができる機能です。非常に使いやすい UI で、洗練されています。ショートカットキーも豊富ですし、SQL セルの結果を Python から参照できるなど驚きの機能もあります!

コストの部分も最適化されています。どうしてもノートブックの起動(セルの実行とセッションの維持)にウェアハウスコストは掛かってしまうのですが、停止後もコーディングや描画した結果の確認は行えます。

Snowflake Cortex

Cortexは、ML系機能とLLM系機能があり、ML では学習と推論を行え、LLM では推論のみ行えます。これらは、Snowflake によるマネージドサービスのため、対象となるデータさえあれば、SQL コマンドを実行するだけで操作が行えます。

Cortex ML

Cortex ML には、時系列予測と分類機能があり、その双方で現在保有するデータをもとに機械学習モデルの訓練が行えます。もちろん、そのモデルを使用して簡単に推論も行えます。

今回は時系列予測について確認してみます。ここで、下記のようなテーブル v1 があるとします。

v1 テーブル
DATE SALES
2020-01-01 00:00:00.000 2
2020-01-02 00:00:00.000 3
2020-01-03 00:00:00.000 4
2020-01-04 00:00:00.000 5
2020-01-05 00:00:00.000 6
2020-01-06 00:00:00.000 7
2020-01-07 00:00:00.000 8
2020-01-08 00:00:00.000 9
2020-01-09 00:00:00.000 10
2020-01-10 00:00:00.000 11
2020-01-11 00:00:00.000 12
2020-01-12 00:00:00.000 13

このテーブルに対して、下記の SQL コマンドで、時系列予測モデルを構築することができます。

CREATE SNOWFLAKE.ML.FORECAST model(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales'
);

そして、下記のようにN個(今回は3を指定)の推論点を指定して呼び出すことができます。

CALL model!FORECAST(FORECASTING_PERIODS => 3);

上記の出力結果は下記のようになりました。若干の誤差は生じているものの、LOWER_BOUND と UPPER_BOUND という予測区間の中には収まっていることが分かります。(元データを見ると、真値は上から 14,15,16 となりそうです)

TS FORECAST LOWER_BOUND UPPER_BOUND
2020-01-13 00:00:00.000 14 13.470749235 14.529250765
2020-01-14 00:00:00.000 14.5 13.867424344 15.132575656
2020-01-15 00:00:00.000 15.75 15.028752783 16.471247217

Cortex LLM

Cortex LLM には、非常に多岐に渡る機能がありますが、それらはすべて LLM を活用している・するためのものです。例えば、チャット形式の出力が得られる COMPLETE 関数や、感情分析を行える SENTIMENT 関数、翻訳(TRANSLATE)、要約(SUMMARIZE)関数などがあります。また、RAG を実装するためのベクトル化(EMBED)関数もあります。

この Cortex LLM の機能一覧をHaruki Murakoshiさん記事にしてくださっているので、そちらも必見です!

Snowflake での LLM で気に入っている点は、まず誰でも簡単に様々なオープンモデルを使えることです。Complete 関数では、引数に指定するだけで、LlamaやReka、Mistral、そしてSnowflake謹製のLLMモデルであるArcticなどのLLMが使えます。

また、Snowflake ならではとして、テーブルデータに対して、下図のようにバッチ的に処理できることも面白さの一つです。しかもそれが、SQL関数を使うのと同じ形式で行えるのだから驚きです。

例として、下記のようなメッセージ文を持つテーブルがあったとします。

messages テーブル
MESSAGE
こんにちは!お元気ですか?
この商品はとても使いやすく、コスパも良いです!
この商品には大変満足しました。迅速な対応をしています。

今回は、SENTIMENT 関数を試しに使ってみます。なお、SENTIMENT 関数は現在英語にしか対応していないため、一度英語に翻訳してからSENTIMENT 関数に入力しています。

select
    message,
    snowflake.cortex.sentiment(message),
    snowflake.cortex.sentiment(snowflake.cortex.translate(message, 'ja', 'en'))
from messages;

その結果が下表です。英語に翻訳したことで、正しく値が算出されていますね。

MESSAGE SENTIMENT_JA SENTIMENT_EN
こんにちは!お元気ですか? -0.32776538 0.16710834
この商品はとても使いやすく、コスパも良いです! -0.21443292 0.8582637
この商品には大変満足しました。迅速な対応をしています。 -0.16402386 0.8518236

このように、SQL 関数として Snowflake と相性の良いように提供されているため、複数のレコードに対する処理も通常の SQL と同様に記述できます。

さらに、SQL 関数である CONCAT 関数と組み合わせることで、各レコードにリテラル文字列を組み合わせることも出来ます。これにより、プロンプトによる指示や RAG の実装も容易に行えてしまいます。

先程の例と同じテーブルに対して、下記の SQL を実行します。今回は、||により文字列を結合しています(CONCAT 関数と同じ)。

select
    message,
    '次の文章をドイツ語に翻訳してください(翻訳後の文章のみ出力)' || message as MESSAGE_CONCATED,
    snowflake.cortex.complete('llama2-70b-chat', '次の文章をドイツ語に変換してください(翻訳後の文章のみ出力):' || message) AS TRANSLATED_BY_COMPLETE,
    snowflake.cortex.translate(message, 'ja', 'de') AS TRANSLATED_BY_TRANSLATE
from messages;

その結果が下表です。適切に文字列が結合され、プロンプトとして渡すことができています。今回の例であれば翻訳関数のほうが適していますが、様々な用途が考えられそうですね!

MESSAGE MESSAGE_CONCATED TRANSLATED_BY_COMPLETE TRANSLATED_BY_TRANSLATE
こんにちは!お元気ですか? 次の文章をドイツ語に翻訳してください(翻訳後の文章のみ出力):こんにちは!お元気ですか? Hallo! Wie geht es Ihnen? Hallo! Gutes?
この商品はとても使いやすく、コスパも良いです! 次の文章をドイツ語に翻訳してください(翻訳後の文章のみ出力):この商品はとても使いやすく、コスパも良いです! Dieses Produkt ist sehr einfach zu bedienen und bietet eine gute Kost-Leistungs-Relation! Dieses Produkt ist sehr einfach zu bedienen und auch Kospa gut!
この商品には大変満足しました。迅速な対応をしています。 次の文章をドイツ語に翻訳してください(翻訳後の文章のみ出力):この商品には大変満足しました。迅速な対応をしています。 Ich bin sehr zufrieden mit diesem Produkt. Es gibt eine schnelle Reaktion. Ich bin sehr zufrieden mit diesem Produkt. Wir reagieren schnell.

Vectorデータベース

Cortex LLMから遅れること数ヶ月、主にLLMのRAGで使用するベクターデータ型が登場しました。テキストをベクトル埋め込みという技術によりベクトル化(数値のリスト)することで、ある異なるテキストとの意味的な類似度を数値で算出することができます。

また、この類似度の算出にはコサイン類似度などの関数を使用しますが、こういった関数もあわせて登場しています。

例えば、先程のメッセージテーブルに対して EMBED 関数を実行してみます。さらに、Hi!というテキストに対してもベクトル化をほどこし、それらについてコサイン類似度を算出してみます。

select 
    message, 
    snowflake.cortex.embed_text_768('snowflake-arctic-embed-m', 'Hi!') as hi_embeded,
    snowflake.cortex.embed_text_768('snowflake-arctic-embed-m', snowflake.cortex.translate(message, 'ja', 'en')) as message_embeded,
    vector_cosine_similarity(hi_embeded, message_embeded) as similarity
from messages;

その結果が下図です。1レコード目の類似度が最も高くなっており、文意からもそれは正しいように思われます。
image.png

Snowpark Container Services(SPCS)

Snowflake が管理するフルマネージドのコンテナサービスです。常時起動型の Web サービスのホストやバッチ実行型のジョブ機能があります。また、Snowflake の SQL から Web サービスへのリクエストやバッチ実行を行うこともできます。

Snowpark Container を扱うための主なオブジェクトは下記となります。

  • イメージリポジトリ(Docker イメージの格納先)
  • コンピュートプール(サービス・ジョブの実行環境)
  • サービス・サービス関数・ジョブ(コンテナの集合体)

長くなってしまうのでデモは割愛しますが、docker コマンドや上記のオブジェクトの作成コマンドさえ抑えれば、簡単にコンテナを動作させられます。そのため、何でも Snowflake で動かせるようになった!というのが正直なところで、それこそ自前の LLM モデルサービスの構築なんかもできるようになっています👀

Hybrid Table(Unistore)

一般的にはHTAPと呼ばれる、OLTPとOLAPの双方のワークロードを一つのテーブルで担うことができるSnowflakeの新しいテーブルタイプです。
image.png
Hybrid tables - Architecture

Hybrid Tableは、各クエリを数十ミリ秒で処理可能であり、最大1000クエリ/秒(QPS)のパフォーマンスを実現します。これは、従来のSnowflakeのカラムナーテーブルに比べて、格段に速いです。

Search Optimization Serviceなどで高速化も可能でしたが、それはあくまでも検索自体の高速化を望むもので、Hybrid Table では検索に加え読み書きのスピードが大幅に高速化されています。

もちろん、分析的なクエリについても従来のカラムナーテーブルと同様に高速です。

ただし、データ量やQPSの増加により、性能は劣化していくことが想定されるので、高負荷なワークロードで使うことは避けましょう。あくまでも、現時点では軽量なアプリケーショントランザクション、データ加工のステータス管理などの用途が想定されているようです。

また、Hybrid Table は、CREATE HYBRID TABLE コマンドにより簡単に作成することができます。利用時も、通常の SQL クエリで SELECT や INSERT 文を実行できます。

DevOps/MLOps

最後に、DevOps/MLOps 系の機能の紹介をしておきます。DevOps としては Git Integration や Snowflake CLI が、MLOps としては Model Registry や Feature Store が Preview 状態となっています。Snowflake で SQL ファイルや関数、機械学習モデルを扱うにあたって、必須だけれども存在しなかった機能が、もうすぐそこまで来ている状態です!

おわりに

Snowflakeのアプリケーション系の機能について、機能の概要をざっくり理解いただけたでしょうか?この内容をもとに、もっと Snowflake Data Cloud Summit 2024 を楽しめるようになっていますと、幸いです。

こんな機能についても知りたい!この機能のここってどうなってるの?など気になることがあれば、ぜひお気軽にX/TwitterSnowVillageなどでお声がけください。

また、2023年以前のこうしたデータアプリケーション系機能のリリースについてまとめた記事を公開していますので、そちらもよろしければご参照ください。

仲間募集

NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)

クラウド/プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

2. データサイエンス領域(データサイエンティスト/データアナリスト)

データ活用/情報処理/AI/BI/統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX/デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

3.お客様のAI活用の成功を推進するAIサクセスマネージャー

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

4.DX/デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》 データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

ソリューション紹介

Trusted Data Foundationについて

~データ資産を分析活用するための環境をオールインワンで提供するソリューション~
https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ(Datalake+DWH+AI/BI)を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

TDFⓇ-AM(Trusted Data Foundation - Analytics Managed Service)について

~データ活用基盤の段階的な拡張支援(Quick Start) と保守運用のマネジメント(Analytics Managed)をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス~
https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

NTTデータとTableauについて

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://enterprise-aiiot.nttdata.com/service/tableau

NTTデータとAlteryxについて
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

NTTデータとDataRobotについて
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

NTTデータとInformaticaについて

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://enterprise-aiiot.nttdata.com/service/informatica

NTTデータとSnowflakeについて
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?