问题标签 [data-vault]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
65 浏览

plsql - 在 PL/SQL 中实现 Data Vault 的更新算法

我目前正在使用 Data Vault 建模对数据仓库进行建模。我的问题如下:我想根据业务密钥为每个卫星定义最后一个状态。以下是我想要实施的元素和算法:

我有两张桌子。

第一个表 (SAT) 包含事件的历史记录,其主键由业务键和此业务键的更新日期组成。该表是实时供电的。

第二个表 (LAST_SAT) 包含每个事件的最后状态,其主键仅包含业务键。更新日期是第一个表的最大更新日期。这张桌子每天喂一次。

这是我想在 PL/SQL 中实现的算法:

对于每个卫星对 (SAT) 和最后一个状态卫星 (LAST_SAT):

  1. 标识 LAST SAT 的最后更新日期(如果由于表为空而返回为零,则值为 01/01/1900):MAX_DATE
  2. 选择在 MAX_DATE 之后更新的 SAT 表中的数据。
  3. 将所选数据 (2) 与 LAST_SAT 数据进行比较,以使用新的和更新的数据更新 LAST_SAT。

    3.a. 从 SAT 中存在的 LAST_SAT 中删除数据(根据业务密钥)

    3.b。将选定的数据 (2) 以有序的方式插入 LAST_SAT。

这是我开始用PL/SQL编写的程序,但是我的水平太低,无法做到这一点。

你能帮我实现目标吗?

先感谢您,

纪尧姆。

0 投票
1 回答
487 浏览

data-modeling - 数据保险库建模外键

我有一个关于特定数据保险库建模的问题。我有一个捕获呼叫中心 CALL 信息的源表,如下所示: CallId (business key) Date Call_alert Call_acw etc 同一个源表中还有一堆外键,如下所示:RouteID(呼叫最终在哪一行结束) ConnectionType(电话、电子邮件等)

通过每个外键,可以检索有关该键的额外信息(未链接到 CALL)。

我的问题是如何在我的模型中建模这些外键?我将它们作为属性保存在我的卫星中还是将它们建模为链接?还是我没有想到的其他选择?

谢谢!!

0 投票
1 回答
632 浏览

data-vault - DataVault 2.p 中 HUB 的参考表

可以将参考表合并到 HUB 吗?

在所有书籍中,参考表只与卫星表合并......但为什么它不与 HUB 表合并?

非常感谢

0 投票
1 回答
61 浏览

data-modeling - 使用集线器密钥是否必须能够唯一标识卫星中的记录

我是数据保险库建模的新手,我无法为以下查询找到令人满意的答案,请帮助。

在 Data Vault 建模中,是否应该满足以下陈述?如果是,是否应该 100% 满足?

“集线器或集线器中的 BK 应该足以唯一标识卫星中的记录”

谢谢,

0 投票
1 回答
533 浏览

snowflake-cloud-data-platform - 在 Data Vault v2.0.2 中处理驱动关键关系的最佳实践方法是什么

我们正在使用 Snowflake 数据库中的 Data Vault 方法实施新的数据存储。我们的目的是尽可能地坚持最新的标准和最佳实践,例如仅插入方法并尝试避免各种反模式,例如在可行的情况下驱动密钥关系(请参阅此处的评论以了解有关驱动密钥的讨论)。

以下是我们数据中与一段时间内分配给属性的评级相关的部分的简化示例(想想酒店星级或类似评级)。

其核心是将房产与评级联系起来的表格。以下示例显示了针对两种不同方案的单个属性的评级历史记录。

有关数据结构的相关信息。

  • PropertyRatingID 是确保唯一性的身份密钥,没有商业意义。
  • 在任何给定时间,房产只能针对单一方案进行单一评级,但可以在多个方案下进行评级
  • PropertyID、RatingSchemeID 和 EffectiveDate 不需要是唯一的组合。
  • EffectiveDate 不代表记录输入系统的日期,并且可以回溯到过去很长的持续时间,从而在生效日期和应用更改的日期之间创建一个双时态情况。
  • PropertyID、RatingSchemeID 和 RatingID 都是提供描述性数据的其他表的外键。在我们的模型中,财产已经作为一个枢纽而存在。

上面的时间线可以描绘如下。

我最初的建模尝试是为 RatingID 建立一个中心,在属性和评级之间建立一个链接,并使用 PropertyRatingID 连接到该链接的卫星,其中包含所有其他信息(主要是 BrandID 和 EffectiveDate),以使其具有多用途。事实证明这很难使用,因为更改背后的驱动密钥(PropertyID 和 BrandID 在链路和卫星之间传播)。

就情况的双时性而言,重点将放在获取最近记录的一组生效日期(即最近的系统日期)上,以创建一段时间内的评级历史,例如 EffectiveEndDate 相当于LEAD(EffectiveDate) OVER(PARTITION BY PropertyID,RatingID ORDER BY EffectiveDate ASC)原始表。虽然我们不会定期使用过去系统时间的值记录,但我们有时会临时查看这些记录,以解释报告期间之间历史记录的变化。

一个简单的解决方案是跨源系统中的多个表连接以展平数据,将其分离并生成每个评级方案的卫星并将其直接附加到属性中心。这将为我们提供一个短期的解决方案,但不够灵活(任何新的评级方案都需要一个新的中心),并且仍然需要这些卫星是多活动的,以保持源系统中当前的多个生效日期。

我相信理想的解决方案至少需要一个与驱动钥匙相关的枢纽,并可能需要第二个与为物业分配评级相关的枢纽。我的大部分阅读(参见上一个链接和这篇文章)暗示我的卫星应该连接到集线器而不是链接。

使用 Data Vault 方法对此进行建模的有效方法是什么?

我有兴趣讨论所提出的解决方案的收益,例如额外的“弱”集线器与解决更复杂查询中的驱动关键问题。

0 投票
2 回答
1098 浏览

sql - 数据仓库建模:Data Vault vs Persistent Staging Area

考虑以下两种 DWH 架构:

带有原始数据库的 DWH,层:

  • 源系统
  • 暂存区(每次加载时截断,源表的精确模式)
  • 原始数据保险库(建模为数据保险库,包含记录历史、以源系统结构为模型的集线器/卫星/链接,未应用业务规则)
  • 数据集市(维度模型、应用的业务规则)

具有持久暂存区(称为 PSA 或 HDA)的 DWH,层:

  • 源系统
  • 暂存区(每次加载时截断,源表的精确模式)
  • PSA(包含记录历史、源表的模式 + date_load/date_load_end 列等)
  • 数据集市(维度模型、应用的业务规则)

与 PSA 概念相比,原始 Data Vault 概念有什么好处吗?在我看来,Data Vault 建模在 ETL 方面增加了不必要的复杂性,并且在性能方面也较慢。

很难找到一个真正好的答案,有什么想法吗?

谢谢!

0 投票
1 回答
380 浏览

database - 链接和集线器之间的 Data Vault 关系

我有以下尺寸:

在此处输入图像描述

我在我的数据保险库方案中创建了这两个链接之间的以下关系。 在此处输入图像描述

这是对的吗?是否允许在没有集线器的情况下直接连接链接?如果没有,我该怎么做?船名或船地址可以是业务密钥吗?

0 投票
1 回答
35 浏览

database - 如何在数据保险库中存储非部分唯一的主键?

我在尝试将数据模型传输到数据保险库时遇到问题。我已经尝试了很多,但无法找出识别图中这部分的集线器、链路和卫星的正确方法。

在此处输入图像描述

显示的是在某家商店工作的员工。这里的问题是它自己的employee_id 不能唯一标识员工。两名员工只要在不同的商店工作,就可以拥有employee_id 1。

对此建模的正确方法是什么(集线器、链路和卫星应该是什么)?

0 投票
1 回答
78 浏览

sql - 如何迭代地“INSERT INTO {table} SELECT FROM”......对于一系列日期?

我正在构建一个 Data Vault 时间点 (TPIT) 表。为此,我需要遍历日期列表并为每个日期插入行。这是一个 Date '2020-08-19'的 SQL 。我需要遍历从 2000 年到今天的所有日期。

在 Snowflake 中使用 SQL 实现这一点的最佳方法是什么?

我可以在 Python 中做到这一点,但我一直在寻找一种只有 SQL 的方法来做到这一点,以便它可以嵌入到每天运行的 SQL 刷新脚本中。

谢谢。

0 投票
0 回答
50 浏览

database - 扩展数据仓库以满足新需求

环境: 我有一个用于记录进程信息的集线器表。集线器包含流程的开始时间、结束时间、成功/失败。

期望的变化: 一些流程收到工作项列表。我想为那些有意义的进程捕获计数。

完成此任务的“正确”方法是什么?我假设我添加了一个连接到集线器的新表?此表的 Data Vault 2.0 术语是什么?