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

请求提供基于Snowpark Python API创建并注册向量化UDTF的示例

请求提供基于Snowpark Python API创建并注册向量化UDTF的示例

当然可以!我给你整理了一个完整的Snowpark Python向量化UDTF创建及注册的代码示例,附带关键步骤的说明,你可以直接参考:

一、前置准备

  • 确保你已经配置好Snowpark Python环境,并且成功连接到Snowflake账户
  • 熟悉Snowpark的基本会话(Session)创建方式

二、完整代码示例

# 导入必要的Snowpark模块
from snowflake.snowpark import Session
from snowflake.snowpark.types import StructType, StructField, IntegerType, FloatType
from snowflake.snowpark.udtf import VectorizedUDTF

# 1. 创建Snowpark会话(请替换为你的实际账户信息)
connection_parameters = {
    "account": "你的账户名",
    "user": "你的用户名",
    "password": "你的密码",
    "warehouse": "你的仓库名",
    "database": "你的数据库名",
    "schema": "你的模式名"
}
session = Session.builder.configs(connection_parameters).create()

# 2. 定义向量化UDTF类
class VectorizedMathUDTF(VectorizedUDTF):
    # 定义UDTF的输入schema
    input_types = StructType([
        StructField("NUM1", IntegerType()),
        StructField("NUM2", FloatType())
    ])
    
    # 定义UDTF的输出schema
    output_types = StructType([
        StructField("SUM_RESULT", FloatType()),
        StructField("PROD_RESULT", FloatType())
    ])
    
    # 定义向量化处理的核心方法
    def process(self, batch):
        # 从输入批次中获取列数据(批量处理,而非单条记录)
        num1_col = batch["NUM1"]
        num2_col = batch["NUM2"]
        
        # 执行向量化计算
        sum_result = num1_col + num2_col
        prod_result = num1_col * num2_col
        
        # 返回结果(需与output_types对应)
        return (sum_result, prod_result)

# 3. 注册UDTF到Snowflake
session.udtf.register(
    VectorizedMathUDTF,
    name="VECTORIZED_MATH_UDTF",
    is_permanent=True,
    stage_location="@你的_stage位置",  # 需提前创建好对应的stage
    replace=True
)

# 4. 测试使用注册好的UDTF
# 创建测试数据
test_df = session.create_dataframe(
    data=[(1, 2.5), (3, 4.0), (5, 6.2)],
    schema=["NUM1", "NUM2"]
)

# 使用UDTF(LATERAL JOIN方式调用)
result_df = test_df.join_table_function(
    session.table_function("VECTORIZED_MATH_UDTF", test_df["NUM1"], test_df["NUM2"])
)

# 展示结果
result_df.show()

# 关闭会话
session.close()

三、关键说明

  • 向量化UDTF的核心优势:继承VectorizedUDTF基类后,process方法接收的batch是批量列数据,支持numpy风格的向量化运算,相比逐行处理的UDTF性能提升明显。
  • Schema匹配要求:input_types和output_types必须严格对应输入输出的数据结构,确保Snowflake能正确解析数据类型。
  • 永久注册注意事项:设置is_permanent=True时,必须指定stage_location来存储UDTF的代码文件,且该stage需要提前创建完成;replace=True表示如果同名UDTF已存在则直接覆盖。
  • 标准调用方式:在Snowpark中需要通过join_table_function结合table_function来调用UDTF,这是符合Snowflake规范的使用方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:20:27