原文链接:批流一体数据集成工具ChunJun同步Hive事务表原理详解及实战分享
课件获取:关注公众号__ “数栈研习社”,__后盾私信__ “ChengYing”__ 取得直播课件
视频回放:点击这里
ChengYing 开源我的项目地址:github 丨 gitee 喜爱咱们的我的项目给咱们点个__ STAR!STAR!!STAR!!!(重要的事件说三遍)__ 技术交换钉钉 qun:30537511
本期咱们带大家回顾一下无倦同学的直播分享《Chunjun同步Hive事务表详解》
一、Hive事务表的构造及原理Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种能够存储、查问和剖析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查问性能,能将SQL语句转变成MapReduce工作来执行。
在分享Hive事务表的具体内容前,咱们先来理解下HIve 事务表在 HDFS 存储上的一些限度。
Hive尽管反对了具备ACID语义的事务,然而没有像在MySQL中应用那样不便,有很多局限性,具体限度如下:
尚不反对BEGIN,COMMIT和ROLLBACK,所有语言操作都是主动提交的仅反对ORC文件格式(STORED AS ORC)
默认状况下事务配置为敞开,须要配置参数开启应用表必须是分桶表(Bucketed)才能够应用事务性能表必须外部表,内部表无奈创立事务表表参数transactional必须为true内部表不能成为ACID表,不容许从非ACID会话读取/写入ACID表以下矩阵包含能够应用Hive创立的表的类型、是否反对ACID属性、所需的存储格局以及要害的SQL操作。
理解完Hive事务表的限度,当初咱们具体理解下Hive事务表的内容。
1、事务表文件名字详解根底目录:$partition/base_$wid/$bucket
增量目录:$partition/delta_$wid_$wid_$stid/$bucket
参数目录:$partition/delete_delta_$wid_$wid_$stid/$bucket 2、事务表文件内容详解$ orc-tools data bucket_00000
{"operation":0,"originalTransaction":1,"bucket":536870912,"rowId":0,"currentTransaction":1,"row":{"id":1,"name":"Jerry","age":18}}
{"operation":0,"originalTransaction":1,"bucket":536870912,"rowId":1,"currentTransaction":1,"row":{"id":2,"name":"Tom","age":19}}
{"operation":0,"originalTransaction":1,"bucket":536870912,"rowId":2,"currentTransaction":1,"row":{"id":3,"name":"Kate","age":20}}
operation 0 示意插入、1 示意更新,2 示意删除。因为应用了 split-update,UPDATE 是不会呈现的。originalTransaction是该条记录的原始写事务 ID:a、对于 INSERT 操作,该值和 currentTransaction 是统一的;
b、对于 DELETE,则是该条记录第一次插入时的写事务 ID。
bucket 是一个 32 位整型,由 BucketCodec 编码,各个二进制位的含意为:a、1-3 位:编码版本,以后是 001;
b、4 位:保留;
c、5-16 位:分桶 ID,由 0 开始。分桶 ID 是由 CLUSTERED BY 子句所指定的字段、以及分桶的数量决定的。该值和 bucket_N 中的 N 统一;
...