“无法识别数值''” - 哪一列?

Posted

技术标签:

【中文标题】“无法识别数值\'\'” - 哪一列?【英文标题】:"Numeric value '' is not recognized" - what column?“无法识别数值''” - 哪一列? 【发布时间】:2020-10-20 21:53:34 【问题描述】:

我正在尝试将临时表中的数据插入到主表中。该表有近 300 列,混合了数据类型的 Varchars、Integers、Decimals、Dates 等。

Snowflake 给出“Numeric value '' is not Recognized”的无用错误消息

我已经检查并删除了查询的各个部分,以尝试隔离它的来源。经过几个小时并切割每一列,它仍在发生。

有谁知道 Snowflake 诊断查询(如 Redshift 有),它可以告诉我一个特定列问题发生在哪里?

【问题讨论】:

【参考方案1】:

不幸的是,不是你现在的位置。如果您返回加载数据的 COPY INTO,您将能够使用 VALIDATE() 函数来获取更好的记录和字节偏移级别的信息。

我会查询您的暂存表中的数字字段并查找空白,或者您可以使用 try_to_number() 函数包装所有用于数字字段的字段。有点乏味,但如果你没有很多数字,可能还不错。

https://docs.snowflake.com/en/sql-reference/functions/try_to_decimal.html

请注意,当您暂存时,您应该尝试使用 NULL_IF 选项来消除坏字符和/或尝试使用暂存表中的实际数据类型将它们加载到暂存中,这样您就可以利用 VALIDATE( ) 函数以在加载到 Snowflake 之前确保数据类型正确。

【讨论】:

【参考方案2】:

使用 try_to_number() 和/或 try_to_decimal() 查询表的数字和小数字段并使用减号来获取差异

从@stage中选择$1,$2,...$300

减号

从@stage 中选择 $1,try_to_number($2)...$300

如果任何数字字段有一个无法转换的字符串,那么它将为空,然后减号应该返回那些有问题的行。一旦你得到这些行,然后尝试分析结果集中的列是否有错误。

【讨论】:

以上是关于“无法识别数值''” - 哪一列?的主要内容,如果未能解决你的问题,请参考以下文章

JasperReports - 导出到 Excel 时无法识别数值

Snowflake Substring Concat 问题:无法识别数值“”

我的 CSV 文件带有双引号括起来的字段 - 无法识别数值“12131”

如何识别哪一列已更改[重复]

由于数据中的“雪花问题”导致部分加载

双击 ListView 的一行时选择了哪一列