2014-08-29 70 views
2

我有一个在Redshift中有大约200列的临时表。我首先将数据从S3拷贝到这个表中,然后将数据从这个表中复制到另一个表中,使用大的插入从中选择查询。登台表中的大部分字段都是varchar,我将其转换为查询中正确的数据类型。查找哪个列在查询中导致postgresql异常。

我得到在临时表中的一些领域,这是造成数字溢出 -

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

我使用Netezza,它也可以使用正则表达式函数来刷出行。幸运的是,redshift也支持regexp。请看看

http://docs.aws.amazon.com/redshift/latest/dg/REGEXP_COUNT.html

所以你的情况的想法是使用正则表达式的where子句中并以这种方式,你可以找到哪些值超过插入过程中出现的数字转换。该问题将找到识别数据,使您可以确定物理文件中的哪些行导致问题。您可以创建另一个数据副本并在临时表中创建行号。使用临时表作为分析来源。您要进入的数字字段有多大?如果您将多个列转换为数字,则可能需要对多个列进行此分析。