Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Snowparkを基礎からおさらい
Search
ugmuka
January 26, 2023
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Snowparkを基礎からおさらい
https://datumstudio.connpass.com/event/270726/
ugmuka
January 26, 2023
More Decks by ugmuka
See All by ugmuka
What’s Rewrite at dbt coalesce 2025? : dbt coalesce 2025総復習!
ugmuka
0
130
データパイプラインバッチ設計で私が考えること
ugmuka
5
1.3k
Snowflakeでやらかした時の対処法
ugmuka
1
330
2022/12/14 ちゅらコラボ登壇資料
ugmuka
0
420
rawSQLからdbtへの移行プロセスについて
ugmuka
0
180
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
15k
We Have a Design System, Now What?
morganepeng
55
8.3k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Into the Great Unknown - MozCon
thekraken
41
2.7k
Un-Boring Meetings
codingconduct
0
410
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Six Lessons from altMBA
skipperchong
29
4.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Transcript
Snowparkを基礎からおさらい DATUM STUDIO株式会社 向井 雄二 2023年01月26日
© 2023 DATUM STUDIO Co. Ltd. 1 Whoami select *
from employnee where name = ‘向井雄二’; name company role twitter job 向井雄二 DATUM STUDIO データエンジニア @ugmuka データ分析基盤の 受託開発
© 2023 DATUM STUDIO Co. Ltd. 2 アジェンダ 1. Introduction
© 2023 DATUM STUDIO Co. Ltd. 3 Snowflakeとは? データウェアハウス データクラウド
© 2023 DATUM STUDIO Co. Ltd. 4 データのサイロ化 営業 CRMの分析機能
を使っています アナリスト SREにデータ抽出して もらってtableauで分 析しています SRE 本番DBは他の人に 触られたくないです サイエンティスト jupyter notebook 使ってローカルでモデル 作ります 法律 個人情報の取り扱いに は気を付けてください
© 2023 DATUM STUDIO Co. Ltd. 5 データクラウドとは データクラウド:データどうしの繋がり https://www.snowflake.com/en/data-cloud/platform/
© 2023 DATUM STUDIO Co. Ltd. 6 それぞれがやりたいこと 営業 CRMの分析機能
を使っています アナリスト SREにデータ抽出して もらってtableauで分 析しています SRE 本番DBは他の人に 触られたくないです サイエンティスト jupyter notebook 使ってローカルでモデル 作ります 法律 個人情報の取り扱いに は気を付けてください ダッシュボードがあればよい tableauでの接続先が欲しい インタラクティブなPython環境が欲しい 分析用のDB(DWH)が欲しい 個人情報にはアクセス制限をしたい
© 2023 DATUM STUDIO Co. Ltd. 7 そこでSnowpark Snowpark:Snowflakeを他言語の世界へ拡張する https://www.snowflake.com/en/data-cloud/snowpark/
© 2023 DATUM STUDIO Co. Ltd. 8 アジェンダ 2. Snowparkとは
© 2023 DATUM STUDIO Co. Ltd. 9 概要 SnowparkはDataframeで抽象化を行ったAPI Dataframe
API df.select()… select …, from …
© 2023 DATUM STUDIO Co. Ltd. 10 実行例 from snowflake.snowpark
import Session from snowflake.snowpark.functions import date_trunc, col connection_parameters = { "account": “**********.aws.ap-northeast-1", "user": *****@datumstudio.jp", "password": “*******", … } session = Session.builder.configs(connection_parameters).create() customer_order = session.table("raw_orders") ¥ .select("user_id", date_trunc("MONTH", "order_date").alias("month")) ¥ .group_by("month", "user_id") ¥ .count() ¥ .show() $ python test.py ------------------------------------ |"MONTH" |"USER_ID" |"COUNT" | ------------------------------------ |2018-01-01 |1 |1 | |2018-01-01 |3 |2 | |2018-01-01 |94 |2 | |2018-01-01 |50 |1 | |2018-01-01 |64 |2 | |2018-01-01 |54 |2 | |2018-01-01 |88 |1 | |2018-01-01 |2 |1 | |2018-01-01 |53 |1 | |2018-01-01 |7 |1 | ------------------------------------
© 2023 DATUM STUDIO Co. Ltd. 11 アジェンダ 3. Snowparkの機能
© 2023 DATUM STUDIO Co. Ltd. 12 anaconda連携 Keras, Tensorflowなどの豊富なPythonのライブラリを利用可能
※使用リソースはクライアント側
© 2023 DATUM STUDIO Co. Ltd. 13 Python UDF Python
UDF, procedure:Snowflake上でもPythonが動かせるようになる local app.py test Python UDF or procedure snowcliでCI/CD $ snow function create …
© 2023 DATUM STUDIO Co. Ltd. 14 Python UDF: Batch
API vectorized decorator: 行をまとまった単位で処理 create function add_cols_vectirized(x number(38, 0), y number(38, 0)) returns number(10, 0) language python runtime_version = 3.8 packages = ('pandas') handler = 'add_cols' as $$ import pandas from _snowflake import vectorized @vectorized(input=pandas.DataFrame) def add_cols(df): return df[0] + df[1] $$; inputにpandas.DataFrameを指定 →入力列を一定サイズ読み込んでpd.DataFrameに変換
© 2023 DATUM STUDIO Co. Ltd. 15 Snowpark向けLarge instance メモリ確認用procedure
create or replace procedure show_system_info() returns string language python runtime_version = '3.8' packages = ('snowflake-snowpark-python') handler = 'run' as $$ import os import shutil def run(session): total, used, free = shutil.disk_usage("/") memory_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') return f'Memory total: {int(memory_bytes / (2**30))} GiB, CPU: {os.cpu_count()} core, Disc usage: {int(total / (2**30))} GiB' $$; メモリ、CPU、ローカルストレージが多く単一でのワークロード向けになっている
© 2023 DATUM STUDIO Co. Ltd. 16 Logging framework 実行中のlogは別途Snowflake内のテーブルに格納(プライベートプレビュー)
def run(): … logger.info(hoge) … logger.debug(fuga) … Snowflake内テーブル ログは別テーブルに保存 ※個人的な想像です
© 2023 DATUM STUDIO Co. Ltd. 17 アジェンダ 4. Snowparkのこれから
© 2023 DATUM STUDIO Co. Ltd. 18 Snowflakeの行き先 すべてのデータをSnowflakeに 営業
CRMの分析機能 を使っています アナリスト SREにデータ抽出しても らってtableauで分析し ています SRE 本番DBは他の人に 触られたくないです サイエンティスト jupyter notebook 使ってローカルでモデル 作ります 法律 個人情報の取り扱いに は気を付けてください Snowflake Snowsight tableau-Snowflake連携 Snowpark role base access control masking policy
© 2023 DATUM STUDIO Co. Ltd. 19 Next step ✓
streamlit統合 • Snowflake上でstreamlitをホストできるようになる ✓ 非構造化データへの対応 • pythonへの対応はプライベートプレビュー中 ✓ 時系列予測パッケージ • ビルトインで時系列予測ができる ✓ 外部への通信のサポート • API callが可能に etc… 近々のリリース予定