You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowpark Python代码在Snowflake中手动临时运行时如何获取用户输入

Snowpark Python代码在Snowflake中手动临时运行时如何获取用户输入

嗨,我完全懂你遇到的问题——在Snowflake里跑Snowpark Python代码时,手动临时执行需要用户输入参数,但用input()根本不管用,代码还一直卡着。毕竟Snowflake的Python运行环境不是交互式的,这和你之前用Databricks widgets的场景不太一样。下面给你两个靠谱的解决方案:

方案1:用存储过程的输入参数(推荐)

这是Snowflake里最常用的参数传递方式,把你的Snowpark代码封装成带默认值的存储过程,手动调用时传指定参数,调度运行时用默认逻辑自动计算日期。

举个具体的实现例子:

CREATE OR REPLACE PROCEDURE run_adhoc_job(start_date STRING DEFAULT NULL, end_date STRING DEFAULT NULL)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = '3.10'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'main'
AS
$$
from snowflake.snowpark import Session
from datetime import datetime, timedelta

def main(session: Session, start_date: str, end_date: str):
    # 处理日期逻辑:没传参数就用默认规则计算
    if not start_date:
        start_date = (datetime.now() - timedelta(days=2)).strftime('%Y-%m-%d')
    if not end_date:
        end_date = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
    
    # 这里替换成你的实际业务逻辑,比如用日期过滤数据
    session.sql(f"SELECT * FROM your_target_table WHERE date_column BETWEEN '{start_date}' AND '{end_date}'").show()
    
    return f"任务执行完成!日期范围:{start_date} 至 {end_date}"
$$;
  • 手动临时运行:直接传指定日期参数调用
CALL run_adhoc_job('2024-12-01', '2024-12-02');
  • 调度自动运行:不传参数,代码自动用默认逻辑计算日期
CALL run_adhoc_job();

这个方案完全适配Snowflake的运行模式,不管手动还是调度都能无缝切换,而且从根本上解决了input()的问题——因为Snowflake的Python runtime是非交互式的,没有终端接收输入,所以input()会一直阻塞等待,导致代码无限运行。

方案2:用Snowflake Streamlit(可视化输入界面)

如果想要更友好的用户输入体验,比如可视化日期选择器,可以用Snowflake集成的Streamlit做一个简单的Web界面,让用户直观输入参数后触发代码执行。

示例代码如下:

import streamlit as st
from snowflake.snowpark import Session
from datetime import datetime, timedelta

# 自动建立Snowpark会话(利用Snowflake内置认证)
session = Session.builder.getOrCreate()

st.title("临时任务运行器")

# 设置默认日期,和你的业务逻辑一致
default_start_date = datetime.now() - timedelta(days=2)
default_end_date = datetime.now() - timedelta(days=1)

# 生成日期输入组件
start_date = st.date_input("开始日期", value=default_start_date)
end_date = st.date_input("结束日期", value=default_end_date)

if st.button("执行任务"):
    # 转换日期格式为Snowflake兼容的字符串
    start_str = start_date.strftime('%Y-%m-%d')
    end_str = end_date.strftime('%Y-%m-%d')
    
    # 执行你的业务逻辑
    query_result = session.sql(f"SELECT * FROM your_target_table WHERE date_column BETWEEN '{start_str}' AND '{end_str}'").collect()
    
    st.success(f"任务执行成功!共获取 {len(query_result)} 条数据")
    st.dataframe(query_result)

把这个代码部署到Snowflake Streamlit后,用户打开界面就能选择日期,点击按钮直接触发运行,非常适合需要可视化操作的场景。

备注:内容来源于stack exchange,提问作者rainingdistros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:13:12