Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowparkを基礎からおさらい

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for ugmuka ugmuka
January 26, 2023
430

 Snowparkを基礎からおさらい

Avatar for ugmuka

ugmuka

January 26, 2023
Tweet

Transcript

  1. © 2023 DATUM STUDIO Co. Ltd. 1 Whoami select *

    from employnee where name = ‘向井雄二’; name company role twitter job 向井雄二 DATUM STUDIO データエンジニア @ugmuka データ分析基盤の 受託開発
  2. © 2023 DATUM STUDIO Co. Ltd. 4 データのサイロ化 営業 CRMの分析機能

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

    を使っています アナリスト SREにデータ抽出して もらってtableauで分 析しています SRE 本番DBは他の人に 触られたくないです サイエンティスト jupyter notebook 使ってローカルでモデル 作ります 法律 個人情報の取り扱いに は気を付けてください ダッシュボードがあればよい tableauでの接続先が欲しい インタラクティブなPython環境が欲しい 分析用のDB(DWH)が欲しい 個人情報にはアクセス制限をしたい
  4. © 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 | ------------------------------------
  5. © 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 …
  6. © 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に変換
  7. © 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、ローカルストレージが多く単一でのワークロード向けになっている
  8. © 2023 DATUM STUDIO Co. Ltd. 16 Logging framework 実行中のlogは別途Snowflake内のテーブルに格納(プライベートプレビュー)

    def run(): … logger.info(hoge) … logger.debug(fuga) … Snowflake内テーブル ログは別テーブルに保存 ※個人的な想像です
  9. © 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
  10. © 2023 DATUM STUDIO Co. Ltd. 19 Next step ✓

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