使用存储过程从SFTP向Snowflake Stage加载数据时出现语法错误
Snowflake加载SFTP数据至Stage时
unexpected 'sftbdir'错误排查与解决 问题概述
将SFTP数据加载到预创建的Snowflake Stage过程中,执行自定义存储过程时持续触发unexpected 'sftbdir'错误。已尝试用双引号包裹含空格的文件名,但问题未解决。操作流程为:创建文件格式 → 创建Stage → 调用public.load_from_sftp存储过程。
已执行代码
CREATE OR REPLACE FILE FORMAT GGG_COMMON_BASE.pipo_xref_csv type = 'csv', COMPRESSION = 'AUTO' FIELD_DELIMITER = ',', SKIP_HEADER = 1, -- 含表头设为1,无表头设为0 SKIP_BLANK_LINES = TRUE, DATE_FORMAT = 'AUTO'; CREATE OR REPLACE STAGE GGG_COMMON_BASE.PIPO_XREF_STAGE file_format = pipo_xref_csv; CALL public.load_from_sftp(''@ggg_common_base.pipo_xref_stage'',''sftpdir'',''/dorp_rebranding'',''"Phase In Phase Out XReference File - SKU Creation"'',''b2bmft.xcompany.com'',2223);
错误原因分析
- 参数转义错误:CALL语句中使用了双单引号
''(SQL中用于转义单引号),但此处参数无需嵌套单引号,多余的转义导致SQL解析器无法正确识别参数边界,将sftpdir误判为语法错误元素。 - 文件名转义错误:使用了HTML转义符
"而非Snowflake SQL支持的单引号包裹文件名,导致文件名参数解析异常。
解决步骤
1. 修正CALL语句参数格式
移除多余的双单引号,直接用单引号包裹所有参数,文件名保留空格无需额外转义:
CALL public.load_from_sftp('@ggg_common_base.pipo_xref_stage', 'sftpdir', '/dorp_rebranding', 'Phase In Phase Out XReference File - SKU Creation', 'b2bmft.xcompany.com', 2223);
2. 验证存储过程参数定义
确认load_from_sftp存储过程的参数顺序与传入值完全匹配,避免因参数错位导致的语法解析错误。例如检查sftpdir是否为存储过程预期的参数类型(如SFTP用户名、目录别名等)。
3. 检查Stage配置(若为外部Stage)
确保GGG_COMMON_BASE.PIPO_XREF_STAGE已正确关联SFTP集成,包含必要的认证信息(如私钥、用户名),避免因连接配置缺失导致的参数解析异常。
内容的提问来源于stack exchange,提问作者XCCH004
相关产品推荐
相关产品推荐

