在Talend中使用Snowflake组件时出现的问题

时间:2018-01-05 07:35:54

标签: talend snowflake-datawarehouse

要将Ms sql server 2008中的数据传输到Snowflake,我使用了talend,但每次出现错误时

pm2 restart pid && pm2 log pid
pm2 ls
pm2 log pid

我的雪花数据库中确实存在该列,但由于列不存在,我仍然收到错误

在分析Talend在雪花中执行的查询时,我发现它试图创建一个临时表来存储数据,但这样做会选择“”双引号之间的表中的所有列,因此错误来自无效标识符“”columnname“ “

如果我在没有双引号的情况下手动执行相同的查询,它的工作正常,请您告诉我们这个问题的解决方法

由雪花中的talend执行的查询供您参考

java.io.IOException: net.snowflake.client.loader.Loader$ConnectionError: State: CREATE_TEMP_TABLE, SQL compilation error: error line 1 at position 68
invalid identifier '"columnname"'
                at org.talend.components.snowflake.runtime.SnowflakeWriter.close(SnowflakeWriter.java:397)
                at org.talend.components.snowflake.runtime.SnowflakeWriter.close(SnowflakeWriter.java:52)
                at local_project.load_jobnotes_0_1.Load_Jobnotes.tMSSqlInput_1Process(Load_Jobnotes.java:2684)
                at local_project.load_jobnotes_0_1.Load_Jobnotes.runJobInTOS(Load_Jobnotes.java:3435)
                at local_project.load_jobnotes_0_1.Load_Jobnotes.main(Load_Jobnotes.java:2978)
Caused by: net.snowflake.client.loader.Loader$ConnectionError: State: CREATE_TEMP_TABLE, SQL compilation error: error line 1 at position 68
invalid identifier '"ID"'
                at net.snowflake.client.loader.ProcessQueue.run(ProcessQueue.java:349)
                at java.lang.Thread.run(Thread.java:748)
Caused by: net.snowflake.client.jdbc.SnowflakeSQLException: SQL compilation error: error line 1 at position 68

2 个答案:

答案 0 :(得分:0)

问题很可能是由于Snowflake中的对象名称与通过连接器发送的内容不匹配。在Snowflake侧,所有对象名称都存储为UPPER CASE。建议你尝试传递COLUMN1,COLUMN2等,看看是否有效。

您也可以尝试将QUOTED_IDENTIFIERS_IGNORE_CASE设置为true,这可能会有所帮助。

答案 1 :(得分:0)

我发现此问题是由于Talend未正确应用混合大小写数据库或架构名称。我通过更新Snowflake连接器角色参数并添加了诸如此屏幕截图之类的内容来发现黑客攻击:

Screenshot