Amazon Redshift 错误地四舍五入 Numeric(9,4) 值

Posted

技术标签:

【中文标题】Amazon Redshift 错误地四舍五入 Numeric(9,4) 值【英文标题】:Amazon Redshift incorrectly rounding up Numeric(9,4) value 【发布时间】:2017-07-11 07:40:32 【问题描述】:

我试图加载数据,例如49.9999 进入 numeric(9,4) 列。如何通过复制命令将值四舍五入到 50.00

复制命令示例:

COPY <table_name> (PRICE_BAND_CODE,PRICE_BAND_DESC,PROD_LEVEL1_CODE,PRICE_BAND_LOWER,PRICE_BAND_UPPER,PRICE_BAND_SEQ)
FROM '<s3 path>/PriceBandDIM.gz'
credentials 'aws_access_key_id=xxxxxxxxxxxx;aws_secret_access_key=xxxxxxxxxxxxxxxx' 
delimiter '|'
IGNOREBLANKLINES EMPTYASNULL GZIP NULL AS '\000'
ROUNDEC BLANKSASNULL TRIMBLANKS REMOVEQUOTES
STATUPDATE ON IGNOREHEADER 0;

PRICE_BAND_LOWERPRICE_BAND_UPPER 的数据类型为 numeric(9,4),但在处理数据时会将数据四舍五入。

请告诉我如何处理这种情况。

【问题讨论】:

排除ROUNDEC参数是否正常? 【参考方案1】:

ROUNDEC 参数必须取消。当输入值的小数位数大于列的小数位数时,向上舍入数值。默认情况下,COPY 会在必要时截断值以适应列的比例。

COPY <table_name> (PRICE_BAND_CODE,PRICE_BAND_DESC,PROD_LEVEL1_CODE,PRICE_BAND_LOWER,PRICE_BAND_UPPER,PRICE_BAND_SEQ)
FROM '<s3 path>/PriceBandDIM.gz'
credentials 'aws_access_key_id=xxxxxxxxxxxx;aws_secret_access_key=xxxxxxxxxxxxxxxx' 
delimiter '|'
IGNOREBLANKLINES EMPTYASNULL GZIP NULL AS '\000'
BLANKSASNULL TRIMBLANKS REMOVEQUOTES
STATUPDATE ON IGNOREHEADER 0;

如果我做了一个错误的假设,请发表评论,我会重新调整我的答案。

【讨论】:

以上是关于Amazon Redshift 错误地四舍五入 Numeric(9,4) 值的主要内容,如果未能解决你的问题,请参考以下文章

Redshift 中的 DAU WAU MAU 错误:[Amazon](500310) 无效操作:由于内部错误,不支持此类关联子查询模式;

如何清除 Amazon Redshift 中的以下语法错误

Pentaho DI 无法连接到 AWS Redshift - Amazon 错误 100021

Amazon Redshift 中的可序列化隔离违规错误

复制 json 文件时出现 Amazon Redshift 错误 - JSONPath 格式无效:成员不是对象

Amazon Redshift 是不是支持扩展 dblink?