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

Snowparkを基礎からおさらい

ugmuka
January 26, 2023
350

 Snowparkを基礎からおさらい

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… 近々のリリース予定