问题标签 [scd2]
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.
sql-server - 使用 MERGE 语句更新 SCD2
我想使用MERGE
语句更新 SCD-2 表。所以我有:
情况1:
在这种情况下,我希望TARGET 中的第一行 和SOURCE 中的第二行到 TARGETUPDATE
set row_actual_to = getdate()
INSERT
案例二:
只是INSERT
新行
如何在一个声明中做到这一点?
在案例 1UPDATE
中列出两者都会导致错误:MERGE 语句必须以分号 (;) 终止。INSERT
sql - Spark SQL 在不丢弃历史状态的情况下生成 SCD2
来自关系数据库的数据被加载到 spark 中——据说是每天,但实际上不是每天。此外,它是数据库的完整副本 - 没有增量加载。
为了轻松地将维度表与主要事件数据连接起来,我想要:
- 对其进行重复数据删除(即提高以后广播加入的可能性)
- 有 valid_to/valid_from 列,所以即使数据不是每天可用(不一致),它仍然可以很好地使用(从下游)
我正在使用 spark 3.0.1 并希望以 SCD2 样式转换现有数据 - 而不会丢失历史记录。
结果是:
这已经很不错了。然而:
丢失了。即,稍后(中间更改之后)再次出现的任何值都将丢失。如何在不保持更大排名的情况下保持这一行,例如:
这绝对是不希望的
- 这个想法是删除重复项
- 但使用 valid_to、valid_from 保留对数据的任何历史更改
如何正确地将其转换为 SCD2 表示,即具有 valid_from、valid_to 但不丢弃中间状态?
注意:我不需要更新现有数据(合并、加入)。重新创建/覆盖它很好。
即在 Spark 中实现 SCD 类型 2似乎太复杂了。在不需要状态处理的情况下,有没有更好的方法?即我有来自数据库的每日完整副本的数据,并希望对其进行重复数据删除。
sql - DB2:SQL:SCD type-2 表的粒度变化
我有一个 SCD 类型 2 的订单表,如下所示(订单粒度中的交货日期,它在交货日期更改时创建历史记录)
接下来我有一个行表,它也在下面的 type-2 行中(当数量更改或描述更改时,它有历史记录)
现在,作为设计更改的一部分,Delivery_Dt 粒度从订单级别更改为订单项级别,并且在重新设计的订单项表历史记录中需要正确捕获订单项级别更改 + 交货日期更改,如下所示
这可以简单地通过使用现有订单和行项目表的 SQL 语句来实现吗?
我正在 DB2 数据库中尝试这个。
sql - 来自 SCD2 维度变化的事实表中的重复行
好的,这里有一些简化的表格来帮助解释我的情况
事实清单创建:
昏暗列表
我遇到的问题是,当我将维度中的更新合并到我的基本事务事实表时,由于维度中的 SCD2 更改添加了新行,我最终在我的事实中出现重复条目(相同的 ListingBK)。处理这些情况的最佳方法是什么,我们的关键约束是我们希望事实中的每一行都指向维度表中的原始 Sk。
当前程序:
因此,我认为此过程适用于更新(仅提取前一天的数据),但是,最好的方法是进行单独的初始运行(从暗淡中提取所有数据),其中提取每条记录的初始行? 还是我错过了一些非常明显的东西,可以通过单个存储过程实现这一点?
sql - 使用 SQL 在 Redshift 表中创建 SCD 历史记录
问题
我有一个如下所示的起始表:
我正在尝试编写一个 SQL 查询,该查询将把这些数据写入一个类似格式的表中,但带有额外的装饰,表明记录何时过期以及哪些记录处于活动状态。结果将如下所示:
请注意,有 1000 种不同的标识符,其中一些在各种不同的时间范围内具有一个、两个、三个 + 不同的符号。
要求
- 任何时候第一次看到标识符时,都必须在最终表中创建它,并将今天的日期作为加载日期,并且加载日期为 2999-12-31,并且 activeflag=1
- 在第二天看到该标识符时,仅在符号已更改时才添加一行。如果有,则通过将前一行的 loadenddate 设置为此新行的 loaddate - 1 天和 activeflag = 0 来使前一行“过期”
- sql 查询(或多个查询)还需要能够每天在源表上重新运行,以便它们正确处理目标表中的现有数据以及目标表为空白(初始运行)
到目前为止我得到了什么
要最初加载(而不是重复),我有以下 SQL:
sql - 在 SCD2 表中合并跨时间跨度的行
我的下表来自 SCD2 表。从这个源表中,我只选择了几列,这导致几行看起来完全相似。我想删除不必要的行,那些包含相同数据的行,并让 ValidFrom 列显示第一个值,而 ValidTo 列显示“时间跨度组”中的最后一个值。
源数据:
我想要完成的是:
请注意,项目球最初的颜色是红色,然后是蓝色,然后又变回红色。根据我所学到的,这使事情变得更加复杂。
谢谢你的帮助。
apache-spark - 使用 pyspark 实现 SCD type2
我试图使用 pyspark 实现 SCD 类型 2 并将数据插入 Teradata 。我能够生成既有旧历史记录(数据库中已经存在)又有新记录的数据框,但是当我对那个数据框执行 spark.overwritewith truncatemode = true 时,我可以看到旧历史数据来自该数据框没有被插入,只有新的新记录被插入。例如下面是一个示例表和数据框。因此,如果在表中提升了员工,那么我们必须为新角色提供一个条目,并且我们必须维护该员工的旧详细信息。就像 Ray 从团队成员晋升为经理一样,决赛桌应该有 2 个条目,当前记录为 0 的团队成员和当前 ind 为 1 的新名称。
scala - Spark Scala FoldLeft 性能缓慢
您好我正在尝试在具有 280 列的数据框中进行 scdtype2 更新。
单独执行这需要 8 分钟。有什么办法可以优化吗?