首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事实表的更新

事实表的更新
EN

Stack Overflow用户
提问于 2021-05-21 18:03:28
回答 1查看 45关注 0票数 1

我有一个平面文件资源,这些资源被提取为事实和维度。一些维度也来自数据库资源。根据需要设置转换过程(如果有新的/从平面文件更新的)。问题是,一些数据引用在基于数据库资源的维度上不存在或不匹配,因此事实上的外键id值被设置为默认值(如果没有匹配的数据,则为零)。

如果所述维度(db资源)已经更新,我如何更新事实?这种情况下的最佳实践/常规是什么?

这是示例插图

代码语言:javascript
复制
Flatfile source                           product list (db source)
--------------------------------          ------------------------------
| product name | year | volume |          | prodcode |  name           |
--------------------------------          ------------------------------
| apple        | 2020 |  1000  |          | 001      | apple           |
| watermelon   | 2020 |  2000  |          | 002      | mango           |
--------------------------------          ------------------------------

事实/维度

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-22 14:51:18

根据您的示例,它应该是这样工作的:

注意:我希望prodcode在平面文件中,而不是产品名称中。你的数据看起来真的是这样吗?无论如何,我将继续。

第一组数据到达。西瓜是事实,但不是维度。

代码语言:javascript
复制
Flatfile source                           product list (db source)
--------------------------------          ------------------------------
| product name | year | volume |          | prodcode |  name           |
--------------------------------          ------------------------------
| apple        | 2020 |  1000  |          | 001      | apple           |
| watermelon   | 2020 |  2000  |          | 002      | mango           |
--------------------------------          ------------------------------

我们加载了一个维度记录,但它没有任何属性值。(正如我所说的,我通常期望代码在事实输入数据中,但这很好,我们将使用描述)。当然,这需要一些逻辑来找到实际存在但不在维度中的维度。

代码语言:javascript
复制
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,它是一个合法的维度记录,除了它缺少大量属性。

稍后,维度到达。我们知道要匹配的是什么,所以我们更新了缺少数据的现有维度。

代码语言:javascript
复制
 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进行相同的说明,只需覆盖它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67634758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档