大数据(3f)HIVE拉链表

Hive 拉链表的两种实现方式 拉链表的简单介绍,拉链表的两种实现方式 阅读详情

什么是拉链表

  • 数仓设计中的一种表,记录数据的历史状态和最新状态
    zip table亦可译作压缩表
  • 优点:和全量表相比,可大大节省存储空间
  • 应用场景:数据量大但变化量不大,且有查看历史快照的需求

拉链表制作

从拉链表取出快照

HIVE实现拉链表

1、建表

1、建库

DROP DATABASE IF EXISTS b0 CASCADE;
CREATE DATABASE b0;
USE b0;

2、新增和变化表(按天分区)

DROP TABLE IF EXISTS ods_user;
CREATE TABLE ods_user(i STRING,balance INT) PARTITIONED BY (ymd DATE);

3、拉链表

DROP TABLE IF EXISTS dwd_user;
CREATE TABLE dwd_user(i STRING,balance INT,start_date DATE,end_date DATE);

2、插入数据到 每天新增和变化表

此处为一次性插入,实际场景是每天插入

INSERT INTO ods_user (i,balance,ymd) VALUES
('a1',100,'2020-01-01'),
('a2',0,'2020-01-01'),
('a1',300,'2020-01-02'),
('a3',200,'2020-01-02'),
('a1',400,'2020-01-03'),
('a3',500,'2020-01-03');
SELECT * FROM ods_user;

3、更新拉链表

3.1、首次导入

SET ymd='2020-01-01';

INSERT OVERWRITE TABLE dwd_user
SELECT
    i,
    balance,
    ${hiveconf:ymd} start_date,
    '9999-12-31' end_date
FROM ods_user WHERE ymd=${hiveconf:ymd};
SELECT * FROM dwd_user;

查看数据

3.2、第一次更新

SET ymd=TO_DATE('2020-01-02');

INSERT OVERWRITE TABLE dwd_user
SELECT * FROM
(
    SELECT
        i,
        balance,
        ${hiveconf:ymd} start_date,
        TO_DATE('9999-12-31') end_date
    FROM ods_user WHERE ymd=${hiveconf:ymd}

    UNION ALL

    SELECT
        a.i,
        a.balance ,
        a.start_date,
        IF(b.i IS NULL,a.end_date,b.ymd)end_date
    FROM dwd_user a LEFT JOIN(
        SELECT * FROM ods_user WHERE ymd=${hiveconf:ymd}
    )b ON CONCAT(a.i,a.end_date)=CONCAT(b.i,'9999-12-31')
)c;
-- 全表
SELECT * FROM dwd_user;
-- 最新数据
SELECT * FROM dwd_user WHERE end_date='9999-12-31';
-- 快照2020-01-01
SELECT * FROM dwd_user WHERE start_date<='2020-01-01' AND end_date>'2020-01-01';

查看数据

3.3、第二次更新

SET ymd=TO_DATE('2020-01-03');
INSERT OVERWRITE TABLE dwd_user
SELECT * FROM
(
    SELECT
        i,
        balance,
        ${hiveconf:ymd} start_date,
        TO_DATE('9999-12-31') end_date
    FROM ods_user WHERE ymd=${hiveconf:ymd}
    UNION ALL
    SELECT
        a.i,
        a.balance ,
        a.start_date,
        IF(b.i IS NULL,a.end_date,b.ymd)end_date
    FROM dwd_user a LEFT JOIN(
        SELECT * FROM ods_user WHERE ymd=${hiveconf:ymd}
    )b ON CONCAT(a.i,a.end_date)=CONCAT(b.i,'9999-12-31')
)c;
-- 全表
SELECT * FROM dwd_user;
-- 最新数据
SELECT * FROM dwd_user WHERE end_date='9999-12-31';
-- 快照2020-01-02
SELECT * FROM dwd_user WHERE start_date<='2020-01-02' AND end_date>'2020-01-02';
-- 快照2020-01-01
SELECT * FROM dwd_user WHERE start_date<='2020-01-01' AND end_date>'2020-01-01';

查看数据


补充

  • 使用UNION ALL时,两个表的数据类型要一致
  • 日期不一定用DATE,用STRING也行
  • 更新拉链表时,两个表JOIN ON多字段,也可单字段
  • 更新拉链表时,可以先写到一个中间表,再覆盖拉链表
  • 上面SQL为简化的SQL,实战中HIVE表要分区(并且要使用 动态分区)
    2021-02-02最新数据写到9999-12-31分区,过期数据写到-1的2021-02-01分区

HIVE动态分区

静态分区的写法

INSERT OVERWRITE TABLE xxx_t1 PARTITION(dt='2021-06-15')
SELECT
    xxx
FROM xxx_t0
WHERE dt='2021-06-15';
INSERT OVERWRITE TABLE xxx_t1 PARTITION(dt='2021-06-16')
SELECT
    xxx
FROM xxx_t0
WHERE dt='2021-06-16';

动态分区写法(被SELECT的dt要在最后一行)

INSERT OVERWRITE TABLE xxx_t1 PARTITION(dt)
SELECT
    xxx,
    dt
FROM xxx_t0
WHERE dt='2021-06-15' OR dt='2021-06-16';

使用动态分区,需要提前设置参数

SET hive.exec.dynamici.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
Hive---拉链表设计与实现 拉链表的设计是将更新的数据进行状态记录,没有发生更新的数据不进行状态存储,用于存储所有数据在不同时间上的所有状态,通过时间进行标记每个状态的生命周期,查询时,根据需求可以获取指定时间范围状态的数据,默认用9999-12-31等最大值来表示最新状态。假如在1号已经在hive中创建了表并拉取了数据,但是在2号时MySQL中新增2条用户注册数据,并且有1条用户数据发生更新.由于每天都会有用户注册,产生新的用户信息,那么每天都需要将MySQL中的用户数据同步到Hive数据仓库中.2号再创建一张表拉取所有数据。 阅读详情

相关推荐

数据仓库之拉链表的设计以及实现

一、简介 增量表: 有日期分区,存放增量数据,即新增量和变化量。 全量表: 无日期分区(每天覆盖更新),存放截止至当前,数据的最新的状态,所以无法记录数据的历史变化 快照表: 有日期分区,每天的数据都是全量的(无论有无变化),缺点是每个分区存储了许多重复的数据,浪费存储空间 拉链表: 拉链表是用来维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录 二、应用场景 拉链表适用于那些大数据量,并且在字段变化的比例和频率不大的情况下需

qq_37771475的博客 3316

大数据Hive拉链表的设计与实现

7.1 数据同步问题 7.1.1 数据同步的场景 Hive在实际工作中主要用于构建离线数据仓库,定期的从各种数据源中同步采集数据到Hive中,经过分层转换提供数据应用。例如,每天需要从MySQL中同步最新的订单信息、用户信息、店铺信息等到数据仓库中,进行订单分析、用户分析。 例如:MySQL中有一张用户表:tb_user,每个用户注册完成以后,就会在用户表中新增该用户的信息,记录该用户的id、手机号码、用户名、性别、地址等信息。 每天都会有用户注册,产生新的用户信息,我们每天都需要将MySQL中的用户

赵广陆 7877

大数据最全大数据开发简历模版_大数据开发社招简历模板(1),2024年最新大数据开发端简单易用的SPI框架

5. 熟悉linux开发环境,编写跑数据的shell脚本;3. 依据业务需求进行 dm集市层的开发,使用 pl/sql 工具编写存储过程,实现数据的同步,创建自定 义函数,完成报表各指标的计算及对 sql 的调优. 4. 使用 Sql 和 FineReport 报表工具完成报表的开发 5. 进行测试,验证功能实现和指标的准确性,转测后协助测试同事的工作,及时修改问题缺陷 || 工作年限 | 5 | 相关工作年限 | 5 | 手机号 | Xxx || 年龄 | x | 性别 | x | 邮箱 | xx |

2401_84592313的博客 1232

Hive---拉链表

拉链表

大呱的博客 3274

尚硅谷大数据项目《在线教育之离线数仓》笔记003

尚硅谷大数据项目《在线教育之离线数仓》笔记003

upward 1003

STM32与SD卡SPI接口硬件设计:从原理图到调试的完整指南

SPI(串行外设接口)作为一种广泛应用的同步串行通信协议,以其接线简单、驱动成熟的特点,成为连接微控制器与各类外设的经典方案。其工作原理基于主从架构,通过时钟、数据线和片选信号实现全双工通信,在嵌入式系统中具有极高的技术价值,常用于连接传感器、存储设备和显示模块等。在数据存储场景中,SD卡凭借其大容量和便携性成为首选,而通过SPI模式驱动SD卡,则平衡了性能与设计复杂度。本文聚焦于使用Altium Designer进行硬件设计的工程实践,详细解析了STM32微控制器与SD卡通过SPI通信时,电源管理、上拉电

weixin_34101784的博客 555

大数据之每日快照合成拉链表

我们有很多业务表,只有最新记录,没有历史信息,无法使用增量加载的方式,否则最明显的问题就是业务系统删除了的记录,数据中台无法识别出来。所以,我们的办法是,从业务平台每日加载一个快照,然后与目标表合成拉链表。所以逻辑很简单。

weixin_45357522的博客 308

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 997

Hive知识点总结

Hive复习复习~

alopeds的博客 657

基于Active-HDL的HDL设计录入与仿真

作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&amp;wvr=6&amp;is_all=1 GitHub:github.com/saint-000 优快云: https://me.youkuaiyun.com/qq_4053...

一个会写代码的烤鸭 7785

AD | Altium Designer(原理图设计、电路仿真、PCB绘图)汉化版

Altium Designer(原理图设计、电路仿真、PCB绘图)

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 4170

Hive入门实战:从环境搭建到性能调优,告别大数据查询“力竭”

在大数据领域,数据仓库技术是处理海量结构化数据的核心。其基本原理是通过SQL接口对分布式存储系统(如HDFS)中的数据进行查询与分析,将复杂的分布式计算任务抽象为类SQL操作,从而降低开发门槛。这一技术价值在于能够以可扩展的方式处理PB级数据,支撑商业智能、日志分析等应用场景。Hive作为Hadoop生态的代表性数据仓库工具,通过将SQL转换为MapReduce或Tez作业来实现这一目标。本文聚焦于Hive的实战应用,针对常见的“力竭”痛点,详细解析环境配置、表设计、UDF开发等关键环节。其中,分区表和永久

weixin_34241036的博客 390

【PVCodeNet】《Palm Vein Recognition Network Combining Transformer and CNN》

1]吴凯,沈文忠,贾丁丁,等.融合Transformer和CNN的手掌静脉识别网络[J].计算机工程与应用,2023,59(24):98-109.

bryant_meng 1283

大数据面试笔试宝典之数据仓库面试

《大数据面试笔试宝典》分类专栏,囊括算法精髓、Java编程、Linux系统管理、SQL数据库操作,以及Zookeeper、Hadoop全家桶(HDFS、YARN、Hive、HBase)、Flume日志收集、Kafka消息队列、Spark&Flink大数据处理、数据仓库构建与大数据运维等,一站式备考,助你面试笔试游刃有余!

大数据架构师,深耕车联网实时数仓。专注 Flink / Paimon / Doris 流批一体、CDC 同步与实时 AI 推理,把生产里的架构选型、作业实战和故障排查整理成 4 个连载系列,只写实测跑得通的方案,欢迎私信交流。 710

NVIDIA Omniverse 技术浅析(三):NVIDIA RTX 技术

NVIDIA RTX 技术是 NVIDIA 推出的革命性图形渲染技术,旨在通过硬件加速和软件优化,实现高质量的实时图形渲染。RTX 技术在 NVIDIA Omniverse 平台中扮演着至关重要的角色,为其提供了强大的渲染能力。

m0_75253143的博客 352

【Python计量】linearmodels面板数据回归(一)

我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。

mfsdmlove的博客 9277

Hive实战指南:从Docker环境搭建到表设计与性能调优

数据仓库作为企业数据管理的核心,其核心组件Hive通过将SQL查询转换为分布式计算任务,实现了对海量数据的离线分析处理。其工作原理基于读时模式,将结构化数据文件映射为表,并通过Metastore管理元数据,这为处理TB到PB级数据提供了基础。在工程实践中,合理的表设计(如分区表、分桶表)和文件格式选择(如ORC、Parquet)是提升查询性能的关键技术。针对数据更新场景,全量表、增量表和拉链表等不同表类型设计模式,能有效平衡存储成本与历史状态回溯需求。本文聚焦于Hive的实战应用,详细介绍了如何在Windo

weixin_33858336的博客 446

基于FPGA的以太网设计(1)----大白话解释什么是以太网

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

孤独的单刀 3878

Hive(三)函数及应用

Hive 函数及应用

ks_1998的博客 1840

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浅谈一个新人的大数据之路

CCCCCold丶大数据之禅第一章,大数据之路浅谈数仓&数据集市&数据湖数据模型从模型ETL频率一般将模型划分为:从模型存储技术上讲,模型划分为:从数据分层角度讲,模型又会被划分为:从模型创建类型上讲,模型又会被划分为:从模型存储类型上讲,模型又会被划分为:从模型压缩算法上讲,又有如下划分:队列:计算引擎: 第一章,大数据之路浅谈 数仓&数据集市&数据湖 数据仓库:...

CCCCold的博客 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

美团、快手、核桃编程互联网公司大数据岗位面试

一、核桃编程 1.快速排序算法 https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/369842?fr=aladdin 2.select–from–where–group by–having–order by 执行顺序 from–where–group by–having–select–order by https://blog.youkuaiyun.com/eadoucn/article/detail

weixin_45321296的博客 877

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【博学谷学习记录】超强总结,用心分享|狂野大数据课程 【Hive框架】

1、Hive将HDFS上的结构化数据文件映射成一张张的表,哪个文件对应哪张表,每张表的表结构信息这些数据被称为元数据MetaData,都需要保存起来,而Hive本身是不存任何数据的,这些数据在本课程中都由第三方数据库MySQL存储。#面向主题性:数仓的数据在分析时,并不是泛泛而去胡乱分析,而是必须先确定好主题,也就是分析时所占的角度(用户主题,销售主题、地域主题、线路主题,征信主题、赔付主题)#稳定性:数仓中的数据一般有一个数据采集周期(天,周,月),在下一个采集周期到来之前,数仓中的数据是不变的。

GaryNB的博客 283

尚硅谷数据仓库实战之3数仓搭建

@TOC 数仓笔记 数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS 尚硅谷数仓实战之1项目需求及架构设计 尚硅谷数仓实战之2数仓分层+维度建模 尚硅谷数仓实战之3数仓搭建 尚硅谷数据仓库4.0视频教程 B站直达:2021新版电商数仓V4.0丨大数据数据仓库项目实战 百度网盘:https://pan.baidu.com/s/1FGUb8X0Wx7IWAmKXBRwVFg ,提取码:yyds 阿里云盘:https://www.aliyundrive.com/s/F2FuMVePj9

weixin_42526326的博客 3919

Python + 大数据 - 数仓实战之智能电商分析平台

Python + 大数据 - 数仓实战之智能电商分析平台

呆呆小哥的秘密基地 1930

奔奔的数据仓库

数据仓库

weixin_43446178的博客 1555

2024年最全大数据开发简历模版_大数据开发社招简历模板,2024年最新大数据开发高分面试指南

5. 熟悉linux开发环境,编写跑数据的shell脚本;3. 依据业务需求进行 dm集市层的开发,使用 pl/sql 工具编写存储过程,实现数据的同步,创建自定 义函数,完成报表各指标的计算及对 sql 的调优. 4. 使用 Sql 和 FineReport 报表工具完成报表的开发 5. 进行测试,验证功能实现和指标的准确性,转测后协助测试同事的工作,及时修改问题缺陷 || 工作年限 | 5 | 相关工作年限 | 5 | 手机号 | Xxx || 年龄 | x | 性别 | x | 邮箱 | xx |

2401_84164527的博客 1100
上一篇: 大数据(2i)Hadoop集群高可用
下一篇: SQL多字段JOIN(两个表JOIN ON多字段)
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值