如何进行 OLAP 多维数据集增量处理?

Posted

技术标签:

【中文标题】如何进行 OLAP 多维数据集增量处理?【英文标题】:how can I do OLAP cube incremental processing? 【发布时间】:2017-04-20 08:15:05 【问题描述】:

我有一个用于销售的多维 OLAP 多维数据集。但我有巨大的数据库。首先我完成了 olap 多维数据集的完整处理。但每次它都会完整处理,因此需要很多时间。我必须进行增量处理。但我没有这个主题有什么过期的。你能帮我吗?

我应该如何遵循路径?我发现一些文章涉及这个主题,例如this one。

但我不知道在分区查询中我会写什么到 where 条件。

【问题讨论】:

【参考方案1】:

对事实表进行分区的典型方法是按日期。您的源中有一个 Sales_TransactionDate 列,因此这将是一个明显的选择作为分区属性。

根据您的数据量,以及您想要创建的分区数量,您可以按年、月、日或介于两者之间的任何内容进行分区。

这个想法是您只需处理整个多维数据集一次。然后,每个(例如)晚上,您只重新处理当前(例如)月份的分区。仅当源系统中的旧数据(即截至上个月(例如)月底的数据)从未更改确实如此时,此方法才有效。如果它确实发生了变化,您将错过这些变化,因为不再处理上个月的分区。

所以这是增量处理的一个重要问题。您必须知道在源系统中的数据首次出现后多久可以更改(显然,只有与多维数据集相关的更改才重要 - 如果多维数据集不使用的某些列发生更改,那没关系) ,以及它在什么阶段稳定到不变的状态。

这是一个 ETL 问题,与您如何(如果有的话)使用 Type2 缓慢变化的属性以及源系统是否有任何关于行上次更新时间的指示(例如 LastUpdated datetime 列)。

(编辑 - 根据下面的评论)

您需要调整分区大小,以确保仅通过处理最新分区即可捕获所有可能的更改。例如,如果一行可以在其交易日期(或您用于分区的任何日期)后最多 6 个月内更改,则您必须处理最近 6 个月的数据以免错过任何更改。

但是这个限制只影响最近的分区的大小——旧的分区可以随意调整大小。如果源系统中有将行标记为“已更改”的机制,则可以减少最近分区中的处理量。 (一个例子是“LastUpdated”列,当行被更新时,它总是设置为当前日期/时间。另一个是 SQL CDC)。

【讨论】:

您好 SebTHU,您能对增量 olap 立方体提出其他建议吗? 我需要一个例子 @SebTHU - 澄清一下,LastUpdated 只能在它变为静态时使用。如果处理多维数据集后 LastUpdated 发生变化,则需要用新分区再次处理旧分区,以确保记录不会被计算两次。 @WesH:你说得对,最后一段很混乱。编辑答案以反映您的观点。

以上是关于如何进行 OLAP 多维数据集增量处理?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 S3 或 Cassandra 中的 OLAP 多维数据集?

将更新写入 OLAP 多维数据集

Excel 多维数据集 - OLAP?

如何计算 OLAP 多维数据集的可能大小

将破坏 OLAP 多维数据集的字符列表

Excel 中显示的 OLAP 多维数据集连接