首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《用户画像:方法论与工程化解决方案》读书笔记第3章

维度表开发的过程中,经常会遇到维度缓慢变化的情况,对于缓慢变化维一般会采用: ①重写维度值,对历史数据进行覆盖; ②保留多条记录,通过插入维度列字段加以区分; ③开发日期分区表,每日分区数据记录当日维度的属性...下面通过一个案例介绍如何通过Hive的ETL工作完成ID-Mapping的数据清洗工作。 缓慢变化维是在维表设计中常见的一种方式,维度并不是不变的,随时间也会发生缓慢变化。...如用户的手机号、邮箱等信息可能会随用户的状态变化而改变,再如商品的价格也会随时间变化而调整上架的价格。因此在设计用户、商品等维表时会考虑用缓慢变化维来开发。...同样,在设计ID-Mapping表时,由于一个用户可以在多个设备上登录,一个设备也能被多个用户登录,所以考虑用缓慢变化维表来记录这种不同时间点的状态变化(图3-9)。...image.png 拉链表是针对缓慢变化维表的一种设计方式,记录一个事物从开始到当前状态的全部状态变化信息。 在上图中,通过拉链表记录了userid每一次关联到不同cookieid的情况。

80620

基于Hive数据仓库的标签画像实战

维度表开发的过程中,经常会遇到维度缓慢变化的情况,对于缓慢变化维一般会采用:①重写维度值,对历史数据进行覆盖;②保留多条记录,通过插入维度列字段加以区分;③开发日期分区表,每日分区数据记录当日维度的属性...下面通过一个案例介绍如何通过Hive的ETL工作完成ID-Mapping的数据清洗工作。 缓慢变化维是在维表设计中常见的一种方式,维度并不是不变的,随时间也会发生缓慢变化。...如用户的手机号、邮箱等信息可能会随用户的状态变化而改变,再如商品的价格也会随时间变化而调整上架的价格。因此在设计用户、商品等维表时会考虑用缓慢变化维来开发。...同样,在设计ID-Mapping表时,由于一个用户可以在多个设备上登录,一个设备也能被多个用户登录,所以考虑用缓慢变化维表来记录这种不同时间点的状态变化。...拉链表是针对缓慢变化维表的一种设计方式,记录一个事物从开始到当前状态的全部状态变化信息。 在上图中,通过拉链表记录了userid每一次关联到不同cookieid的情况。

99530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用户画像 | 标签数据存储之Hive真实应用

    维度表开发的过程中,经常会遇到维度缓慢变化的情况,对于缓慢变化维一般会采用:①重写维度值,对历史数据进行覆盖;②保留多条记录,通过插入维度列字段加以区分;③开发日期分区表,每日分区数据记录当日维度的属性...下面通过一个案例介绍如何通过Hive的ETL工作完成ID-Mapping的数据清洗工作。 缓慢变化维是在维表设计中常见的一种方式,维度并不是不变的,随时间也会发生缓慢变化。...如用户的手机号、邮箱等信息可能会随用户的状态变化而改变,再如商品的价格也会随时间变化而调整上架的价格。因此在设计用户、商品等维表时会考虑用缓慢变化维来开发。...同样,在设计ID-Mapping表时,由于一个用户可以在多个设备上登录,一个设备也能被多个用户登录,所以考虑用缓慢变化维表来记录这种不同时间点的状态变化(图3-9)。...拉链表是针对缓慢变化维表的一种设计方式,记录一个事物从开始到当前状态的全部状态变化信息。 在上图中,通过拉链表记录了userid每一次关联到不同cookieid的情况。

    1.1K10

    一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

    2、维度表设计原则 (1)维度属性尽量丰富,为数据使用打下基础 (2)给出详实的、富有意义的文字描述 (3)区分数值型属性和事实 (4)沉淀出通用的维度属性,为建立一致性维度做好铺垫 (5)退化维度(DegenerateDimension...) (6)缓慢变化维(Slowly Changing Dimensions) 3、维度表设计方法 ---- 1、什么是维度表?...维度表设计原则 维度的作用一般是查询约束、分类汇总以及排序等,我们在进行维度表设计时,应当提前考虑: (1)维度属性尽量丰富,为数据使用打下基础 比如淘宝商品维度有近百个维度属性,为下游的数据统计、分析...(6)缓慢变化维(Slowly Changing Dimensions) 维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD),缓慢变化维一般使用代理健作为维度表的主健...缓慢变化维的三种处理方式: ① TYPE1 直接覆盖原值 适用于:不看历史数据,简单粗暴 ② TYPE2 拉链表 需要在维度行再增加三列:有效日期、截止日期、行标识(可选)。

    2.8K20

    用户画像 | 标签数据存储之Hive真实应用

    维度表开发的过程中,经常会遇到维度缓慢变化的情况,对于缓慢变化维一般会采用:①重写维度值,对历史数据进行覆盖;②保留多条记录,通过插入维度列字段加以区分;③开发日期分区表,每日分区数据记录当日维度的属性...下面通过一个案例介绍如何通过Hive的ETL工作完成ID-Mapping的数据清洗工作。 缓慢变化维是在维表设计中常见的一种方式,维度并不是不变的,随时间也会发生缓慢变化。...如用户的手机号、邮箱等信息可能会随用户的状态变化而改变,再如商品的价格也会随时间变化而调整上架的价格。因此在设计用户、商品等维表时会考虑用缓慢变化维来开发。...同样,在设计ID-Mapping表时,由于一个用户可以在多个设备上登录,一个设备也能被多个用户登录,所以考虑用缓慢变化维表来记录这种不同时间点的状态变化(图3-9)。...拉链表是针对缓慢变化维表的一种设计方式,记录一个事物从开始到当前状态的全部状态变化信息。 在上图中,通过拉链表记录了userid每一次关联到不同cookieid的情况。

    1.9K20

    数据建模-维度建模-维度设计

    (四)维度变化的处理 数据仓库的重要特点之一是反应历史变化,所以如何处理维度的变化是维度设计的重要工作之一。在Kimball的理论中,有三种缓慢变化的处理方式以及衍生出来的几种其他处理方式。...最后,简单介绍微型维度在避免维度快速增长方面的作用。 三、第三部分 01 缓慢变化维 仓库的重要特点之一是反应历史变化,所以如何处理维度的变化是维度设计的重要工作之一。...但在阿里巴巴数据仓库建设的实践过程中,虽然我们使用的是Kimball的维度建模的理论,但实际并未使用代理键。我们是如何处理缓慢变化维度,如何记录变化历史的呢?为什么不使用代理键呢?  ...第二点原因是,使用代理键会大大增加ETL的复杂性,对ETL任务的开发和维护成本很高。   下面接着讨论不使用代理键如何处理缓慢变化维度。阿里巴巴数据仓库实践中处理缓慢变化维度的方法是快照方式。...处理缓慢变化维度的方式,简单而有效,开发和维护成本低。   2. 使用方便,理解性好。数据使用方只需要限定日期即可取到当天的快照数据。

    64430

    系列 | 漫谈数仓第二篇NO.2 数据模型(维度建模)

    1.2 维度表 维度表,一致性维度,业务过程的发生或分析角度,我们主要关注下退化维度和缓慢变化维。...(1)退化维度(DegenerateDimension) 在维度类型中,有一种重要的维度称作为退化维度,亦维度退化一说。这种维度指的是直接把一些简单的维度放在事实表中。...(2)缓慢变化维(Slowly Changing Dimensions) 维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD)。...④ 混合方式 可根据实际业务场景,混合或选择使用以上三种方式,以快速方便而又准确的分析历史变化情况。...ER关系模型上的衍生,同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。

    1.1K20

    系列 | 漫谈数仓第二篇NO.2 数据模型(维度建模)

    1.2 维度表 维度表,一致性维度,业务过程的发生或分析角度,我们主要关注下退化维度和缓慢变化维。...(1)退化维度(DegenerateDimension) 在维度类型中,有一种重要的维度称作为退化维度,亦维度退化一说。这种维度指的是直接把一些简单的维度放在事实表中。...(2)缓慢变化维(Slowly Changing Dimensions) 维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD)。...④ 混合方式 可根据实际业务场景,混合或选择使用以上三种方式,以快速方便而又准确的分析历史变化情况。...ER关系模型上的衍生,同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。

    2.8K43

    缓慢变化维度

    在正式开始之前,先解释一下什么是缓慢变化维度。笔者个人理解,缓慢变化维度其实就是指在维度表中那些会随着时间变化的字段,比如用户基本资料。 注:缓慢是一个相对的概念。...这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。...0x02 如何处理SCD问题 在《数据仓库工具箱》这本书中一共列举了5中基础缓慢变化维类型和3种混合缓慢变化维类型。我们只分享一下熟悉的4种类型。...TYPE 2:增加新行 数据仓库系统的目标之一是正确地表示历史。当提及缓慢变化维度属性时,类型2就是主要应用于支持这一需求的技术。...TYPE 3:增加新属性 尽管类型2能够区分历史情况,但它无法保证能够将新属性值和过去的历史事实关联,反之亦然。 这时候就可以用到类型3。 注意:这种类型使用哪种场景呢?

    2.2K31

    一次 Javac 编译速度缓慢的 JDK Bug 定位

    背景 Flink 提供了从 Tuple0 ~ Tuple25 的 Tuple 类供用户选择,顾名思义,每个 Tuple 对象分别可以存储 0 个 ~ 25 个任意类型的字段,例如图 1 展示了 Tuple2...图 1:Tuple2 的类定义,有着 f0、f1 两个泛型字段 但是,随着 Tuple 维度的增多,我们观察到了一个诡异的现象:虽然需要编译的源码文件增加个数不多,但是编译所需时间越来越长,且并非线性增长...初探 为了找出 Tuple 数与编译时间的关系,我们还写了一个自动化脚本,每次向源码里增加 1 个更高维度的 Tuple 类(例如依次放入 Tuple26.java、Tuple27.java 等等),观察项目的构建速度...,并绘制了如下的曲线(图中公式使用 Excel 的趋势线进行拟合),见下图 2: 图 2:Tuple 总数与编译时间的关系 可以看到,编译时间随 Tuple 数变化的曲线,完美符合三次函数,即该算法的时间复杂度约为...在这个 2014 年就提出的 JEP-215 中,开发者设计了一种新的 javac 方法类型检测机制 TA(Tiered Attribution)来代替现有的 SA(Speculative Attribution

    78410

    聊聊维度建模的灵魂所在——维度表设计

    前言 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化、维度层次、维度一致性、维度整合和拆分等)都会直接关系到维度建模的好坏,因此良好的维表设计就显得至关重要,今天就让我们就一起来探究下关于维表设计的相关概念和一些技术...因此在维度建模中,这一现象称为缓慢变化的维度,简称 缓慢变化维(slowly changing dimension, SCD)。...这实际上也涉及了下面要分享的缓慢变化维的几种处理办法。 1. 重写维度值 当一个维度值属性发生变化时,重写维度值方法直接用新值覆盖旧值。...因此维度设计人员只在必要情况下使用此方法,同时需要告知下游分析人员。 采用重写维度值方法的维度表和事实表变化如图: ? 采用重写维度值方法处理变化维示例 2....在实际整合中,同一个维度整合需要考虑如下问题: 命名规范:要确保一致和统一 字段类型 :统一整合为一个字段类型 字段编码和含义:编码及含义要整合为一致 与整合相对的是拆分 对于大的集团公司来说,以中石化为例

    1.6K40

    数据仓库(09)数仓缓慢变化维度数据的处理

    数据仓库的重要特点之一是反映历史变化,所以如何处理维度的变化是维度设计的重要工作之一。...缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化,与数据增长较为快速的事实表相比,维度变化相对缓慢。阴齿这个就叫做缓慢变化维。   ...这里介绍的就是这些维度变化的处理,这边整理了一下目前主流的缓慢变化维的处理方式。 原样保留或者重写,这种方式理论上都是取最新的值作为维度的最终的取值,每个维度保留一条数据。...这种处理方式是最简单的,直接将原系统的维度同步过来使用就可以,不用做过多的处理。 插人新的维度行,每当维度发生变化的时候,插入新增的一行。...不过按照个人的开发经验,不恨很建议采用,具体要根据业务实际情况来选择。 极限存储历史拉链表,这种方式是方式2的优化版,就是当新的维度行与旧的维度行变化前后一致的时候,会合并一条。

    61440

    一次 Javac 编译速度缓慢的 JDK Bug 定位

    背景 Flink 提供了从 Tuple0 ~ Tuple25 的 Tuple 类供用户选择,顾名思义,每个 Tuple 对象分别可以存储 0 个 ~ 25 个任意类型的字段,例如图 1 展示了 Tuple2...初探 为了找出 Tuple 数与编译时间的关系,我们还写了一个自动化脚本,每次向源码里增加 1 个更高维度的 Tuple 类(例如依次放入 Tuple26.java、Tuple27.java 等等),观察项目的构建速度...,并绘制了如下的曲线(图中公式使用 Excel 的趋势线进行拟合),见下图 2: 2.png 可以看到,编译时间随 Tuple 数变化的曲线,完美符合三次函数,即该算法的时间复杂度约为 O(n^3)。...在这个 2014 年就提出的 JEP-215 中,开发者设计了一种新的 javac 方法类型检测机制 TA(Tiered Attribution)来代替现有的 SA(Speculative Attribution...通过修改 JAVA_HOME 环境变量,可以让 Maven 选择使用不同的 JDK 版本进行编译,我们修改为 JDK 11 的路径后,重新进行编译,并再次进行采样,结果发现类型推断已经不再是占用 CPU

    2.1K51

    Javac 编译速度缓慢的 JDK Bug 定位

    背景 Flink 提供了从 Tuple0 ~ Tuple25 的 Tuple 类供用户选择,顾名思义,每个 Tuple 对象分别可以存储 0 个 ~ 25 个任意类型的字段,例如图 1 展示了 Tuple2...图 1:Tuple2 的类定义,有着 f0、f1 两个泛型字段 但是,随着 Tuple 维度的增多,我们观察到了一个诡异的现象:虽然需要编译的源码文件增加个数不多,但是编译所需时间越来越长,且并非线性增长...初探 为了找出 Tuple 数与编译时间的关系,我们还写了一个自动化脚本,每次向源码里增加 1 个更高维度的 Tuple 类(例如依次放入 Tuple26.java、Tuple27.java 等等),观察项目的构建速度...,并绘制了如下的曲线(图中公式使用 Excel 的趋势线进行拟合),见下图 2: 图 2:Tuple 总数与编译时间的关系 可以看到,编译时间随 Tuple 数变化的曲线,完美符合三次函数,即该算法的时间复杂度约为...在这个 2014 年就提出的 JEP-215 中,开发者设计了一种新的 javac 方法类型检测机制 TA(Tiered Attribution)来代替现有的 SA(Speculative Attribution

    61130

    大数据仓库开发规范示例

    该层使用DWD层数据,维度数据,对业务上有关联的实体做连接,形成统一粒度的,跨业务流程的,多业务实体的,轻度汇总数据。...数据流向如下图所示: 2. 数据类型规范 在保障数据不失真,且不会增加数据存储复杂度,不增加数据处理计算量的情况下,尽量减少数据类型的数量,兼容原始数据原有的类型。...统计周期:y表示年,m表示月,w表示周,d表示天,h表示小时,mi表示分钟 维度类型:缓慢变化维(scd),非缓慢变化维 3....DIM设计规范 ① 命名规则 DIM表命名规则:dim_[主题域][维度类型][维度],维度统一库名,对于有主题域来源,通过表名识别主题域 示例:dim.dim_doris_scd_load,其中dim...表示维度的库名,doris 表示AP域,scd 表示缓慢变化维,load表示导入维度 ② 处理内容 维度的一致性和准确性 数据行中,为空维度的兼容 缓慢变化维 7.

    8700

    数据仓库②-数据仓库与数据集市建模

    维表不满足规范化设计(不满足3NF);2. 事实表也不满足规范化设计(1NF都不满足); 3....使用它主要是为了能够处理"缓慢变化的维度",本文后面会仔细分析这个问题,这里不纠结。...缓慢变化维度问题 虽然,维表的数据比事实表更稳定。但不论如何维度在某些时候总会发生一些变化。在之前曾抛出一个问题:为什么维度建模后的关系不是***ID,而是***Key了。...这样做的目的其实就是为了解决一种被称为缓慢维度变化(slowly changing dimension)的问题。在维度变化后,一部分历史信息就被丢掉了。比如张三是某公司会员。...但仅仅这么做还是不够的,代理码需要配合时间戳,以及行标识符使用才能解决缓慢维度变化的问题。如下CUSTOMER表使用该方法避免缓慢维度变化: ?

    5.3K72

    如何使用postgis做一个高可用的附近的人服务?

    技术选择上,你选择了最优,你就节约了时间和成本,人生苦短,作为使用者没必要在一些半成品上浪费时间。postgresql本身是最优秀的开源RDBMS,postgis是功能最多、最成熟的开源gis数据库。...基本数据结构如下: 有三个比较重要的点 通过create extension语句创建postgis插件,每个库只能创建一次 创建一个gis类型字段,支持POINT、POLYGON等多种数据类型,我们后续的排序和计算都将使用此字段...但万变不离其宗,这些花拳绣腿会引入额外的复杂性,远不如简单的自定义路由来的方便快捷,我们引入节点权重的意义就在这里,如某些节点因为IO等运算缓慢,就可以降低其权重来解决。...比如查询一批拥有"逗逼"标签的人 我们采用pg的另外一个原因就是,它的数据类型非常丰富,这在使用中就显得特别简洁和方便。pg是一个学术派很浓的数据库,能够试用一些最前沿功能。...这个比较简单,可以使用脚本轮训检测,也可以使用repmgr的主动通知功能,构造事件写入配置中心。

    2.7K50

    《大数据之路》读书笔记:维度设计

    但代理键是不具有业务含义的键,一般用于处理缓慢变化维;自然键是具有业务含义的键。比如商品,在ETL过程中会生成商品维表唯一标识的代理键,但没有业务含义。商品本身的自然键是商品ID。...二、维度的基本设计方法 维度的设计就是确定维度属性的过程,书中用淘宝的商品维度为例对维度设计进行说明: 1、选择维度或新建维度。 2、确定主维表。这里的主维表一般是ODS表,直接与业务系统同步。...维度设计高级主题 一、维度整合 维表整合的内容: 命名规范统一 字段类型统一 公共代码及代码值统一 业务含义相同的表统一 业务含义相同的表统一,有以下几种集成方式: 采用主从表的设计方式将两个表或多个表都有的字段放在主表...维度变化 一、缓慢变化维 数据仓库的重要特点之一反映历史变化,所以如何处理维度的变化是维度设计的重要工作之一。 第一种处理方式:重写维度值。不需要保留历史数据。...三、极限存储 历史拉链存储就是处理维度模型中缓慢变化的一种方式,通过新增两个时间戳字段(start_dt和end_dt),将所有以天为粒度的变更数据记录下来。通常分区字段也是时间戳字段。

    82310

    一文读懂如何处理缓慢变化的维度(SCD)

    多年来,数据处理程序一直面临着处理缓慢变化的维度而不丢失其以前的历史记录以及保留对事实表的关系引用的挑战。Kimball方法提出了几种有效处理缓慢变化维度(简称SCD)的方法。...经过仔细考虑,数据工程提出了三个选项来管理缓慢变化的维度:SCDType1、SCDType2和SCDType3。” 在我们进入每个选项之前,让我们了解客户维度的数据结构。...此外,还添加了“状态”列来标记记录是最新的还是已过期地位。使用SCD类型2方法的客户维度的前后图像如下所示。 我们现在将了解如何使用delta框架来实现SCD类型2。...使用SCD类型2方法,可以按时间顺序跟踪随时间变化的历史记录,并按时间顺序维护对事实表的引用。必须承认,与SCDType1相比,其实现有点棘手。...如果您讨厌SCDType1的局限性并且发现SCDType2难以实施和管理,那么这是一个很好的权衡。 在许多方面,SCD2型通常被认为是实现缓慢变化维度的主要技术。

    68622

    数据仓库指北

    数据仓库的基础必备问题 2. 数据仓库的几种数据表 3. 数据仓库分层设计及各层作用 4. 数据仓库几种数据模型 5. 维度建模 一、 灵魂十二问 Q1:大数据的数据来源?...指的是数据仓库维度表中,那些随着时间会缓慢发生变化的维度,但是变化又不明显,即维度值变化不频繁的维度。...(PS:由于篇幅问题,这次不在这里详述,下次有空我再安排一篇文章细讲缓慢变化维和拉链表设计实现) Q10:什么是次留用户,7日留存?...,同样的IO可以读取更多的事实表记录,整型字段做外键关联效率也高,提升性能; ③使用代理键可用来处理缓慢变化维的情况,例如拉链表。...维度表 维度表是存放着维度属性的集合,维度数据固定或者变化缓慢,且数据量不大,把维度看成是分析数据的角度,就是按什么角度来分析数据 4.

    1.3K20
    领券