首页 > 解决方案 > AWS - Redshift 十进制问题

问题描述

我通过 S3 存储桶将数据从 Amazon EventBridge 发送到 Redshift。

我对发送的十进制值有疑问。

这是我存储在 s3 上的 jsonpath 文件的示例。

{
    "jsonpaths": [
        "$.id",
        "$detail.TotalPaid"
   ] 
}

redshift 上的列类型是 Decimal(12,2)

如果我运行 SQL 插入,数据将正确保存 -

insert into payments values(1, 10.15);

但是,如果从 EventBus 传递相同的信息,则 TotalPaid 列将保存为 10.14。

仅在发送带有 2 个小数位的值时,上述内容似乎是一个问题。例如,如果发送 10.1,则列中的数据将正确保存为 10.10

我之前曾尝试将列设置为 VARCHAR 类型,但数据库中保存了不正确的值。我打算尝试使用 Float 类型,但查看 AWS 文档确实说使用 DECIMAL 表示货币金额而不是浮点类型。

有谁知道如何解决这个问题?

标签: amazon-s3amazon-redshift

解决方案


问题解决了。我必须将 roundec 转换参数添加到 AWS 传输流上的复制命令 - https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html#copy-roundec


推荐阅读