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 中找到我的 Snowflake 账单?