0

在尝试使用 Talend 构建数据仓库应用程序时,我们面临以下情况。

我们有两个表格看起来像

表主

ID | CUST_NAME | CUST_EMAIL
------------------------------------
1  | FOO       | FOO_BAR@EXAMPLE.COM

事件表

ID | CUST_ID | EVENT_NAME  | EVENT_DATE      
---------------------------------------
1  | 1       | ACC_APPLIED | 2014-01-01
2  | 1       | ACC_OPENED  | 2014-01-02
3  | 1       | ACC_CLOSED  | 2014-01-02

master 和 events 表之间存在一对多的关系。因为,鉴于事件名称的数量有限,我建议我们将此结构非规范化为看起来像

ID | CUST_NAME | CUST_EMAIL          | ACC_APP_DATE_ID | ACC_OPEN_DATE_ID |ACC_CLOSE_DATE_ID      
-----------------------------------------------------------------------------------------
1  | FOO       | FOO_BAR@EXAMPLE.COM | 20140101        | 20140102         | 20140103

THEDATE_ID列引用时间维度表中的条目。

第一个问题:这是个好主意吗?该方案的其他替代方案是什么?

第二个问题:如何使用 Talend Open Studio 实现这一点?我想出了一种方法,将每个事件名称的数据与 cust_idtMap一起使用组件移动到它自己的临时表中,然后使用另一个将它们链接在一起tMap。在 talend 中还有其他方法可以做到这一点吗?

4

4 回答 4

1

是的,这是一个好主意,这被称为累积快照事实。http://www.kimballgroup.com/2012/05/design-tip-145-time-stamping-accumulating-snapshot-fact-tables/ 不确定如何在 Talend 中执行此操作(不知道该工具),但它会使用 Case 或 Pivot 语句在 SQL 中很容易实现

于 2014-10-08T07:56:58.263 回答
1

仅关于您的第一个问题,这当然是一个好主意-除非同一个人有可能多次申请-打开-关闭他们的帐户,并且您希望将所有这些信息保留在他们的历史记录中(因此 UPDATE 无济于事)。

于 2014-10-08T08:09:33.447 回答
1

要在 Talend 中执行此操作,您需要首先对数据进行排序,使其可靠地按照每个帐户的应用、打开和关闭顺序,然后使用 tDenormalizeRows 将其非规范化为具有单个分隔字段的单行零件。

在此之后,您需要使用 tExtractDelimitedFields 来拆分单个日期字段。

于 2014-10-08T10:14:23.523 回答
1

如果您要设计数据仓库,Snowflaking 绝对不是一个好的选择。因此,在这种情况下,非规范化肯定是一个不错的选择。以下文章几乎非常适合清除这种情况下的空气,

http://www.kimballgroup.com/2008/09/design-tip-105-snowflakes-outriggers-and-bridges/

于 2014-10-09T10:30:50.063 回答