【问题标题】: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);

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

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

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案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

    【讨论】:

    • 感谢马塞尔的回复。我已经浏览了文档。但这并没有帮助我澄清我的疑问,因为您看到我在第一个值本身就遇到了错误。并且这两个值的类型相同,并且根据数据类型也是有效值。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2022-07-22
    • 1970-01-01
    • 2021-08-18
    • 2021-11-11
    • 1970-01-01
    • 2021-08-09
    • 2021-03-09
    相关资源
    最近更新 更多