“无法识别数值''” - 哪一列?
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 问题:无法识别数值“”