Snowflake METADATA$FILENAME 关键字在 snowsql(Unix 命令提示符)中不起作用,但在雪花 UI 中起作用

Posted

技术标签:

【中文标题】Snowflake METADATA$FILENAME 关键字在 snowsql(Unix 命令提示符)中不起作用,但在雪花 UI 中起作用【英文标题】:Snowflake METADATA$FILENAME key word not working in snowsql (Unix cmd prompt) but working in snowflake UI 【发布时间】:2020-03-28 04:32:02 【问题描述】:

雪花代码

在 UI 中工作

从(选择 METADATA$FILENAME 作为 FILE_NM,METADATA$FILE_ROW_NUMBER 作为 ROW_NM,$1 作为 CSV_CONTENT,'P' 作为 LOAD_STATUS FROM @DWR_NA.GTR_STG.INT_REF_CSV_UNIX_STG 复制到 DWR_NA.GTR_STG.BASE_REF_CSV_STG(FILE_NM,ROW_NM,CSV_CONTENT,LOAD_STATUS) )

相同的命令在 Unix snowsql 中不起作用

snowsql -c SF_DWR_connection -d $SFDB -q "复制到 DWR_NA.GTR_STG.BASE_REF_CSV_STG (FILE_NM,ROW_NM,CSV_CONTENT,LOAD_STATUS) from (select METADATA$FILENAME as FILE_NM,METADATA$FILE_ROW_NUMBER as ROW_NM,$1 as CSV_CONTENT,' P' as LOAD_STATUS FROM @DWR_NA.GTR_STG.INT_REF_CSV_UNIX_STG);"

错误信息 000904 (42000):SQL 编译错误:位置 104 的错误行 1 无效标识符“元数据”

我用内部和外部阶段尝试了上述 sql,但没有工作。

请提出建议。

【问题讨论】:

作为一种解决方法,您可以尝试用IDENTIFIER('METADATA$FILENAME') 代替METADATA$FILENAME 已经解决了,你能标出正确答案吗? 【参考方案1】:

这只是转义双引号字符串中的 $ 字符。你需要把它们写成“\$”所以请试试这个:

snowsql -c SF_DWR_connection -d $SFDB -q "copy into
 DWR_NA.GTR_STG.BASE_REF_CSV_STG 
(FILE_NM,ROW_NM, CSV_CONTENT,LOAD_STATUS) from 
(select METADATA\$FILENAME as FILE_NM, 
METADATA\$FILE_ROW_NUMBER as ROW_NM, \$1 as CSV_CONTENT, 
'P' as LOAD_STATUS FROM @DWR_NA.GTR_STG.INT_REF_CSV_UNIX_STG);"

【讨论】:

我已按照您的建议更改了我的代码,它按预期工作。谢谢@Gokhan。非常感激。我只对 $1 应用了转义,并认为 METADATA$FILENAME 是特定于 SF 的关键,它不会在 Unix shell 中中断

以上是关于Snowflake METADATA$FILENAME 关键字在 snowsql(Unix 命令提示符)中不起作用,但在雪花 UI 中起作用的主要内容,如果未能解决你的问题,请参考以下文章

Snowflake 真正维护文件加载历史记录的时间有多长?

从 JSON 数组中的字符串中提取字段

如何在 Snowflake 中找到我的 Snowflake 账单?

Snowflake 是不是支持索引?

sqitch init snowflake 无法确定 Snowflake 账户名

Kafka Snowflake ConnectStandalone - 启动 Snowflake 连接器时出错