Bru*_*uce 5 sql snowflake-cloud-data-platform
与纯数学实数甚至有理数不同,浮点数类型不具有交换结合性。这意味着,正如数字编码中众所周知的那样,浮点数列表的顺序会影响浮点数和的值。最好对列表进行排序,将较小的数字放在前面,然后再相加。
SQL 表确实有顺序。这可以在 order-by 子句中指定。
SQL 引擎是否按照 order-by 子句中给出的顺序对字段求和?
我可以通过按升序对正浮点数列表进行排序来强制 SQL 引擎从最小的第一个开始相加吗?
我可以强制引擎先累加最大吗?或者求和的顺序不依赖于表的顺序?或者也许求和顺序与排序顺序以复杂且不确定的方式相关?
我认识到这可能取决于 SQL 引擎的选择。我的核心兴趣是 SnowFlake。
是的,浮点数是特定于顺序的,是的,Snowflake 中的浮点数受此影响,他们有一篇文章谈论排序顺序不稳定及其对 ORDER-BY 等事物的影响,这与您的问题方向相反。
理论上是的,对子选择进行排序将允许控制顺序问题。与 MS Sql Server 不同,MS Sql Server 不允许在子选择上使用 ORDER-BY,而 Snowflake 允许您执行这些操作。真正的问题是他们是否始终尊重它。我倾向于相信它们不会,因为大多数操作都是并行的,或者求和通常是“安全”的,因此我怀疑您将无法强制遵守该顺序。
我有一个想法,但我认为可行,是将值写入临时表,并按其顺序,但随后您会遇到从中读取的问题,同样可能会并行化。您可以使用 width_bucket将值分成批次,然后对它们求和,然后对总和求和。但在块内你仍然会遇到不稳定的情况。
此时,数值稳定性是您最关心的问题,并且上述黑客行为不能满足您的需求,我将翻转到数字并使用更多小数位的形式。
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |