我有一个平面文件资源,这些资源被提取为事实和维度。一些维度也来自数据库资源。根据需要设置转换过程(如果有新的/从平面文件更新的)。问题是,一些数据引用在基于数据库资源的维度上不存在或不匹配,因此事实上的外键id值被设置为默认值(如果没有匹配的数据,则为零)。
如果所述维度(db资源)已经更新,我如何更新事实?这种情况下的最佳实践/常规是什么?
这是示例插图
Flatfile source product list (db source)
-------------------------------- ------------------------------
| product name | year | volume | | prodcode | name |
-------------------------------- ------------------------------
| apple | 2020 | 1000 | | 001 | apple |
| watermelon | 2020 | 2000 | | 002 | mango |
-------------------------------- ------------------------------事实/维度
production_fact dim_product
------------------------------- ---------------------------
| fk_product| fk_date| volume | | id | prodcode | name |
------------------------------- --------------------------|
| 2 | d001 | 1000 | | 1 | n/a | n/a |
| 1 | d001 | 2000 | | 2 | 001 | apple |
------------------------------- | 3 | 002 | mango |
---------------------------如果要更新产品列表(003西瓜),我应该用新值替换dim_product row#1吗?
发布于 2021-05-22 14:51:18
根据您的示例,它应该是这样工作的:
注意:我希望prodcode在平面文件中,而不是产品名称中。你的数据看起来真的是这样吗?无论如何,我将继续。
第一组数据到达。西瓜是事实,但不是维度。
Flatfile source product list (db source)
-------------------------------- ------------------------------
| product name | year | volume | | prodcode | name |
-------------------------------- ------------------------------
| apple | 2020 | 1000 | | 001 | apple |
| watermelon | 2020 | 2000 | | 002 | mango |
-------------------------------- ------------------------------我们加载了一个维度记录,但它没有任何属性值。(正如我所说的,我通常期望代码在事实输入数据中,但这很好,我们将使用描述)。当然,这需要一些逻辑来找到实际存在但不在维度中的维度。
production_fact dim_product
------------------------------- ------------------------------------------------
| fk_product| fk_date| volume | | id | prodcode | name | weight |colour |
------------------------------- ------------------------------------------------
| 2 | d001 | 1000 | | 1 | n/a | n/a | n/a | n/a |
| 4 | d001 | 2000 | | 2 | 001 | apple | 200mg | red |
------------------------------- | 3 | 002 | mango | 400mg | yellow|
| 4 | ? | watermelon | ? | ? |
------------------------------------------------所以我们有维度sk4,它是一个合法的维度记录,除了它缺少大量属性。
稍后,维度到达。我们知道要匹配的是什么,所以我们更新了缺少数据的现有维度。
product list (db source)
-----------------------------------------------
| prodcode | name | weight |colour |
--------------------------------------|-------|
| 003 | watermelon | 1kg | green |
-----------------------------------------------
------------------------------------------------
| id | prodcode | name | weight |colour |
------------------------------------------------
| 1 | n/a | n/a | n/a | n/a |
| 2 | 001 | apple | 200mg | red |
| 3 | 002 | mango | 400mg | yellow|
| 4 | 003 | watermelon | 1kg | green |
------------------------------------------------你要避免更新大的事实。更新较小的维度是一个更好的想法
顺便说一句,这是一个类型1维度。除了不会计算维度的第一个版本之外,您可以使用SCD进行相同的说明,只需覆盖它。
https://stackoverflow.com/questions/67634758
复制相似问题