【问题标题】:Does Snowflake has some issue with Double Precision, Float, Real Data TypeSnowflake 在双精度、浮点数、真实数据类型方面是否存在问题
【发布时间】:2020-12-12 07:06:36
【问题描述】:

最近我将数据从 netezza 迁移到 Snowflake。我面临的问题是双精度数据类型。 在 netezza DB 双精度字段的值为 .34757853258953 但当我在 Snowflake UI 中查询相同的值时,我将其视为 .3475785326。

任何人都知道为什么会这样以及如何处理它。

【问题讨论】:

    标签: snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    这是 UI 限制,而不是 Snowflake 限制。存储的值是正确的,但 UI 显示只显示小数点后 9 位。你可以这样验证:

    SELECT  0.34757853258953::DOUBLE, 0.34757853258953::DOUBLE * 100000;
    

    【讨论】:

    • 如果你想要精确的值,你不应该使用 float 或 double 来存储数据,因为这些数据类型是“近似表示”。也就是说,您始终可以转换为像 sale::number(38,14) 这样的固定十进制数,以查看该近似值的所有小数,超过 9 位。
    • Mike 我尝试使用 sale:: number (38,20) 并且我可以在小数点后看到一些额外的值,即使源只有 13 位小数点后但在雪花中我可以看到 20 位后值。看起来 Snowflake 处理双精度并且与其他 DB 相比以不同的方式浮动
    • 不——和其他人一样。浮点数不是任何数据库上的确切数字,因此您会看到更多关于浮点或双精度值的近似值的信息。如果您希望将数据保留为精确数字,则不应使用浮点数或双精度数。
    • 我会告诉你我的secnario。在 netezza 中,当我查询销售列时,我看到小数点后的值直到 12 位,但在 Snowflake 中,当我查询相同的数据(如 sale::number(38,20))时,我可以看到小数点后的值直到 20 位。这让我在数据认证期间发疯。在 Snowflake 和 netezza 中添加列是双精度
    • 正如 Mike 所说,浮点(双精度)数字是一个近似值,通常用于表示非常大的数字。如果您的 Netezza 系统使用“双精度”类型来表示与“销售”有关的任何事情,那么我建议它为此目的使用了错误的数据类型。您不能完全迁移浮点数,因为它们一开始就不是精确的数字。
    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多