在 OLAP 计算期间使用哪些技术来处理不同的时区?

Posted

技术标签:

【中文标题】在 OLAP 计算期间使用哪些技术来处理不同的时区?【英文标题】:What techniques are used to handle different timezone during OLAP calculation? 【发布时间】:2015-06-22 04:57:11 【问题描述】:

我正在读一本关于数据仓库的书。它告诉如果我有一个日期时间数据,我应该将它存储为单独的列:年、月、日期和原始日期时间,以毫秒为单位。它需要用于聚合目的(另请参阅更新部分) - 按日期、月份等进行聚合。但是如果我需要针对不同时区进行聚合怎么办?是的,可以在 UI 上显示 UTC + 时区,但如果企业希望看到“移位”日期间的聚合而不是从 00:00+07 开始呢?

注意

可以计算每个时区的每次时间聚合(年、月、日),但计算量太大(据我所知)。也许有更好的方法?还是每个时区的每次计算都是通用的解决方案?

更新

关于聚合。我的意思是,有一个进程按计划运行(它首先在所有数据上运行,然后按计划运行,仅用于新的comming)。所以这个过程,当它“看到”新数据时,它会计算所有列的聚合。例如,假设数据是客户订单,它有成本、用户 ID 和日期。因此,处理具有 1 个客户订单的抓取行,并在几个 OLAP 立方体单元格中“添加”此信息:日、月和年。假设客户在22.06.2015 上使用$1 下订单。此订单数据(通常是成本)被“添加”到以下 OLAP 单元格中:22 day、06month 和 2015。我不是合格的 OLAP 设计人员,并且单元格可能不同(例如,它可以添加到 22.06 而不是 22),但我的想法是将数据放入单独的单元格以进行查询优化,例如从一个立方体单元格22.06.2015 中选择成本总和要快得多,而不是在22.06.2015 上运行所有订单的计算。但是在这种情况下,设计日从 UTC 开始,如果我需要从不同的时区开始怎么办?使用这种方法,数据聚合增加了 24 倍。 :(

在 UTC 中存储日期并在 UI 上显示偏移量是一种常见做法,但在需要预先计算时,在 OLAP 设计中则不然。

【问题讨论】:

请在投反对票时发表评论。 我猜您只是不在数据库中执行此操作,而是在您用来以报告形式生成结果的工具中执行此操作,或者您希望/需要显示数据。如果时区对您很重要,那么也可以使用字段来存储时区。 再次:使用另一个字段来存储该日期的相关时区。当客户端使用数据时,那一刻您将在时区上进行操作。但说真的,我看不出看到公司在某个时区或其他时区赚了多少钱和将其用作报告相关数据的一部分之间的区别。我发现真正有用的是我可以用来做出面向业务的决策的适当时间。 假设时区存储在单独的字段中,但是预先计算呢?客户端请求计算过长怎么办?所以我需要在数据库中存储一些中间结果并在用户询问我数据之前计算它。 您不应在用户生成报告时汇总此类数据,应在一天/一周的特定时间插入/更新数据。这就是商业智能 101。 【参考方案1】:

但首先,在使其他聚合/计算更易于进行和维护的级别上定义您的“仓库粒度”。

在我看来,您应该在数据仓库和 ETL 级别“处理和映射”此业务需求。是的,将每个日期级别保留在单独的列上,您将能够使聚合“简单而简单”。不要担心添加另一个级别,例如“24 小时聚合”。 OLAP 就是为这种方法构建的。

如果您想避免额外的聚合,请创建专用数据集市。您的事实表将是accumulating snapshot,而不是事务事实。接下来创建 Dim "UTC" 来处理您的要求。您会将聚合工作从 OLAP 级别转移到 ETL 级别。

希望对您有所帮助。

【讨论】:

以上是关于在 OLAP 计算期间使用哪些技术来处理不同的时区?的主要内容,如果未能解决你的问题,请参考以下文章

在初始化期间创建具有不同时区的新 JavaScript 日期对象 [重复]

Hadoop在线分析处理(OLAP)

hadoop在线分析处理(OLAP)

Olap 数据库处理选项和对象

测试正确的时区处理

特征处理都有哪些方法