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

如何在Snowflake中配置任务将表数据导出为CSV并邮件发送

修改Snowflake Python存储过程以发送CSV格式邮件内容

以下是调整后的存储过程,可实现将指定表的查询结果转为CSV格式并作为附件发送给指定收件人:

with csv_email_results as procedure()
returns string
language python
packages = ('snowflake-snowpark-python')
handler = 'send_csv_email'
runtime_version=3.8
as
$$
def send_csv_email(session):
    # 查询目标表数据并转为CSV字符串(不含索引列)
    df = session.sql("select * from table").to_pandas()
    csv_content = df.to_csv(index=False)
    
    # 将CSV内容编码为Base64,满足邮件附件传输要求
    encoded_csv = session.sql(f"SELECT UTIL$ENCODE_BASE64('{csv_content}')").collect()[0][0]
    
    # 构造带附件的MIME格式邮件体
    email_body = f"""
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="csv_boundary"

--csv_boundary
Content-Type: text/plain; charset=utf-8

任务A已完成,查询结果CSV附件已附上。

--csv_boundary
Content-Type: text/csv; name="query_results.csv"
Content-Disposition: attachment; filename="query_results.csv"
Content-Transfer-Encoding: base64

{encoded_csv}
--csv_boundary--
"""
    
    # 调用内置函数发送邮件
    session.call('system$send_email',
        'my_email_int',
        'test@email.com',
        'Email Alert: Task A has finished.',
        email_body)
    
    return "邮件发送成功"
$$
call csv_email_results();

关键修改说明:

  • 移除冗余依赖:删除不需要的tabulate包,仅保留snowflake-snowpark-python
  • 替换格式生成逻辑:把to_markdown()改为to_csv(index=False),生成纯CSV格式内容
  • 适配邮件附件要求:用Snowflake内置的UTIL$ENCODE_BASE64对CSV内容编码,避免传输乱码
  • 重构邮件体结构:采用MIME多部分格式,同时包含纯文本说明和CSV附件,确保收件人能正常下载附件

注意事项:

  • 确认已配置的电子邮件集成my_email_int支持发送带附件的邮件
  • 若表数据量过大,需留意存储过程的内存限制,必要时可拆分数据分批处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:52:43