我在Redshift中有一个包含大约200列的临时表。我首先将数据从S3复制到此表,然后使用大型插入从查询中将数据从此表复制到另一个表。登台表中的大多数字段都是varchar,我在查询中将其转换为正确的数据类型。
我在临时表中得到一些导致数字溢出的字段 -
org.postgresql.util.PSQLException: ERROR: Numeric data overflow (addition)
Detail:
-----------------------------------------------
error: Numeric data overflow (addition)
code: 1058
context:
query: 9620240
location: numeric.hpp:112
process: query1_194 [pid=680]
我怎样才能找到导致此溢出的字段,以便我可以清理输入或更正我的查询。
答案 0 :(得分:0)
我使用Netezza,它也可以使用正则表达式函数来渲染行。幸运的是,redshift也支持regexp。请看一下
http://docs.aws.amazon.com/redshift/latest/dg/REGEXP_COUNT.html
因此,在您的情况下,想法是在where子句中使用regexp,这样您就可以找到哪些值超出了插入期间发生的数值转换。问题是找到识别数据,允许您确定物理文件中的哪些行导致问题。您可以创建另一个数据副本并在临时表中创建行号。使用临时表作为分析源。你要进入的数字字段有多大?如果您要将多个列强制转换为数字,则可能需要针对多个列进行此分析。