Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在Spark中实现2类缓变尺寸(SCD2)_Apache Spark - Fatal编程技术网

Apache spark 如何在Spark中实现2类缓变尺寸(SCD2)

Apache spark 如何在Spark中实现2类缓变尺寸(SCD2),apache-spark,Apache Spark,我们希望使用SQL连接在Spark中实现SCD2。我从Github获得了参考资料 但这不是很清楚 有人能提供任何例子或参考来在spark中实现SCD2吗 问候,, 曼尼什语 就更新的Spark SQL而言,有点过时,但下面是一个示例 我使用Spark SQL测试了一个la Ralph Kimball,它工作正常,因此 可信赖的您可以运行它,它也可以工作——但需要文件逻辑和其他类似的功能 待添加-这是基于1.6的ETL SCD2逻辑的主体 语法,但在2.x中运行-这并不难,但需要跟踪 通过并生成

我们希望使用SQL连接在Spark中实现SCD2。我从Github获得了参考资料

但这不是很清楚

有人能提供任何例子或参考来在spark中实现SCD2吗

问候,, 曼尼什语

就更新的Spark SQL而言,有点过时,但下面是一个示例 我使用Spark SQL测试了一个la Ralph Kimball,它工作正常,因此 可信赖的您可以运行它,它也可以工作——但需要文件逻辑和其他类似的功能 待添加-这是基于1.6的ETL SCD2逻辑的主体 语法,但在2.x中运行-这并不难,但需要跟踪 通过并生成测试数据,并跟踪每个步骤:

实际编码:

就更新的Spark SQL而言,有点过时,但下面是一个示例 我使用Spark SQL测试了一个la Ralph Kimball,它工作正常,因此 可信赖的您可以运行它,它也可以工作——但需要文件逻辑和其他类似的功能 待添加-这是基于1.6的ETL SCD2逻辑的主体 语法,但在2.x中运行-这并不难,但需要跟踪 通过并生成测试数据,并跟踪每个步骤:

实际编码:


下面是使用独占连接方法在Spark(数据帧和SQL)中缓慢更改维度类型2的详细实现

假设源正在发送完整的数据文件,即旧记录、更新记录和新记录

步骤:

将最近的文件数据加载到STG表 从HIST表中选择所有过期记录

1. select * from HIST_TAB where exp_dt != '2099-12-31'
使用HIST.column=STG.column上的内部联接和过滤器,选择STG和HIST中未更改的所有记录,如下所示

2. select hist.* from HIST_TAB hist inner join STG_TAB stg on hist.key = stg.key where hist.column = stg.column
选择所有从STG_选项卡更改的新记录和更新记录,使用独占左连接和历史选项卡,并设置到期和生效日期,如下所示

3. select stg.*, eff_dt (yyyy-MM-dd), exp_dt (2099-12-31) from STG_TAB stg left join (select * from HIST_TAB where exp_dt = '2099-12-31') hist 
on hist.key = stg.key where hist.key is null or hist.column != stg.column
使用与STG表的独占左联接从HIST表中选择所有更新的旧记录,并设置其到期日期,如下所示:

4. select hist.*, exp_dt(yyyy-MM-dd) from (select * from HIST_TAB where exp_dt = '2099-12-31') hist left join STG_TAB stg 
on hist.key= stg.key where hist.key is null or hist.column!= stg.column
从1-4合并所有查询并将覆盖结果插入HIST表

1. select * from HIST_TAB where exp_dt != '2099-12-31'
可以在这里找到Scala和Pyspark中SCD类型2的更详细实现-


希望这有帮助

下面是使用独占连接方法在Spark(数据帧和SQL)中缓慢更改维度类型2的详细实现

假设源正在发送完整的数据文件,即旧记录、更新记录和新记录

步骤:

将最近的文件数据加载到STG表 从HIST表中选择所有过期记录

1. select * from HIST_TAB where exp_dt != '2099-12-31'
使用HIST.column=STG.column上的内部联接和过滤器,选择STG和HIST中未更改的所有记录,如下所示

2. select hist.* from HIST_TAB hist inner join STG_TAB stg on hist.key = stg.key where hist.column = stg.column
选择所有从STG_选项卡更改的新记录和更新记录,使用独占左连接和历史选项卡,并设置到期和生效日期,如下所示

3. select stg.*, eff_dt (yyyy-MM-dd), exp_dt (2099-12-31) from STG_TAB stg left join (select * from HIST_TAB where exp_dt = '2099-12-31') hist 
on hist.key = stg.key where hist.key is null or hist.column != stg.column
使用与STG表的独占左联接从HIST表中选择所有更新的旧记录,并设置其到期日期,如下所示:

4. select hist.*, exp_dt(yyyy-MM-dd) from (select * from HIST_TAB where exp_dt = '2099-12-31') hist left join STG_TAB stg 
on hist.key= stg.key where hist.key is null or hist.column!= stg.column
从1-4合并所有查询并将覆盖结果插入HIST表

1. select * from HIST_TAB where exp_dt != '2099-12-31'
可以在这里找到Scala和Pyspark中SCD类型2的更详细实现-


希望这有帮助

慢慢改变维度?这是一个很大的答案。希望你这样对待它,因为已经发生了3次投票,你能考虑接受答案吗?慢慢地改变维度?这是一个大的答案。希望你能如愿以偿地考虑到,既然已经发生了3次投票,你能考虑接受这个答案吗?