Unload命令为float4字段添加了更多小数位数。

0

【以下的问题经过翻译处理】 我有一个包含float4字段的表,其中一个值是120.12。当我将数据卸载到S3中的文件中,并在文本编辑器中查看文件时,相关字段的值现在变为120.120003。也就是说,它通过添加4位小数位使值更精确,然后(随机地)使最后一位小数位成为非零值。我正在卸载/导出许多数据库记录,这种情况正在发生。

为什么会这样,我该如何防止它发生?是因为我使用的是float4,它具有“6个有效数字”吗? Redshift只是因为我使用了float4而添加了额外的精度吗?如果是这样,我应该使用DECIMAL(8,2)代替吗?我之前在导出/卸载数据时使用了float4而没有出现这个问题。

一个创建表查询的例子:

CREATE TABLE exampleTableName (
  id       int identity(1,1),
  accId    varchar(16) encode zstd,
  amount   float4,

  primary key(id)
)
distkey(accId)
interleaved sortkey(accId);

卸载命令:

UNLOAD ('YYY')
TO 's3://bucket/prefixFile_'
IAM_ROLE 'XXX'
HEADER
ADDQUOTES
PARALLEL OFF
MAXFILESIZE AS 5gb
DELIMITER AS ',' 
GZIP;
profile picture
专家
已提问 5 个月前6 查看次数
1 回答
0

【以下的回答经过翻译处理】 如果使用FLOAT数据类型存储十进制数据,由于它无法存储任意精度的值,这种情况会发生。我通常会建议使用DECIMAL数据类型,除非你有一个无法更改的使用FLOAT的现有应用程序,例如,计算期望使用FLOAT而且输出不能更改。此外,通过使用DECIMAL,您可以使用我们的新AZ64压缩编码,这将减少所需的存储量并提高查询性能。(https://aws.amazon.com/about-aws/whats-new/2019/10/amazon-redshift-introduces-az64-a-new-compression-encoding-for-optimized-storage-and-high-query-performance/)

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则