首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏最新最全的大数据技术体系

    SCD的三层

    5.5.3 SCD2(缓慢渐变类型2) 在源数据发生变化时,给维度记录建立一个新的**“版本”记录**,从而维护维度历史。SCD2不删除、不修改已存在的数据。SCD2也叫拉链表。 所以 SCD3 用的还是没有 SCD1 和 SCD2 那么普遍。它只适用于数据的存储空间不足并且用户接受有限历史数据的情况。 ?

    1K20发布于 2021-04-09
  • 来自专栏Hadoop数据仓库

    维度模型数据仓库(四) —— 初始装载

    有三种不同的SCD技术:SCD 类型1(SCD1),SCD类型2(SCD2),SCD类型3(SCD3): SCD1通过修改维度记录直接覆盖已存在的值,它不维护记录的历史。 SCD2在源数据发生变化时,给维度记录建立一个新的“版本”,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3保持维度记录的一个版本。它通过给某个数据单元增加多个列来维护历史。 SCD3可以有效的维护有限的历史,而不像SCD2那样维护全部历史。SCD3很少使用。它只适用于数据库空间不足并且用户接受有限维度历史的情况。         在本示例中,客户维度历史使用SCD1,产品维度历史的产品名称和产品类型属性使用SCD2。         虽然示例中只有产品维度使用SCD2,为了统一处理,使用清单(三)- 1里的脚本给所有维度表添加版本字段。

    84830编辑于 2022-12-02
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— ETL(二)

    SCD2在源数据发生变化时,给维度记录建立一个新的“版本”,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3保持维度记录的一个版本。它通过给某个数据单元增加多个列来维护历史。 SCD3可以有效维护有限的历史,而不像SCD2那样维护全部历史。SCD3很少使用。它只适用于数据库空间不足并且用户接受有限维度历史的情况。 在本示例中,客户维度历史的客户名称使用SCD1,客户地址使用SCD2,产品维度历史的产品名称和产品类型属性使用SCD2。 现在可以编写用于初始装载的脚本了。 客户地址、产品名称和产品分类使用SCD2,客户姓名使用SCD1。 select * from product_dim; 产品3的名称变更使用了SCD2,新增了产品4。如下图所示。 ?

    2.6K20发布于 2019-05-25
  • 来自专栏Hadoop数据仓库

    在Hive上实现SCD

    既然是数据仓库就离不开多维、CDC、SCD这些概念,于是尝试了一把在Hive上实现SCD1和SCD2。这有两个关键点,一个是行级更新,一个是生成代理键。 修改了第1条数据的name列、cty列和st列(name列按SCD2处理,cty列和st列按SCD1处理) 4. 修改了第4条数据的cty列和st列(按SCD1处理) 5. 修改了第5条数据的name列(按SCD2处理) (4)建立定期装载脚本scd_row_number.sql,内容如下: USE test; -- 设置日期变量 SET hivevar:pre_date {hivevar:max_date}) a LEFT JOIN tbl_stg b ON a.id=b.id WHERE b.id IS NULL OR a.name<>b.name); -- 处理SCD2 {hivevar:max_date}) a LEFT JOIN tbl_stg b ON a.id=b.id WHERE b.id IS NULL OR a.name<>b.name); -- 处理SCD2

    1.1K20发布于 2019-05-25
  • 来自专栏Hadoop数据仓库

    HAWQ取代传统数仓实践(三)——初始ETL(Sqoop、HAWQ)

    有三种不同的SCD技术:SCD 类型1(SCD1),SCD类型2(SCD2),SCD类型3(SCD3): SCD1 - 通过更新维度记录直接覆盖已存在的值,它不维护记录的历史。 SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3 – 通常用作保持维度记录的几个版本。 SCD3可以有效维护有限的历史,而不像SCD2那样保存全部历史。SCD3很少使用。它只适用于数据的存储空间不足并且用户接受有限维度历史的情况。         在传统数据仓库中,对于SCD1一般就直接UPDATE更新属性,而SCD2则要新增记录。 但HAWQ没有提供UPDATE、DELETE等DML操作,因此对于所有属性的变化均增加一条记录,即所有维度属性都按SCD2方式处理。 3.

    1.8K71发布于 2018-01-03
  • 来自专栏最新最全的大数据技术体系

    知行教育大数据分析数仓项目_面试题精华版

    例如: 看板一的咨询表,访问量表, 看板二的意向表,线索表 看板三的线索表, 意向表(申诉表) 看板四的意向表 看板五的 学生请假申请表,学生打卡记录表 20.简述SCD2和拉链表的区别和联系 SCD2:记录全量历史变更,SCD2记录数据的方式可以增加字段,或者增加表, 拉链表只能增加表 拉链表是SCD2模式中的一种,通过增加临时表记录全部历史版本。

    1.8K20发布于 2021-04-09
  • 来自专栏Hadoop数据仓库

    Greenplum 实时数据仓库实践(6)——实时数据装载

    SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。 在本示例中,客户维度历史的客户名称使用SCD1,客户地址使用SCD2,产品维度的两个属性,产品名称和产品类型都使用SCD2保存历史变化数据。 两种操作,那么是先处理SCD2,还是先处理SCD1呢? 因此从功能上说,SCD1和SCD2的处理顺序并不关键,只需要记住对SCD1的字段,任意版本的值都正确,而SCD2的字段需要跟踪所有版本。从性能上看,先处理SCD1应该更好些,因为更新的数据行更少。 本示例我们先处理SCD2

    3.2K20编辑于 2021-12-29
  • 来自专栏Hadoop数据仓库

    维度模型数据仓库(五) —— 定期装载

    源数据 数据仓库表 抽取模式 维度历史装载类型 customer customer_dim 整体、拉取 address列上SCD2 name列上SCD1 product product_dim 整体、拉取 SCD2 sales_order order_dim CDC(每天)、拉取 唯一订单号 sales_order_fact CDC(每天)、拉取 每日销售订单 n/a date_dim n/a 预装载 客户地址、产品名称和产品分类使用SCD2,客户姓名使用SCD1。 只有前一天的销售订单被装载到order_dim和sales_order_fact表。                     expiry_date: 2200-01-01 9 rows in set (0.00 sec)         客户6的街道地址变更使用了SCD2      expiry_date: 2200-01-01 5 rows in set (0.00 sec)         产品3的名称变更使用了SCD2

    59030编辑于 2022-12-02
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(四)

    rds.cdc_time SELECT last_load, ${hivevar:cur_date} FROM rds.cdc_time; -- 装载customer维度 -- 设置已删除记录和地址相关列上SCD2 (a.shipping_state <=> b.shipping_state) )); -- 处理customer_street_addresses列上SCD2的新增行 WHERE customer_state = 'PA' ; -- 装载product维度 -- 设置已删除记录和product_name、product_category列上SCD2 b.product_name OR a.product_category <> b.product_category)); -- 处理product_name、product_category列上SCD2

    62420发布于 2019-05-25
  • 来自专栏最新最全的大数据技术体系

    拉链表

    4.3.1.8.1.1 拉链表回顾 拉链表就是之前我们讲过的SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。

    74320发布于 2021-04-09
  • 来自专栏Hadoop数据仓库

    Kettle构建Hadoop ETL实践(六):数据转换与装载

    SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3 – 通常用作保持维度记录的几个版本。 在本示例中,客户维度历史的客户名称使用SCD1,客户地址使用SCD2,产品维度的两个属性,产品名称和产品类型都使用SCD2保存历史变化数据。 如果一个表的不同字段有的采用SCD2,有的采用SCD1,就像客户维度表这样,那么是先处理SCD2,还是先处理SCD1呢?为了回答这个问题,我们看一个简单的例子。 本示例我们先处理SCD2。 第一句的update语句设置已删除记录和customer_street_addresses列上scd2的过期。 第二句的insert语句处理customer_street_addresses列上scd2的新增行。这条语句插入SCD2的新增版本行。子查询中用inner join获取当期版本号和源数据信息。

    5.1K47发布于 2020-10-26
  • 来自专栏Hadoop数据仓库

    维度模型数据仓库(六) —— 增加列

    然后进一步说明如何在客户维度和销售订单事实表上添加列,并在新列上应用SCD2。假设需要在客户维度中增加送货地址属性,并在销售订单事实表中增加数量度量值。         shipping_address , shipping_zip_code , shipping_city , shipping_state FROM source.customer ; /* 在所有地址列上 SCD2 product_code , product_name , product_category FROM source.product ; /* 在 product_name 和 product_category 列上 SCD2 如果还想维护送货地址的历史数据,就要在送货地址列上应用SCD2。还假设数量在销售订单源数据中是有效的,并且数据仓库中已经存在的销售订单不做更新。        

    1K30编辑于 2022-12-02
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(十三)

    这里使用Hive的窗口函数row_number正确地选取了产品发布时的生效日期,而不是一个SCD2行的生效日期。 run /root/set_time.sql -- 装载customer维度 -- 设置已删除记录和地址相关列上SCD2的过期,用<=>运算符处理NULL值。 (a.shipping_state <=> b.shipping_state) )); -- 处理customer_street_addresses列上SCD2 WHERE customer_state = 'PA' ; -- 装载product维度 -- 设置已删除记录和product_name、product_category列上SCD2 b.product_name OR a.product_category <> b.product_category)); -- 处理product_name、product_category列上SCD2

    51120发布于 2019-05-25
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(一)

    本节说明如何在客户维度表和销售订单事实表上添加列,并在新列上应用SCD2,以及对定时装载脚本所做的修改。假设需要在客户维度中增加送货地址属性,并在销售订单事实表中增加数量度量值。 rds.cdc_time SELECT last_load, ${hivevar:cur_date} FROM rds.cdc_time; -- 装载customer维度 -- 设置已删除记录和地址相关列上SCD2 (a.shipping_state <=> b.shipping_state) )); -- 处理customer_street_addresses列上SCD2的新增行 INSERT customer_sk),0) sk_max FROM customer_dim) t2; -- 装载product维度 -- 设置已删除记录和product_name、product_category列上SCD2 b.product_name OR a.product_category <> b.product_category)); -- 处理product_name、product_category列上SCD2

    67230发布于 2019-05-25
  • 使用GPT-3.5-turbo辅助优化数仓缓慢变化维处理的实践与思考

    具有强大的代码生成和理解能力能够理解数据工程场景和SQL优化可以生成多种方言的SQL代码能提供优化建议和替代方案实现方案设计与优化传统SCD类型2实现的问题典型的SCD类型2实现需要处理多种操作:-- 传统SCD2 使用MERGE语句优化处理逻辑AI生成的优化处理逻辑:-- AI优化后的SCD2处理语句WITH source_data AS ( SELECT user_id, name

    54032编辑于 2025-09-12
  • (三)ODS/明细层落地设计要点:把数据接入层打造成“稳定可运维”的基础设施

    常见的历史数据管理方式主要有三种:快照(Snapshot)、拉链表(SCD2)以及变更明细(ChangeLog)。 1快照(Snapshot)保存某个时间点的完整状态,例如:每日账户余额商品库存用户等级优点:任意日期状态都可以直接查询缺点:存储成本高2拉链表(SCD2)拉链表记录数据生效区间,例如:展开代码语言:TXTAI 因此,对于组织结构、用户属性、商品分类等可能发生变化的维度,通常都建议使用SCD2(拉链表)来保留历史状态。

    16610编辑于 2026-03-12
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(三)

    rds.cdc_time SELECT last_load, ${hivevar:cur_date} FROM rds.cdc_time; -- 装载customer维度 -- 设置已删除记录和地址相关列上SCD2 (a.shipping_state <=> b.shipping_state) )); -- 处理customer_street_addresses列上SCD2的新增行 INSERT customer_dim WHERE customer_state = 'PA' ; -- 装载product维度 -- 设置已删除记录和product_name、product_category列上SCD2 b.product_name OR a.product_category <> b.product_category)); -- 处理product_name、product_category列上SCD2

    44120编辑于 2022-05-07
  • 来自专栏Hadoop数据仓库

    OushuDB入门(五)——ETL篇

    有三种不同的SCD技术:SCD 类型1(SCD1),SCD类型2(SCD2),SCD类型3(SCD3): SCD1 - 通过更新维度记录直接覆盖已存在的值,它不维护记录的历史。 SCD2 - 在源数据发生变化时,给维度记录建立一个新的“版本”记录,从而维护维度历史。SCD2不删除、修改已存在的数据。 SCD3 – 通常用作保持维度记录的几个版本。 SCD3可以有效维护有限的历史,而不像SCD2那样保存全部历史。SCD3很少使用。它只适用于数据的存储空间不足并且用户接受有限维度历史的情况。 在传统数据仓库中,对于SCD1一般就直接UPDATE更新属性,而SCD2则要新增记录。 但OushuDB没有提供UPDATE、DELETE等DML操作,因此对于所有属性的变化均增加一条记录,即所有维度属性都按SCD2方式处理。

    1.6K20发布于 2019-05-25
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术(十)

    SELECT last_load, ${hivevar:cur_date} FROM rds.cdc_time; -- 装载customer维度 -- 设置已删除记录和地址相关列上SCD2 (a.shipping_state <=> b.shipping_state) )); -- 处理customer_street_addresses列上SCD2 WHERE customer_state = 'PA' ; -- 装载product维度 -- 设置已删除记录和product_name、product_category列上SCD2 b.product_name OR a.product_category <> b.product_category)); -- 处理product_name、product_category列上SCD2

    43830发布于 2019-05-25
  • 来自专栏Hadoop数据仓库

    基于Hadoop生态圈的数据仓库实践 —— 进阶技术

    rds.cdc_time SELECT last_load, ${hivevar:cur_date} FROM rds.cdc_time; -- 装载customer维度 -- 设置已删除记录和地址相关列上SCD2 (a.shipping_state <=> b.shipping_state) )); -- 处理customer_street_addresses列上SCD2的新增行 INSERT customer_dim WHERE customer_state = 'PA' ; -- 装载product维度 -- 设置已删除记录和product_name、product_category列上SCD2 b.product_name OR a.product_category <> b.product_category)); -- 处理product_name、product_category列上SCD2

    72310发布于 2019-05-25
领券