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

使用Snowpark开发Snowflake存储过程,能否返回DataFrame?求示例

Snowpark支持在存储过程中创建并返回DataFrame吗?

是的,Snowpark完全支持在Snowflake存储过程内部创建DataFrame,执行过滤、排序、关联等操作后返回结果。Snowpark的核心设计就是让开发者用Python、Scala或Java等编程语言,以DataFrame API的方式处理Snowflake中的数据,存储过程作为Snowflake的可编程对象,可直接集成Snowpark的能力。

实现示例(Python版)

以下是完整的Snowpark存储过程示例,包含DataFrame创建、过滤、关联、排序操作,并返回最终结果:

CREATE OR REPLACE PROCEDURE process_and_return_data()
RETURNS TABLE()
LANGUAGE PYTHON
RUNTIME_VERSION = '3.8'
PACKAGES = ('snowflake-snowpark-python')
HANDLER = 'run'
AS
$$
from snowflake.snowpark import Session
from snowflake.snowpark.functions import col

def run(session: Session):
    # 1. 从现有表加载数据生成DataFrame
    df_customers = session.table("CUSTOMERS")
    df_orders = session.table("ORDERS")
    
    # (可选)直接创建测试用DataFrame
    # sample_cust_data = [("1", "Alice", "NY"), ("2", "Bob", "CA"), ("3", "Charlie", "TX")]
    # df_customers = session.create_dataframe(sample_cust_data, schema=["CUST_ID", "NAME", "STATE"])
    # sample_order_data = [("101", "1", "2023-01-01", 100), ("102", "1", "2023-02-01", 200), ("103", "2", "2023-01-15", 150)]
    # df_orders = session.create_dataframe(sample_order_data, schema=["ORDER_ID", "CUST_ID", "ORDER_DATE", "AMOUNT"])
    
    # 2. 过滤:筛选纽约州的客户
    df_filtered = df_customers.filter(col("STATE") == "NY")
    
    # 3. 关联:客户表与订单表做内连接
    df_joined = df_filtered.join(df_orders, on="CUST_ID", join_type="inner")
    
    # 4. 排序:按订单日期降序排列
    df_sorted = df_joined.sort(col("ORDER_DATE").desc())
    
    # 5. 返回处理后的DataFrame
    return df_sorted
$$;

关键说明

  • 返回类型:存储过程声明RETURNS TABLE(),与Snowpark DataFrame的输出结构匹配,可直接返回表格式结果。
  • Session对象:Snowpark存储过程会自动传入Session实例,无需手动创建连接,直接用它操作Snowflake数据即可。
  • API兼容性:所有Snowpark DataFrame的核心API(filter、join、sort等)都能在存储过程内正常使用,操作会被Snowpark自动优化为Snowflake SQL执行。
  • 调用方式:创建完成后,直接调用存储过程查看结果:
    CALL process_and_return_data();
    

注意事项

  • 必须在存储过程的PACKAGES参数中指定snowflake-snowpark-python,这是运行Snowpark代码的依赖包。
  • 若手动创建DataFrame,需确保Schema定义与数据类型匹配,避免类型错误。
  • 复杂的DataFrame操作会被Snowpark自动优化为高效的Snowflake查询,无需手动编写SQL。

内容的提问来源于stack exchange,提问作者orellabac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:32:15