我有一个 Alteryx 工作流程,它从雪花表中选择所有内容,向表中添加一个 RecordId 列,然后将结果上传回雪花并使用新名称。
问题是:Snowflake 无法识别 RecordID 列。
如果我使用 SELECT * FROM NUMBERED_TABLE
,它会成功读取整个表,显示每个字段,包括 RecordID。
但是如果我尝试使用 SELECT RECORDID FROM NUMBERED_TABLE
进行选择,我会收到消息 SQL compilation error: error line 1 at position 7 invalid identifier 'RECORDID'
从用户界面来看,Snowflake 说该列确实被称为 RECORDID。
尝试重命名列也不起作用。它只是说 RECORDID 列不存在。
我已经尝试通过基于自身创建一个新表来重新创建该表,但它仍然无法识别它。
答案 0 :(得分:1)
查询是 SELECT RECORDID FROM NUMBERED_TABLE
,但您注意到有几次名称是 RecordID
。
Snowflake 对对象名称区分大小写,因此 RECORDID
和 RecordID
可以是同一个表中的两个不同列。 Snowflake 隐式大写对象名称,因此如果您运行查询 SELECT RecordID FROM NUMBERED_TABLE
,Snowflake 会将其隐式转换为 SELECT RECORDID FROM NUMBERED_TABLE
。如果列实际上是 RecordID
,它会报告它找不到 RECORDID
。如果您有大小写混合的列名,则防止隐式大写的方法是将对象名用双引号括起来:
select "RecordID" from NUMBERED_TABLE;
大多数 ETL 合作伙伴会将对象名称括在 Snowflake 的引号中。我已经看到 Alteryx 为 Snowflake 做这件事,所以如果它在源数据库中 RecordID
,这可能就是这里发生的事情。