- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
表格:
我工作的公司的尺寸变化缓慢(员工数据),已使用Kimball方法进行了存储。包含此数据的维度表具有一个主键(int identity employee_key
,在其他表中用作替代),一个自然键(employee_id
),有效日期范围(valid_date
和invalid_date
)以及随时间跟踪的各种SCD1和SCD2数据元素。这是一个简化的示例:
employee_key | employee_id | valid_date | invalid_date | employee_name | employee_role
1 | 1001 | 1/1/2015 | 6/1/2015 | Bob | DBA
2 | 1001 | 6/2/2015 | NULL | Bob | Developer
3 | 1002 | 1/1/2015 | NULL | Jill | DBA
employee_key
是主键(代理),而
employee_id
是自然键。希望其他值可以自我解释。该表反射(reflect)出:
calendar_dt | employee_id | employee_key | time_code | hours
1/1/2015 | 1001 | 1 | 1234 | 2.25
1/1/2015 | 1001 | 1 | 21 | 3.50
1/2/2015 | 1001 | 1 | 21 | 8.00
...
6/1/2015 | 1001 | 1 | 21 | 4.00
employee_key
链接到员工维度具有重要的商业目的-无需使用
BETWEEN
运算符即可进行准确的历史报告,而无需进行昂贵的联接。例如,可以说鲍勃在2015年6月1日记录的时间归因于他的DBA角色,鲍勃在2015年2月6日记录的时间归因于他的开发者角色。
employee_key = 1
的行拆分为有效日期/无效日期的两行。此外,我们需要找到现在错误地引用
employee_key = 1
的所有位置并进行更新。这里是问题:
employee_id
和calendar_dt
进行自然键联接。它还使该键不可变,并允许识别适当的替代键值,而无需在尺寸表中查找它。无论维度表如何更改,事实表将始终引用正确的行。这具有将我们的100,000行维表转换为20M第一行的主要缺点。 employee_id
值永远不会改变(是的,我知道这是一个危险的假设)。 最佳答案
您的DW有一个要求:“可以随时追溯更改员工信息”,因此您的DW设计必须适应这一点。
解决这个问题的方法可能很多,但是想到的最简单的方法(对于类似的情况已经为我工作了)是引入一个新的类型2集成表:master_employee_time。该表将仅使用业务 key 维护原始时间记录数据的版本历史记录。
employee_time_key | employee_id | valid_date | invalid_date | time date | time code | hours
1 | 1001 | 1/1/2015 | NULL | 1/1/2015 | 1234 | 2.25
2 | 1001 | 1/1/2015 | NULL | 1/1/2015 | 21 | 3.5
3 | 1001 | 1/2/2015 | NULL | 1/2/2015 | 21 | 8
insert into fact_employee_time
select
t.calendar_dt, e.employee_id, e.employee_key, t.time_code, t.hours
from
master_employee_time t
inner join master_employee e on t.employee_id = e.employee_id
where
--limit to 'current' time recordings
t.invalid_date is null
and
--get the employee record active for the time recordings day
e.valid_date <= t.time_date
and
(e.invalid_date is null OR e.invalid_date >t.time_date)
关于sql - 如何最好地处理缓慢变化的维度(SCD2)中的历史数据更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35908019/
在 SSIS 中,如果传入的数据集对同一个业务 key 有多个记录,我如何在不使用 SCD 向导的情况下将其加载到具有 SCD 类型 2 的维度表。 样本数据集 Customer ID Name
我正在尝试使用合并查询在数据构建工具中实现 scd1。但我没有得到在增量模型中编写此查询的确切方法。 谁能告诉我们必须在哪里编写合并查询。 {{ config( materia
在实现时间日期时间对时,哪种方法更好? 方法一 _RK FROM_DTTM TO_DTTM 1 01-JAN-2012 00:00:00 31-DEC-201
如何处理事实表中的 scd type2 更新?我没有在事实表上进行增量加载。任何好的方法都可以遵循。谁能建议我,以便我在将数据加载到事实表时可以采用相同的方法。 ETL(Pentaho) 最佳答案 我
我们有以下数据: 事实表: id | key | name | salary | loaction | start_date 1 | emp_1 | Shubham | 10000 |
假设我们有一个代表销售办事处的维度。办公室可能会搬迁,这将是第二类变化。我们希望跟踪旧办公地点发生的操作以及现在新办公地点发生的操作,并了解更改何时发生。到目前为止,只是标准的II型设计。现在假设一个
我需要生成报告,该报告将每天为 SCD 表显示新/更改的行数。 这是创建表的 SQL: create table #scd( code nvarchar not null , start
这里有点新,但就这样吧。用于填充 Type-3 SCD 的算法是什么?我已经设置了事实表和维度表,并且已经通过 talend 中的 TOS 完成了此操作,但需要代码。使用MySQL。任何类型的一般想法
我在 mssql 服务器中有 2 个表。我可以通过自定义插入/更新/删除以及通过 Merge 语句执行 scd。 Awesome Merge 我想知道是否有任何通用程序可以达到目的。我们只需将 2 个
我在让 JAXB 绑定(bind)文件与 annox 和 SCD 元素选择一起使用时遇到困难。该模式是一个简单的基本模式,具有名为 SongType 的 ComplexType。我尝试了正常的方法做如
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
尝试在 Spark 2.4.4 中实现 SCD Type 2 逻辑。我有两个数据框;一个包含“现有数据”,另一个包含“新传入数据”。 下面给出了输入和预期输出。需要发生的是: 所有传入行都应附加到现有
我试图了解 SCD 类型 5,6 和 7 的工作原理。 我读了这个 article金博尔集团和stack overflow回答类型 6。 我可以理解 Type 6 的概念、它是如何工作的以及何时使用它
如何将 .net core 应用程序打包为“框架相关部署 (FDD)”或“自包含部署 (SCD)' 使用 Visual Studio 2017 (IDE) ?我知道如何通过 dotnet CLI/命令
我有这些数据: CREATE TABLE #student ( student_id INT, status VARCHAR(50), created_dt DA
假设您在 CouchDB 中有一个类似日志的文档集合,如 JSON 文档和属性的表格表示(每行是一个 JSON 文档,每列是一个属性): PRODUCT_ID START_DATE PRICE 000
我正在尝试解决如何为我的应用程序创建“日志”并将它们存储到数据库的问题。 假设我有这个数据库结构: 第一个表: weatherstation_id |气象站名称 | weatherstation_ip
我是一名优秀的程序员,十分优秀!