我需要创建一个表单来对供应商进行从 1 到 10 的评分,添加自由文本评论并保存 结果到我命名为“RESULTAT_SUPPLIERS”的表中。然而,这个表与我存放的表的架构不同,只是为了让您知道,我使用 SFC_SAMPLES.TPCH_SF1。
# Import libraries
from snowflake.snowpark.context import get_active_session
from snowflake.snowpark.functions import sum, col, to_date, year
import calendar
import altair as alt
import streamlit as st
import pandas as pd
import snowflake.snowpark as snowpark
# Set page config
st.set_page_config(layout="wide")
# Get current session
session = get_active_session()
def load_data():
# Load Supplier data
snow_df_supplier = session.table("SFC_SAMPLES.TPCH_SF1.SUPPLIER")
# Load Line Item data
snow_df_lineitem = session.table("SFC_SAMPLES.TPCH_SF1.LINEITEM")
return snow_df_supplier, snow_df_lineitem
# Load and cache data
snow_df_supplier, snow_df_lineitem = load_data()
# Sidebar - Supplier filter
st.sidebar.header('Supplier Filter')
selected_supplier = st.sidebar.selectbox('Select Supplier:', snow_df_supplier.select('S_NAME').distinct().collect())
filtered_supplier_df = snow_df_supplier.filter(col('S_NAME') == selected_supplier)
# Display supplier information
st.header(f"Supplier Information - {selected_supplier}")
st.table(filtered_supplier_df.select('S_NAME', 'S_ADDRESS','S_NATIONKEY','S_PHONE').to_pandas())
# Display revenue year over year with a bar chart for the selected supplier(s)
st.header(f"Revenue Year Over Year for Selected Supplier")
# Format the L_COMMITDATE to 'YYYY-MM-DD'
snow_df_lineitem = snow_df_lineitem.withColumn('L_COMMITDATE', to_date(snow_df_lineitem['L_COMMITDATE']))
# Filter data for the selected supplier
filtered_lineitem_df = snow_df_lineitem.filter(col('L_SUPPKEY') == filtered_supplier_df.select('S_SUPPKEY').collect()[0]['S_SUPPKEY'])
# Extract the year from L_COMMITDATE
filtered_lineitem_df = filtered_lineitem_df.withColumn('Year', year('L_COMMITDATE'))
# Calculate revenue by grouping by Year and summing L_EXTENDEDPRICE
revenue_df = filtered_lineitem_df.groupBy('Year').agg(sum('L_EXTENDEDPRICE').alias('REVENUE')).toPandas()
st.write(revenue_df)
# Display Altair bar chart
chart = alt.Chart(revenue_df).mark_bar().encode(
x='Year:O',
y='REVENUE',
tooltip=['Year:O', 'REVENUE']
).properties(width=800, height=400)
st.altair_chart(chart, use_container_width=True)
# Streamlit config
st.header("Supplier Grading Form")
# Get supplier name from the user
selected_supplier = st.text_input('Supplier Name:')
# Get grade and comment from the user
grade = st.slider('Grade (1 to 10):', min_value=1, max_value=10, step=1)
comment = st.text_area('Free Text Comment:')
submit_button = st.button('❄️ Submit to Snowflake')
# Connect to Snowflake
session = snowpark.session._get_active_session()
# Setup the ability to save user-entered allocations and predicted value back to Snowflake
if submit_button:
with st.spinner("Making snowflakes..."):
# Prepare data to insert into the table
data_to_insert = [(selected_supplier, grade, comment)]
columns = ['Supplier', 'Grade', 'Comment']
insert_df = pd.DataFrame(data_to_insert, columns=columns)
# Write data to Snowflake table
session.write_pandas(insert_df, "M_HENRY_DB.PUBLIC.RESULTAT_SUPPLIERS")
st.success("✅ Successfully wrote the grading to your Snowflake account!")
st.snow()
返回给我:
SnowparkPandasException: (1114): Cannot write pandas DataFrame to table "M_HENRY_DB.PUBLIC.RESULTAT_SUPPLIERS" because it does not exist. Create table before trying to write a pandas DataFrame
但是,我的另一张桌子上有这张桌子,所以我不明白。