【问题标题】:Finding which column caused the postgresql exception in a query.在查询中查找导致 postgresql 异常的列。
【发布时间】:2014-08-29 12:11:31
【问题描述】:

我在 Redshift 中有一个包含大约 200 列的临时表。我首先将数据从 S3 复制到此表,然后使用大型 insert into select from 查询将数据从该表复制到另一个表。 staging table 中的大多数字段都是 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]

我怎样才能找到导致此溢出的字段,以便清理输入或更正查询。


【问题讨论】:

    标签: sql postgresql amazon-redshift


    【解决方案1】:

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

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

    因此,您的想法是在 where 子句中使用正则表达式,这样您就可以找到哪些值超出了插入期间发生的数字转换。问题将是查找可让您确定物理文件中的哪些行导致问题的识别数据。您可以创建数据的另一个副本并在临时表中创建行号。使用临时表作为分析源。您要进入的数字字段有多大?如果您将多列转换为数字,则可能需要针对多于 1 列进行此分析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2016-03-18
      • 2011-06-08
      • 1970-01-01
      相关资源
      最近更新 更多