gpt4 book ai didi

sql - OLAP 如何处理数字范围的维度?

转载 作者:搜寻专家 更新时间:2023-10-30 22:05:10 26 4
gpt4 key购买 nike

首先,我对 OLAP 一点都不熟悉,所以如果术语不正确,请随时提供更正。

我正在阅读有关 OLAP 的文章,它似乎完全是关于以空间换取速度,您可以在其中预先计算(或按需计算)并存储有关数据的聚合,并以特定维度为基础。我了解这对于具有一组离散值的维度是如何工作的,例如 { Male, Female } 或 { Jan, Feb, ... Dec } 或 { @US_STATES }。但是具有完全任意值(例如(0、1.25、3.14156、70000.23,...))的维度呢?

OLAP 的使用是否排除了在命中事实表的查询中使用聚合,或者它仅仅用于绕过可以预先计算的事情?比如,对任意值的任意聚合仍然需要即时完成?

任何其他有关了解更多 OLAP 的帮助将不胜感激。乍一看,Google 和 SO 似乎都有些枯燥(与其他更热门的主题相比)。

编辑:被要求提供具有任意值的维度。

  • 实验速度:1.256 m/s、-2.234 m/s、33.78 m/s
  • 交易值(value):120.56 美元、22.47 美元、9.47 美元

最佳答案

您的 velocity 和 value 列示例通常不是您将以 OLAP 方式查询的那种列 - 它们是您尝试检索的值,并且可能作为单独的行或聚合。

不过,我说的是通常。在我们的 OLAP 模式中,我们有一个您正在考虑的列的很好示例:event_time(一个日期时间字段,粒度到秒)。在我们的数据中,它几乎是唯一的——不会在同一秒内发生两个事件,但由于我们的表中有多年的数据,这仍然意味着有数亿个潜在的离散值,当我们运行我们的OLAP 查询,我们几乎总是希望基于时间范围进行约束。

解决方案是按照 David Raznick 所说的进行操作 - 您创建值的“桶装”版本。因此,在我们的表中,除了 event_time 列之外,我们还有一个 event_time_bucketed 列 - 它只是事件的日期,时间部分为 00:00:00。这将不同值的数量从数亿减少到几千。然后,在所有限制日期的查询中,我们限制分桶列和真实列(因为分桶列不够准确,无法为我们提供真实值),例如:

   WHERE event_time BETWEEN '2009.02.03 18:32:41' AND '2009.03.01 18:32:41'
AND event_time_bucketed BETWEEN '2009.02.03' AND '2009.03.01'

在这些情况下,最终用户永远不会看到 event_time_bucketed 列 - 它只是用于查询优化。

对于像您提到的浮点值,分桶策略可能需要多加考虑,因为您希望选择一种方法来使值的分布相对均匀并保持连续性。例如,如果您有一个经典的钟形分布(尾部可能很长),您想要定义大部分人口居住的范围(例如,与均值相差 1 或 2 个标准差),将其划分为统一的桶,并为“所有更小的”和“所有更大的”再创建两个桶。

关于sql - OLAP 如何处理数字范围的维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com