《阿里大数据之路》研读笔记(2)

news2024/11/14 4:19:46

前面的笔记地址:

《阿里大数据之路》研读笔记(1)_后季暖的博客-CSDN博客

 

 

 

规范化和反规范化总结就是 规范化让总的单一维度变成多个维度 然后每个维度就是一张表这样 适合OLTP 可以参考三范式 这样是为了减少冗余 比如一个商品有多个类目(类目还有一些相关的字信息字段) ,属于多个行业(行业也带有相关的信息字段)这样可以直接把类目和行业各拆分成一张表 然后在商品表用两张维表的主键引用即可 这样能减少冗余 但是查询会比较缓慢 因为要join

所以反规范化在一定条件下适合OLAP 把这些需要的字段都放在一个表中 冗余就冗余 因为存储成本相对不高

这里解释下一致性上卷 比如一个类目对应多个商品 那么往往类目维度就是商品维度的子集 因为类目维度的字段可能更少 商品维度的字段可能更细一些 但是商品肯定包含它这个类目的所有属性 所以说类目是商品的子集 如果类目维度是公共的 基于类目维度 也可以 大概是这个意思

 

 

实际生产中常见的用拉链表处理缓慢变化维:

(2条消息) 拉链表与缓慢变化维_缓慢变化维和拉链表_码皮精的博客-CSDN博客

 

 接下来先详细讲讲代理键的优劣 以及它为什么能处理缓慢变化维

代理键优缺点

优点

  • 使用代理键能够使数据仓库环境对操作型环境的变化进行缓冲。也就是说,当数据仓库需要对来自多个操作型系统的数据进行整合时,这些系统中的数据有可能缺乏一致的关键字编码,即有可能出现重复,这时代理关键字可以解决这个问题。(在多个系统或者数据源的数据整合时,代理键能让每一条数据有一个唯一的id指代它,这样就可以避免整合时出现相同的数据没有覆盖还存在重复的情况。)
  • 使用代理键可以带来性能上的优势。和自然关键字相比,代理关键字很小,是整型的,可以减小事实表中记录的长度。这样,同样的IO就可以读取更多的事实表记录。另外,整型字段作为外键连接的效率也很高。
  • 使用代理键可以建立一些不存在的维度记录,例如“不在促销之列”,“日期待定”,“日期不可用”等维度记录。
  • 使用代理键可以用来处理缓慢变化维。维度表数据的历史变化信息的保存是数据仓库设计的实施中非常重要的一部分。Kimball的缓慢变化维处理策略的核心就是使用代理键。

缺点

  • 对于每个表的记录生成稳定的全局唯一的代理键难度很大,此处稳定指某条记录每一次生成的代理键都相同。(不同数据源假如相同的数据想让它们代理键相同比较困难)
  • 第二个原因是,使用代理键会大大增加 ETL 的复杂性,对 ETL 任务的开发和维护成本很高。

 

分月做历史拉链表如果这里理解不了 可以看:拉链表(一) - 知乎 (zhihu.com)

看完第一个可以看稍微复杂点的第二个(如何通过binlog采集MySQL的数据并且按月分区的方式实现拉链表):拉链表(二) - 知乎 (zhihu.com)

总结就是

每月2日:首先把上个月未失效的数据的end_date都改为这个月的1号(让它失效)

truncate table user_link_tmp;
 
-- 这里举例 此时是7月2日 要修正整个6月的数据
-- 把拉链表所有6月30日未失效的数据失效日期改为7月1日
insert into table user_link_tmp;
select
    id, 
    name,
    phone,
    sing_up_date,
    modify_time,
    start_date,
    '2019-07-01' as end_date
from user_link
where start_date<='2019-06-30' 
and start_date>='2019-06-01' 
and end_date='9999-12-31'

然后再去查原表(原表不会因为上面的改动而变化!)把上一月的所有未失效的数据归并到这个月1日的分区中,把start_date改为1日,并且把end_date写成9999-12-31

-- 把6月未失效,并且今天也未失效的数据,改为开始日期7月1日,失效日期9999-12-31
insert into table user_link_tmp
select 
    id,
    name,
    phone,
    sing_up_date,
    modify_time,
    '2019-07-01' as start_date,
    '9999-12-31' as end_date
from user_link
where start_date<='2019-06-30' 
and start_date>='2019-06-01' 
and end_date='9999-12-31'
and id not in
(
    select 
        id 
    from user_binlog 
    where pt_days='2019-07-01' 
    and type in ('update','delete') 
    group by id
); 

并将1号新增的数据也写入start_date为1日,end_date为9999-12-31的分区

-- 把7月1日新的数据写入到临时表中
insert into table user_link_tmp
select 
    a.id,
    a.name,
    a.phone,
    a.sing_up_date,
    a.modify_time,
    '2019-07-01' as start_date,
    '9999-12-31' as end_date
from
(
    select 
        id,
        name,
        phone,
        sing_up_date,
        modify_time
    from user_binlog
    where pt_days='2019-07-01'
) a
inner join
(
    select 
        id,
        max(modify_time)
    from user_binlog
    where pt_days='2019-07-01'
    and type in ('insert','update') 
    group by id
) b
on a.id=b.id
and a.modify_time=b.modify_time

这里就有个疑问 之前失效的数据怎么办呢?失效的数据当然还要 不用动就好

接下来把临时表的数据都重新覆盖到拉链表

最后删除上个月所有结束时间为9999-12-31分区的数据

-- 将临时表中的数据覆盖到拉链表中。
insert overwrite table user_link partition(start_date,end_date)
select 
    id,
    name,
    phone,
    sing_up_date,
    modify_time,
    start_date,
    end_date
from user_link_tmp;
 
-- 删除临时表中的数据
truncate table user_link_tmp;
 
-- 删除6月份所有结束时间为9999-12-31分区的数据
alter table user_link_tmp drop if exists partition(stat_date>='2019-06-01' , start_date<'2019-07-01', end_date='9999-12-31' );

数据重跑

如果某个日期同步的数据出现问题需要重跑数据,则需要重跑从当日的同步SQL到当前日期所有的SQL才能保证数据准确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这些接口测试工具你一定要知道

接口测试工具 接口测试工具如图&#xff1a; 1.Fiddler 首先&#xff0c;这是一个HTTP协议调试代理工具&#xff0c;说白了就是一个抓http包的工具。web测试和手机测试都能用到这个工具。既然是http协议&#xff0c;这个工具也能支持接口测试。 2.PostMan Postman一款非常流行…

【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?

在实际开发过程中&#xff0c;可能有时候&#xff0c;我们将文件放在resource下&#xff0c;在程序中需要获取到文件路径然后操作。比如&#xff0c;将公钥放到resource文件夹下&#xff0c;在程序中需要获取到这个公钥的完整路径。怎么操作&#xff1f; 需要访问的文件位置 获…

数据库课程设计(教室设备故障报修系统)

题目&#xff1a;教室设备故障报修系统 内容与要求&#xff1a; 完成需求分析&#xff0c;写出功能需求和数据需求描述&#xff1b;在需求分析的基础上&#xff0c;完成数据库概念结构设计、逻辑结构设计、物理结构设计和数据库创建&#xff1b;完成视图、存储过程设计&#xf…

使用阿里云实现短信验证码

首先去阿里云中开启短信服务 然后申请自己的签名&#xff0c;发送的短信模板&#xff0c;之后点击右上角的头像&#xff0c;点击AccessKey&#xff0c;选第一个就行&#xff0c;然后保存这两个对应的值。 在等待签名和发送模板通过审核之后就可以配置我们的发送方法&#xff0c…

Android Framework的重要性及其对行业前景的影响~

随着智能手机和移动应用的兴起&#xff0c;Android操作系统成为全球最大的移动操作系统&#xff0c;而Android Framework作为其核心组件之一&#xff0c;扮演着至关重要的角色。Android Framework提供了众多的API和工具&#xff0c;为开发者提供了构建功能丰富、高效稳定的Andr…

大厂月入3w+,失业焦虑折磨着我

大家好&#xff0c;这里是程序员晚枫&#xff0c;小红书也叫这个名字。 周末和一位老朋友聚会&#xff0c;聊了聊一个很现实的收入问题&#xff0c;巧合的是&#xff1a;他的焦虑&#xff0c;竟然和月薪5k的我一模一样。 今天给大家分享一下。 1、外人看来&#xff0c;让人羡…

Scrpay框架之MongoDB--Index

目录 MongoDB-Index 概念 索引类型 创建索引 注意 样例 索引的查看 删除索引 语法 样例 检测索引的速度优势 Mongo-Unique Index And Compound Index 唯一索引&#xff08;Unique Index&#xff09; 添加唯一索引的语法 利用唯一索引进行数据去重 复合索引&a…

zkSync的ZK Stack:Hyperchains和Hyperbridges

1. 引言 ZK Stack有2个关键特性&#xff1a; sovereignty 主权&#xff1a;作为创建者&#xff0c;可对自己的链有完全的自由和权利来定制链的每一个方面。 Hyperchains独立运行&#xff0c;依赖以太坊L1来提供安全性和活性。 seamless connectivity 无缝连接。 Hyperbridges…

SolidWorks全球认证报名简章

SolidWorks CSWP专业认证考试 一、CSWP的起源 CSWP全名为Certified SolidWorks Professional &#xff0c;为SolidWorks原厂认证&#xff1b;在全球非常具有公信力。是健全与完整的3D CAD认证&#xff0c;相较于一般宣称是3D CAD认证&#xff0c;但是却没有投入完整的团队与完…

Barplot | 平平无奇的环形Barplot你掌握了吗!?~(附完整代码)

1写在前面 最近天天下雨&#xff0c;真是下得我没脾气啊&#xff0c;动不动就淋成狗。&#x1f62d; 下雨也就算了&#xff0c;还特别热。&#x1f912; 不知道是不是人到中年了&#xff0c;事情也特别的多&#xff0c;能静下心来思考的时间越来越少了。&#x1f61e; 也越来越…

SparkSQL与Hive整合(Spark On Hive)

1. Hive的元数据服务 hive metastore元数据服务用来存储元数据&#xff0c;所谓元数据&#xff0c;即hive中库、表、字段、字段所属表、表所属库、表的数据所在目录及数据分区信息。元数据默认存储在hive自带的Derby数据库。在内嵌模式和本地模式下&#xff0c;metastore嵌入在…

安装一个新虚拟环境——就叫它newtorch吧!

文章目录 1 新建一个虚拟环境newtorch2 安装pytorch1.7.1依赖包3 安装matplotlib2.2.34 安装torchsummary5 现在开始测试一下代码6 安装pandas 1 新建一个虚拟环境newtorch 打开anaconda prompt&#xff0c;输入&#xff1a; conda create -n newtorch python3.7.4// newtorc…

idea多模块测试——暂时不启动某个有问题的模块,之后再加载回来

文章目录 遇到问题解决方案暂时卸载然后还原 遇到问题 某个模块出了问题&#xff0c;运行不了项目 解决方案 暂时卸载 然后还原

云原生之深入解析Dapr安全性之访问控制策略

一、服务调用范围访问策略 ① 跨命名空间的服务调用 Dapr 通过服务调用 API 提供端到端的安全性&#xff0c;能够使用 Dapr 对应用程序进行身份验证并设置端点访问策略&#xff1a; Dapr 应用程序可以被限定在特定的命名空间&#xff0c;以实现部署和安全&#xff0c;当然仍然…

计算机基础知识学习笔记

目录 1.计算机奠基人—冯•诺依曼1.冯诺依曼结构2.冯诺依曼结构的特点 2.计算机的发展 感觉自己的计算机基础知识还很薄弱&#xff0c;工作之余补习一下。1.计算机奠基人—冯•诺依曼 1.冯诺依曼结构 冯诺依曼结构也称作普林斯顿结构&#xff0c;是一种将程序&#xff08;指令…

【C语言】大小端介绍以及判断大小端的两种方式

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f343;大家可以叫我小何或者小侠&#x1f343; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助更多人理解和学习&#x1f338; 花繁柳密处&#xff0c;拨…

【探索 Kubernetes|作业管理篇 系列 16】离线业务 Job、CronJob

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们讲解了 DaemonSet 控制器&#xff0c;相信你以及理解了其的工作过程&#xff0c;分为三部。一是&#xff0c;获取所有 Node 节点中的 Pod&#xff1b;二是&#xff0c;判断是否有符合 DaemonSet 管理的 Pod&a…

osg实现镜面成像、倒影效果

目录 1. 需求提出 2. 代码实现 3. 功能讲解 3.1. 设置地面半透明 3.2. 设置镜面倒影成像 3.3. 设置地面颜色 3.4. 设置相机初始位置 4. 总结 1. 需求提出 平时的业务需求&#xff0c;有时需要实现镜面成像、倒影效果&#xff0c;如下&#xff1a…

79、基于STM32单片机DHT11温湿度无线蓝牙手机APP监控报警系统(程序+原理图+PCB图+设计资料+参考论文+开题报告+元器件清单等)

摘 要 温湿度控制已成为当今社会研究的热门项目。是工农业生产过程中必须考虑的因素。作为最常见的被控参数。温度和湿度已经不再是相互独立的物理量&#xff0c;而应在系统中综合考虑。广泛应用于实验室、大棚、花圃、粮仓乃至土壤等各个领域。而传统的温湿度控制则利用湿度…

Qt QLineEdit篇

QLineEdit篇 【1】QLineEdit简介【2】QLineEdit常用方法【3】QLineEdit使用举例UI设计界面效果头文件源文件 PC饱和了&#xff0c;跟我学Qt比较实在&#xff0c;哈哈哈 【1】QLineEdit简介 QLineEdit是Qt框架中的一个类&#xff0c;用于创建一个文本输入框&#xff0c;允许用…