如何在Pyspark Snowflake Connector中正确使用PURGE配置选项
PySpark-Snowflake connector purge配置失效问题解决
根因说明
当前配置中usestagingtable设置为OFF,此时连接器会使用会话级临时内部阶段中转写入数据,这类临时阶段属于Snowflake会话专属资源,会话结束后会被自动回收,不受purge参数控制,因此即使设置purge=off临时文件仍然会被删除。
purge参数正确生效条件
purge参数仅用于控制COPY INTO操作完成后,持久化阶段(自定义内部/外部阶段) 内的源文件是否删除,需满足以下两个前提:
- 配置中不设置
usestagingtable=OFF,保持该参数默认值ON使用临时表中转逻辑 - 显式指定提前创建好的自定义持久化阶段作为数据中转存储,不使用连接器自动生成的临时阶段
正确配置示例
首先在Snowflake对应库schema下创建持久化自定义阶段,再调整写入参数如下:
df.write.mode('overwrite') \ .format(SNOWFLAKE_SOURCE_NAME) \ .options(sfURL=[url], sfUser=[user], sfDatabase=[database], sfSchema=[schema], sfWarehouse=[warehouse], sfRole=[role], pem_private_key=pkb) \ .option('truncate_table', 'ON') \ .option('continue_on_error', 'on') \ .option('purge', 'off') \ # 替换为你创建的自定义持久阶段名 .option('stage', 'YOUR_CUSTOM_PERSIST_STAGE') \ .option('dbtable', [dbtable]) \ .save()
补充说明
- purge参数值大小写不敏感,
off、OFF、false均可生效 - 若仅需保留加载出错的异常行文件,可额外配置
validation_mode参数将错误数据定向存储到指定路径
内容的提问来源于stack exchange,提问作者Debanjan Ghosh
相关产品推荐
相关产品推荐

