雪花:通过插入值添加多个值时面临问题

Posted

技术标签:

【中文标题】雪花:通过插入值添加多个值时面临问题【英文标题】:Snowflake : Facing issues while adding multiple values through insert into values 【发布时间】:2021-03-12 10:17:14 【问题描述】:

我正在尝试使用“插入值”语句在雪花表中添加多行。

这里是创建表语句:

create table table1(col1 float);

我正在使用以下命令插入多行:

insert into table1(col1) values (-3.4E20),(3.4E-20);

我收到类似的错误

“无法识别数值'-340000000000000000000'”

另一方面,如果我尝试分别插入两行,它会成功。

插入命令:

insert into table1(col1) values (-3.4E20);

insert into table1(col1) values (3.4E-20);

你能帮我找出多行插入命令的问题吗?

任何建议,帮助都会非常有帮助。

【问题讨论】:

【参考方案1】:

扩展 Marcel 的答案,此查询产生相同的错误:

select $1
from values (-3.4E20), (3.4E-20);

这个解决了它:

select $1
from values (-3.4E20::float), (3.4E-20);

从查询中可以看出,解决方案是将信息添加到文字数字中,这样 Snowflake 就不会对可能的类型感到困惑。

【讨论】:

右费利佩。但我一直在寻找更通用的解决方案。因为如果我确定我的数据将始终是浮点数或任何其他数据类型,我就可以做到。但是在生产工作负载中,如果我必须为所有数据类型和不同数据重用代码,它必须无缝工作,并且不必为第一条记录推断数据类型。我猜它目前是雪花的一个限制。 我假设在生产中您不需要运行像 insert into table1(col1) values (-3.4E20); 这样的语句——如果您这样做,您能否提供更多关于特定用例的信息,以便我们可以在生产中加强它? 没错,Felipe,那是当时的一种用例,我们现在已经恢复到更强大的替代方案。感谢您的回复。【参考方案2】:

我不确定这是否与您的问题有关,但也许它有助于找到答案。

根据文档,您必须确保插入值的数据类型在各行中保持一致,因为服务器将第一行的数据类型作为指导。所以...如果您的第一个和第二个值子句中的数据类型不同(可能是由于上述值之一的某些自动转换),则组合查询将失败。即使它们与表列的数据类型匹配!

链接:https://docs.snowflake.com/en/sql-reference/sql/insert.html#multi-row-insert-using-explicitly-specified-values

【讨论】:

感谢马塞尔的回复。我已经浏览了文档。但这并没有帮助我澄清我的疑问,因为您看到我在第一个值本身就遇到了错误。并且这两个值的类型相同,并且根据数据类型也是有效值。

以上是关于雪花:通过插入值添加多个值时面临问题的主要内容,如果未能解决你的问题,请参考以下文章

尝试获取不同值时雪花 JSON 未知关键字错误

仅当最小值小于另一表中的值时才在一个表中加入值 - 雪花

使用雪花中的存储过程将值插入表中

2个雪花表,数据相同,大小不同

雪花表中json数据的解析字段将多行插入到新的雪花表中

使用雪花中的合并将值插入表并根据条件删除行