Slide 1

Slide 1 text

Snowparkを基礎からおさらい DATUM STUDIO株式会社 向井 雄二 2023年01月26日

Slide 2

Slide 2 text

© 2023 DATUM STUDIO Co. Ltd. 1 Whoami select * from employnee where name = ‘向井雄二’; name company role twitter job 向井雄二 DATUM STUDIO データエンジニア @ugmuka データ分析基盤の 受託開発

Slide 3

Slide 3 text

© 2023 DATUM STUDIO Co. Ltd. 2 アジェンダ 1. Introduction

Slide 4

Slide 4 text

© 2023 DATUM STUDIO Co. Ltd. 3 Snowflakeとは? データウェアハウス データクラウド

Slide 5

Slide 5 text

© 2023 DATUM STUDIO Co. Ltd. 4 データのサイロ化 営業 CRMの分析機能 を使っています アナリスト SREにデータ抽出して もらってtableauで分 析しています SRE 本番DBは他の人に 触られたくないです サイエンティスト jupyter notebook 使ってローカルでモデル 作ります 法律 個人情報の取り扱いに は気を付けてください

Slide 6

Slide 6 text

© 2023 DATUM STUDIO Co. Ltd. 5 データクラウドとは データクラウド:データどうしの繋がり https://www.snowflake.com/en/data-cloud/platform/

Slide 7

Slide 7 text

© 2023 DATUM STUDIO Co. Ltd. 6 それぞれがやりたいこと 営業 CRMの分析機能 を使っています アナリスト SREにデータ抽出して もらってtableauで分 析しています SRE 本番DBは他の人に 触られたくないです サイエンティスト jupyter notebook 使ってローカルでモデル 作ります 法律 個人情報の取り扱いに は気を付けてください ダッシュボードがあればよい tableauでの接続先が欲しい インタラクティブなPython環境が欲しい 分析用のDB(DWH)が欲しい 個人情報にはアクセス制限をしたい

Slide 8

Slide 8 text

© 2023 DATUM STUDIO Co. Ltd. 7 そこでSnowpark Snowpark:Snowflakeを他言語の世界へ拡張する https://www.snowflake.com/en/data-cloud/snowpark/

Slide 9

Slide 9 text

© 2023 DATUM STUDIO Co. Ltd. 8 アジェンダ 2. Snowparkとは

Slide 10

Slide 10 text

© 2023 DATUM STUDIO Co. Ltd. 9 概要 SnowparkはDataframeで抽象化を行ったAPI Dataframe API df.select()… select …, from …

Slide 11

Slide 11 text

© 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 | ------------------------------------

Slide 12

Slide 12 text

© 2023 DATUM STUDIO Co. Ltd. 11 アジェンダ 3. Snowparkの機能

Slide 13

Slide 13 text

© 2023 DATUM STUDIO Co. Ltd. 12 anaconda連携 Keras, Tensorflowなどの豊富なPythonのライブラリを利用可能 ※使用リソースはクライアント側

Slide 14

Slide 14 text

© 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 …

Slide 15

Slide 15 text

© 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に変換

Slide 16

Slide 16 text

© 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、ローカルストレージが多く単一でのワークロード向けになっている

Slide 17

Slide 17 text

© 2023 DATUM STUDIO Co. Ltd. 16 Logging framework 実行中のlogは別途Snowflake内のテーブルに格納(プライベートプレビュー) def run(): … logger.info(hoge) … logger.debug(fuga) … Snowflake内テーブル ログは別テーブルに保存 ※個人的な想像です

Slide 18

Slide 18 text

© 2023 DATUM STUDIO Co. Ltd. 17 アジェンダ 4. Snowparkのこれから

Slide 19

Slide 19 text

© 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

Slide 20

Slide 20 text

© 2023 DATUM STUDIO Co. Ltd. 19 Next step ✓ streamlit統合 • Snowflake上でstreamlitをホストできるようになる ✓ 非構造化データへの対応 • pythonへの対応はプライベートプレビュー中 ✓ 時系列予測パッケージ • ビルトインで時系列予測ができる ✓ 外部への通信のサポート • API callが可能に etc… 近々のリリース予定