应该应用啥策略来将此源类型加载到 DWH?

Posted

技术标签:

【中文标题】应该应用啥策略来将此源类型加载到 DWH?【英文标题】:What policy should be applied to load this source type to a DWH?应该应用什么策略来将此源类型加载到 DWH? 【发布时间】:2017-02-17 16:36:21 【问题描述】:

猜想我们在企业中有一个索赔管理应用程序。 这个应用程序有不同的表格,例如:

    索赔类型 索赔日志 索赔表 用户表 用户声明关系表

该应用程序允许用户创建新的声明类型 (1),然后管理员可以承认或删除此类型。此外,此应用程序允许创建声明 (3) 并记录它。这也记录了 ip 和其他参数 (2)。最后,我们有一个 user 表,因为只有一些用户可以创建声明 (4),还有一个存储每个用户创建的声明的表 (5)。

所有这些表都有外键和主键,为了应用程序的正确可用性,必须遵守这些外键和主键。

现在,我们要将其加载到 DWH 中。所有表必须每天截断和加载,因为所有表每天都可以有新行,甚至删除行。在这种情况下,我们有两种方法可以做到这一点:

加载没有 FK 和 PK 的每个表。然后 DWH 就像一个备份,因为在原始表中检查了数据完整性。 使用 PK 和 FK 加载表。 DWH 也检查数据完整性,但是 ETL 过程必须擦除 FK,然后可以截断表以最终重建 FK 并再次加载表。我不知道它是否会给数据库带来任何复杂性。

当源确保数据完整性时,DWH 的正确方法是什么? DWH 应该使用关系键检查数据完整性,还是只存储数据以创建报告和仪表板?

在报告和仪表板的情况下,第一个选项可能是有效的,但是如果这些数据是通过一个批量进程加载到另一个必须分解与原始应用程序相同的关系的应用程序,会发生什么?

【问题讨论】:

【参考方案1】:

答案可能取决于您在其上实施数据仓库的数据库。所以我会给你一个Oracle具体的答案。 通常,建议创建 PK/FK,但使用 RELY DISABLE NOVALIDATE。这具有创建定义关系的元数据的效果,但没有 DW 中可能不需要的索引。 PK/FK 关系允许 Oracle 执行许多原本无法执行的优化。

【讨论】:

如果数据仓库使用 PostgreSQL RDBMS 会怎样?

以上是关于应该应用啥策略来将此源类型加载到 DWH?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server scd2 和 scd1 中的 DWH SCD 类型 2 实现

我无法从数据块中的 spark 数据帧创建加载数据到 Azure Synapse (DWH)

将 NSMutableArray 保存到磁盘

mysql中的timestamp类型到java来应该用啥类型???

linq操作符:转换操作符

我应该将啥类型添加到作为参数接收的类构造函数中?