KADOKAWA Connected / ãã¯ã³ã´ã® @saka1 ã§ããæè¿ã¯ãã¼ã¿åºç¤ã®ä¿å®çã«æºãã£ã¦ãã¾ãã
ä»åã¯Streamlitã¨ããWebã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯ã使ããSnowflakeä¸ã®ãã¼ãã«ã®å©ç¨ç¶æ³ã測å®ããããã·ã¥ãã¼ããä½ã£ã¦ã¿ã¾ããã
ãã¼ã¿ã®éè¦ã¯ãã¤ã®éã«ãå¤åãã¦ããåé¡
ãã¼ã¿æ´»ç¨ãé²ããããã«ã¯ããã¼ã¿ã®æ´åãå¿ è¦ã§ããç¡ããã¼ã¿ã¯åæã§ããªãã®ã§â¦â¦ãä¸æ¹ã§ããã ãã¼ã¿ãåºç¤ä¸ã«æ´åããã ãã ã¨ããã®ãã¼ã¿ãã©ããããæç¨ãªã®ãã¯å¤æãé£ããã§ãã
æ´åå½åã¯æç¨ã§ã¿ããªãè¦ã¦ããï¼ãããããªãï¼ãã¼ãã«ãããã°ããçµã¤ã¨äººæ°ããªããªã£ã¦ãããã¨ãããã¾ãã ã²ã©ãæã«ã¯ãå®ã¯èª°ãè¦ã¦ããªããã¼ã¿ãå°åºããããã®ãã¼ã¿ãã¤ãã©ã¤ã³ããã¨ã³ã¸ãã¢ãå¿ æ»ã§ãå®ããã¦ããäºããããããããã¾ããã
ãã¼ã¿ã®æ´åã¨ããã¨ãããã ãã¼ã¿ãå¢ããã¦ãã¸ãã¹ãµã¤ãã®è¦æã«å¿ãç¶ããä¸æ¹ã ã¨ããããç ´ç¶»ãã¾ããä¿å®ã³ã¹ãã®å¢å¤§ã«ãã¼ã¿ã®ä¾¡å¤ã追ãã¤ããªããªã1ããã§ãï¼æã èªèº«ããã¾ãä»äººäºã§ã¯ãªãã§ãï¼ã
ç ´ç¶»ãé²ãã«ã¯ãæç¨ãªãã¼ã¿ãå¢ããä¸æ¹ã§ä½¿ãããªããªã£ããã¼ã¿ã®å»æ¢ãé²ãããªã©ãã©ã¤ããµã¤ã¯ã«ãè¨ç»ãã¦ããå¿ è¦ãããã¾ãããã®ããã®åºç¤ã«ãªãã®ã測å®ã§ãã
â» ããä½è«ã§ããããã®è¾ºãã¯æ®éã®Webãµã¼ãã¹ãªã©ã¨ãä¼¼ã¦ããæ°ããã¾ãããã¸ãã¹ã®æ¹åã®ããã«ãã£ã¼ãããã¯ãµã¤ã¯ã«ãä½ãå¼·åããå¿ è¦ãããä¸æ¹ã§ããã¼ã¿æ´åèªä½ãä¸ç¨®ã®ï¼å ¸åçã«ã¯ç¤¾å åãã®ï¼ãµã¼ãã¹ã¨ãã¦ç¶ç¶çãªæ¹åããããå¿ è¦ãããã®ã§ãã
åèä¾: ç¾å®ã®å©ç¨ç¶æ³ããã¼ã¿ããã¸ã¡ã³ãã«æ´»ãã
ã¡ã«ã«ãªã® @__hiza__ ããã¯ããã®è¾ºãã®ãã¼ã¿ããã¸ã¡ã³ãã«ã¤ãã¦ãå®éã®å©ç¨ç¶æ³ãINFORMATION_SCHEMAããåå¾å¯è¦åããã¢ããã¼ããææ¡ãªãã£ã¦ãã¾ãã ãã¼ã¿ããã¸ã¡ã³ãèªä½ããã¼ã¿ããªãã³ã«è¡ãã®ã¯ãã¨ã¦ãçãè¯ãããã«æãã¾ããã
ãã®è¨äºã®ãé¡
ãã®è¨äºã§ãã»ã¼åæ§ã®ãã¨ããã¦ã¿ããã¨æãã¾ããã¤ã¾ãããã¼ãã«åä½ã§å©ç¨ç¶æ³ã測å®ãã¦ã¿ããã¨ã§ãåãã¼ã¿ã®ã¦ã¼ã¶å©ç¨ç¶æ³ãå¯è¦åãã¾ãã ãã£ã¨ããåããã¨ããã£ã¦ãé¢ç½ããªãã®ã§ãã¡ãã£ã¨ã ããé¡ãæ¹å¤ãã¾ããã
- BigQueryã§ã¯ãªãSnowflakeã§ã®æ¸¬å®ãè¡ã
- ããã¯åã«æã ã®ãã¼ã¿åºç¤ã§æ¡ç¨ãã¦ããã®ãSnowflakeã ããã§ã
- Streamlitã«ãã£ã¦ããã·ã¥ãã¼ãã®å½¢ã«ã¾ã¨ãã¦ã¿ã
- ã¦ãã¼ã¯ã¦ã¼ã¶æ°ï¼UUï¼ãã°ã©ãåãã¦ã¿ããã¨ã«ãã¾ã
Pythonã¯ãã¾ã詳ãããªãã®ã§é°å²æ°ã§æ¸ãã¦ãã¨ãããããã¾ãã許ãã¦ãã ããâ¦â¦ã
Streamlit
Streamlitã¯ãããã·ã¥ãã¼ãã®ãããªãã®ãPythonã§è¡¨ç¾ããããã®Webã¢ããªã±ã¼ã·ã§ã³ãã¬ã¼ã ã¯ã¼ã¯ã§ãã ãã®ãã¬ã¼ã ã¯ã¼ã¯ã®åãã¯èå³æ·±ããã®ã§ããããããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®ãããªçºæ³ãå ¥ã£ã¦ããããã§ãã
- Streamlitã®APIãå¼ã¶ãã¨ã§ãå ¥åºåã®ã¦ã£ã¸ã§ãããWebãã¼ã¸ä¸ã«è¨ç½®ã§ãã
- å ¥åå¤ãå¤åããã¨Pythonã³ã¼ãå ¨ä½ãåè©ä¾¡ããããããã«ãã£ã¦åºåçµæãå¤ãããã¨ãã§ãã
- å ¥åã¦ã£ã¸ã§ããã¨ãã¦ã¯ä¾ãã°ã¹ã©ã¤ãã¼ãåºåã¦ã£ã¸ã§ããã¨ãã¦ã¯è¡¨ãå³ãªã©ãæ¨æºã§æä¾ããã¦ãã
åè©ä¾¡ã®é¨åã¯Streamlitãèªåçã«ãã£ã¦ãããã®ã§ãã¢ããªéçºè ã¯å ¥åã¦ã£ã¸ã§ããã®å¤ã«å¿ãã¦è¨ç®ãè¡ãåºåã«ã¤ãªããã¨ã«æ³¨åã§ãã¾ããããã·ã¥ãã¼ãè¨è¿°ã«ç¹åãã¦ããã®ããããä¾ãã°HTMLãCSSã触ãå¿ è¦ã¯ãªããã·ã³ãã«ãªè¨è¿°ã§ãã
ç°¡åãªä¾ã¨ãã¦ã¢ã³ãã«ã«ãæ³ã使ã£ãåå¨çè¨ç®ãå®è£ ãã¦ã¿ã¾ãã2ã以ä¸ã®Pythonã³ã¼ããStreamlitã§å®è¡ãã¾ãã
import itertools import random import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns import streamlit as st def generate_sample_df(n): def r(): while True: yield random.random() return pd.DataFrame( { "x": itertools.islice(r(), 0, n), "y": itertools.islice(r(), 0, n), }, dtype=np.float32, ) # å ¥åï¼ãã®å ´åã¯ã¹ã©ã¤ãã¼ï¼ã®è¨å® n = st.slider("Sample size", 0, 1000, 200) # nç¹ãããªããµã³ãã«ãçæãããããããåã®å å´ã«ãããã©ãããå¤å®ãã¦ãã df = generate_sample_df(n) df["is_in_circle"] = (df["x"] ** 2 + df["y"] ** 2) < 1**2 # ããã¹ãã®è¡¨ç¤º st.write("Pi â ", 4 * len(df[df["is_in_circle"]]) / len(df)) # matplotlibã§ã®æç»çµæã®è¡¨ç¤º fig = plt.figure() sns.scatterplot(x="x", y="y", data=df, hue="is_in_circle") st.pyplot(fig) # DataFrameã®è¡¨ç¤º st.write("Head of df") st.dataframe(df.head(10))
å®è¡ã¯åç´ã§ããã¼ã«ã«ã§ streamlit run monte.py
ãªã©ã¨ããã¨ã¢ããªã±ã¼ã·ã§ã³ãµã¼ããç«ã¡ä¸ããã¾ããããã¨ããããªWebãã¼ã¸ãå¾ããã¾ãã

Streamlitããã£ã¦ãããã¨ã¯ st.slider
ã§è¨å®ããã¹ã©ã¤ãã¼ã®å¤ãã¦ã¼ã¶ã®æä½ã§å¤ãããã³ã«ãããã°ã©ã å
¨ä½ãåå®è¡ãããã¨ã§ããçµæçã« n
ã«ä¾åããç®æããã¹ã¦ãåè©ä¾¡ãããã®ã§åæç»ãå®äºãã¾ãã
ããããæ¼ãããã°ï¼Pandasãç¥ã£ã¦ããåæã«ã¯ãªãã¾ããï¼ãªãã¨ãªãèªãã¡ããããããªãã§ããããã
Snowflakeã«ãããå©ç¨ç¶æ³ã®åå¾
Snowflakeã§ã¯ãINFORMATION_SCHEMAã¨å¥ã«ãACCOUNT_USAGEãã¥ã¼ãæä¾ããã¦ãã¾ãã https://docs.snowflake.com/ja/sql-reference/account-usage.html
ããã§ããã¢ã«ã¦ã³ãã¨ã¯Snowflakeãå¥ç´è ã«æãåºãããã³ãã§ãä»ã®ãã®ã§ä¾ãããªãAWSã¢ã«ã¦ã³ãã¨ãã«è¿ããã®ã§ãã ACCOUNT_USAGEããã¯ã¢ã«ã¦ã³ãå ¨ä½ã§ã®æ§ã ãªæ å ±ãåå¾ã§ãã¾ãããä»åã®ãé¡ã§å©ç¨ã§ããããªã®ã¯ACCESS_HISTORYãã¥ã¼ã§ãã
ãã®ãã¥ã¼ã¯ã¢ã«ã¦ã³ãå ¨ä½ã§
- 誰ã
- ã©ããªã¯ã¨ãªãçºè¡ã
- ã©ã®ãã¼ãã«ã®ã©ã®ã«ã©ã ã«ã¢ã¯ã»ã¹ããã
ãããã«ã¤ãã¦ã®æ å ±ãæä¾ãã¾ããä»åã®ç¨éã«ã´ã£ããã§ãã
StreamlitããSnowflakeã®SQLãçºè¡ãã
ãã¦ãåè¿°ã®2ã¤ãçµã¿åããã¦Streamlitã¢ããªã±ã¼ã·ã§ã³ãä½ãã¾ããã¨ãã£ã¦ããæè¡çã«ããã»ã©è¤éãªãã¨ã¯ããã¾ããããªããªãStreamlitã¯Pythonã§ä»»æã®ã³ã¼ããå®è¡ã§ããããã¦Pythonã³ã¼ãä¸ããã¯Snowflakeã¯ããæ®éã®RDBMSã®ããã«æ±ããããã§ãã
å ¥åãã©ã¡ã¼ã¿ã¨ãã¦å¤å°å®ç¨æãããããªã¨æãä»åé¸ãã ã®ã¯æ½åºå¯¾è±¡åºéã§ãããã®æéã«ãã¼ãã«ãå©ç¨ããã¦ãã¼ã¯ã¦ã¼ã¶æ°ã§äººæ°ãã¼ãã«ã©ã³ãã³ã°ãåºåãã¦ã¿ããã¨ã«ãã¾ãã
ä»åã¯ä»¥ä¸ã®ãããªã³ã¼ããæ¸ãã¾ããã
import datetime import os from pathlib import Path import matplotlib.pyplot as plt import seaborn as sns import snowflake.connector import streamlit as st from dotenv import load_dotenv load_dotenv() ACCOUNT = os.getenv("SNOWFLAKE_ACCOUNT") USERNAME = os.environ.get("SNOWFLAKE_USERNAME") PASSWORD = os.environ.get("SNOWFLAKE_PASSWORD") assert ACCOUNT is not None assert USERNAME is not None assert PASSWORD is not None def fetch_data(since=datetime.date(2022, 1, 1), until=datetime.date(2022, 2, 1)): try: ctx = snowflake.connector.connect( account=ACCOUNT, user=USERNAME, password=PASSWORD, network_timeout=30, ) sql = Path("./uu_query.sql").read_text() cur = ctx.cursor() cur.execute( sql, ( since, until, ), ) df = cur.fetch_pandas_all() return df finally: cur.close() with st.form(key="uu_form"): query_start_since = st.date_input("UUè¨ç®ï¼å§ç¹ï¼", datetime.date(2023, 1, 1)) query_start_until = st.date_input("UUè¨ç®ï¼çµç¹ï¼", datetime.date(2023, 1, 7)) submit = st.form_submit_button(label="UUæ½åº") if submit: df = fetch_data(since=query_start_since, until=query_start_until) fig = plt.figure(figsize=(6, 18)) sns.set_theme() sns.set(font_scale=0.8) sns.barplot(x="UU", y="TABLE_NAME", data=df) st.pyplot(fig) # DataFrameã表形å¼ã§è¡¨ç¤º st.write("Top5") st.dataframe(df.head(5))
åºæ¬çã«ã¯ãã¼ã¿ãå¼ã£å¼µã£ã¦ãã¦ç°¡åã«å å·¥ãã¦å¯è¦åãã¦ããã ãã§ãããããã¤ãã®ç¹ãè£è¶³ãã¾ãã
Streamlitã®form
ã¾ãã¯formã«ã¤ãã¦ã§ããformã¯Streamlitã®æ¯è¼çæè¿ã®æ©è½ããããè¦ããã«ã³ã¼ãã®åè©ä¾¡ããã¿ã³ãæ¼ãã¾ã§é 延ãããããã®ãã®ã§ãã
date_input
ãå«ãæ®éã®Streamlitã®å
¥åç¨ãªãã¸ã§ã¯ãã¯ãå
¥åãå¤ãããã³ã«ã³ã¼ãã®åè©ä¾¡ãèµ°ãã¾ãããããããã®å¦çãéãã£ãã¨ããã¨ã¦ã¼ã¶ã¯ä¸å¿«ã§ããéãè¨ç®ãããã¤ã³ãã©ã大å¤ã§ããããã§formã使ãã¨ãsubmitãæ¼ä¸ããå¾ã®ã¿åè©ä¾¡ãããããã«ã§ãã¾ããä»åã®ç¨éã§ããã¨ãæ¥ä»è¨å®ãåãããã³ã«SQLãçºè¡ããè¨ç®ãªã½ã¼ã¹ãé£ãæåãé¿ãããã¾ãã
UUè¨ç®ç¨ã®SQL
次ã«UUè¨ç®ç¨ã®SQLã«ã¤ãã¦ã§ããPythonããSnowflakeã«SQLãçºè¡ããã«ã¯Pythonã³ãã¯ã¿ã使ãã¾ãã
https://docs.snowflake.com/ja/user-guide/python-connector.html
ãã®ã³ãã¯ã¿ã©ã¤ãã©ãªã¯PEP-249ãå®è£
ãã¦ããã®ã§ãä¸è¬çãªPythonã§ãã¼ã¿ãã¼ã¹ã触ãã³ã¼ãã¨æ¸ããã¨ã¯ã»ã¼åãã§ããã¡ãã£ã¨ãã便å©é¢æ°ã¨ãã¦ãSQLã®å®è¡çµæãPandasã®DataFrameã«å¤æãã¦ãããé¢æ°fetch_pandas_all
ãããã¾ããä»åã¯ããã使ã£ã¦ã¿ã¾ããã
å¤é¨ãã¡ã¤ã«ã«ç½®ãã¦ããuu_query.sql
ã¯ããããã以ä¸ã®ããã«ãªã£ã¦ãã¾ãã
with summary_table as ( select table_name from account_usage.tables where table_schema ilike 'summary' and deleted is null ), table_access_event as ( select user_name, query_start_time, split_part(boa.value:objectName, '.', 3) as table_name from access_history hist, lateral flatten(input => hist.base_objects_accessed) boa where boa.value:objectDomain = 'Table' ), uu_per_table as ( select table_name, count(distinct user_name) as uu from table_access_event where query_start_time between %s::date and %s::date group by table_name ) select st.table_name as table_name, nvl(uu, 0) as uu from summary_table st left join uu_per_table ut on st.table_name = ut.table_name order by uu desc, table_name;
ãã®ã¯ã¨ãªãä½ããã£ã¦ãããã§ãããã¾ãtable_access_event
å¼ã§ã¯ACCESS_HISTORYãã¥ã¼ãããã¼ãã«ã¸ã®ã¢ã¯ã»ã¹ãå
¨ã¦æ½åºãã¦ãã¾ãã
ã¢ã¯ã»ã¹å¯¾è±¡ã¯base_objects_accessed
ã«ã©ã ã§ç¹å®ã§ãã¾ããããã®ã«ã©ã ã¯VARIANTåã®é
åã«ãªã£ã¦ãã¾ããVARIANTã¯Snowflakeã«ãããåæ§é åãã¼ã¿åã§ããã¤ã¾ãJSONã®ãããªãã®ã§ãã1ã¤ã®ã¯ã¨ãªã§ã¯è¤æ°ã®ãã¼ãã«ããã¥ã¼ãªã©ï¼Snowflakeã§ã¯ããããã¾ã¨ãã¦ãªãã¸ã§ã¯ãã¨å¼ã¶ããã§ãï¼ã«ã¢ã¯ã»ã¹ãããã¨ãããã®ã§ããã®æ
å ±ãå
¨ã¦é
åã®å½¢ã§è©°ãè¾¼ãã§ããããã§ãã
é
åãå解ãããã¨ãã«Snowflakeã§ã¯FLATTENé¢æ°ã使ãã¾ããå解ããçµæã®ãã¡ä»åã¯ãã¼ãã«ã¸ã®ã¢ã¯ã»ã¹ã ãã«é¢å¿ãããã®ã§ãwhere boa.value:objectDomain = 'Table'
ã§ãã£ã«ã¿ãã¦ãã¾ãã
split_part(boa.value:objectName, '.', 3) as table_name
ã¯å°ãææããã¾ãããSnowflakeã«ãããå®å
¨ä¿®é£¾ããããªãã¸ã§ã¯ãå㯠<ãã¼ã¿ãã¼ã¹å>.<ã¹ãã¼ãå>.<ãªãã¸ã§ã¯ãå>
ã®å½¢å¼ãã¨ããã.
ã§å解ãã¦3çªç®ãã¨ã£ã¦ãã¾ãããSnowflakeã¯ã¯ãªã¼ããããã¨ã§ã»ã¼ä»»æã®æåãèå¥åã«ä½¿ããã¨ãã§ãã¾ãããããã£ã¦.
ã§ã®åå²ã¯ä¸æ£ç¢ºã§ãããä»åã®ãã¢ã®ç¯å²ã§ã¯åé¡ã«ãªããªãã®ã§ãã®ã¾ã¾ã«ãã¦ããã¾ãã
summary_tables
å¼ã§ã¯æ½åºå¯¾è±¡ã®ãã¼ãã«ãæå®ãã¦ãã¾ããä»åã¯summary
ã¨ããã¹ãã¼ãã«ãããã¼ãã«ã®ãã¡åé¤ããã¦ããªããã®ã対象ã«ãã¾ãã
â» ãã®SQLã¯ç¤¾å ãã¼ã¿ã®é½åä¸ããã¤ãã®æ¹å¤ãè¡ã£ã¦ãã¾ãï¼çµæã«æ¬è³ªçãªå½±é¿ã¯ããã¾ããï¼ã
ãã®ä»
- ç°å¢å¤æ°ã®èªã¿åºãã«ã¯dotenvã使ã£ã¦ãã¾ã
%s::date
ã¯CASTå¼ã«ããDATEåã¸ã®åå¤æã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ã¼ã§ãã%s
ã¯SQLçºè¡ã®ããã®ãã¬ã¼ã¹ãã«ãã§ãããããã¯PEP-249ã®ä»æ§ã«åºã¥ãã¦ãã¾ãã
åºåä¾
ä¾ãã°ãããã£ãåºåãå¾ããã¾ããããã¼ãã«åã«ã¯å¤é¨ã«åºããªãé¨åããã£ãã®ã§é»å¡ãã«ããã°ã©ãã®ä¸ã®æ¹ã ãåãåã£ããã®ãæ²è¼ãã¦ãã¾ãã

横軸ã¯è¦åãã¦ãã¾ããæ大å¤14ã§ããããã¤ãã®é¨ç½²ã®åææ å½è ã«æ¯æ¥æ´»ç¨ããã¦ããããªãã¼ãã«ãããä¸æ¹ã§ãåç §ãã¾ããªãã¼ãã«ãè¤æ°è¦ã¤ããã¾ããã
å®ã¯ãã®ææ³ã§ã«ãã¼ã§ããªãç¹ã«ã¤ãã¦
çè ã®ç¥ãéãã«ããã¦ãACCESS_HISTORYããã®ã¾ã¾ä½¿ãã ãã ã¨ããããä¸é½åãããäºãããã£ã¦ãã¾ãã
ä¸ã¤ã¯ã¿ã¹ã¯ã§ããSnowflakeã«ã¯SQLãå®æå®è¡ããã¹ã±ã¸ã¥ã¼ã©çãªæ©è½ï¼ã¿ã¹ã¯ï¼ãããã®ã§ãããã¿ã¹ã¯ã®å®è¡ã¯ç¹å¥ãªã¦ã¼ã¶ã§ããSYSTEMã«ãã£ã¦å®è¡ããã¾ãããã®ã¨ãACCESS_HISTORYã«ãSYSTEMã¦ã¼ã¶ãè¨é²ããã¾ãããã®æåã¯ããæå³ãã£ã¨ãã§ã¯ãããã®ã®ãå©ç¨å®æ ãææ¡ãããã¨ããä»åã®ç®çã«ã¯åãã¾ãããç¥ãããã®ã¯ã¿ã¹ã¯ãç»é²ãã¦ãã®ãã¼ãã«ãåç §ãããã¨èããã¦ã¼ã¶æ°ã§ãã£ã¦ãSYSTEMã¦ã¼ã¶ãå®è¡ããäºå®ã§ã¯ãªãããã§ãã
ããä¸ã¤ã¯Snowsightã§ããSnowsightã®å é¨çãªæåã¨ãã¦ãWORKSHEETS_APP_USERã¨ããã¦ã¼ã¶ãçµç±ãã¦ã¯ã¨ãªãçºè¡ãããã¨ãããããã§ãã
ããã®è©±ã«ããã¨ãã©ããå é¨çãªãã£ãã·ã¥çã«ä½¿ã£ã¦ãããããã§ããããããªãã¨åç §ãã©ãæ°ããã°ããã®ãèªæã§ã¯ãªããªã£ã¦ãã¾ãã¾ãã
ã¾ã¨ã
- Streamlitã§ç°¡åãªãã¢ãµã¤ããæ¸ãã¾ãã
- ããã¾ãã«ã¯ACCESS_HISTORYãã¥ã¼ã¯æç¨ãªæ å ±ãè©°ã¾ã£ã¦ãã¦å©ç¨å®æ ã®ææ¡ã«æçããã§ããã
ãã ããSnowflakeã®ä½¿ãæ¹ã«ãã£ã¦ã¯ç´ ç´ãªå©ç¨å®æ 調æ»ã«é£ãããé¨åãããã¾ããããã®è¾ºãã¯æå ã§è»½ãå®é¨ããéãã ã¨æåãããããããªãã£ãã®ã§ãããã·ã¥ãã¼ããæ´åããã«ã¯è¦èª¿æ»ï¼ãããã¯Snowflake社ã¸ã®åãåãããå¿ è¦ï¼ãªã¨ããããããã¾ããã
- ãã¼ã¿ã®éè¦ã¯ãã¤ã®éã«ãå¤åãã¦ããåé¡
- åèä¾: ç¾å®ã®å©ç¨ç¶æ³ããã¼ã¿ããã¸ã¡ã³ãã«æ´»ãã
- ãã®è¨äºã®ãé¡
- Streamlit
- Snowflakeã«ãããå©ç¨ç¶æ³ã®åå¾
- StreamlitããSnowflakeã®SQLãçºè¡ãã
- å®ã¯ãã®ææ³ã§ã«ãã¼ã§ããªãç¹ã«ã¤ãã¦
- ã¾ã¨ã
- ãã¡ãããèªååã®å¾¹åºãªã©ãå°ãªã人æ°ã§å¹ççã«ææãåºãããã«ã§ãããã¨ã¯ããããããåæã§ã¯ããã¾ããâ©
- ãã¶ãæ¬å½ã¯å¯ä½ç¨ãæé¤ããã»ããæ¯ãèããåç´ã«ãªã£ã¦ä¾¿å©ãªã¯ãï¼ä¾ãã°ä¹±æ°ã®ã·ã¼ãå¤ã¯åºå®ããã»ããããããããã¾ããï¼ã§ããããã®ãµã³ãã«ã§ã¯ææããã¦ãã¾ããâ©