4 步搞定 Hive 增量更新

Hive 的更新很有趣。

Hive 的表有两种,一种是 managed table, 一种是 external table.

managed table 是 Hive 自动帮我们维护的表,自动分割底层存储文件,自动分区,这些自动化的操作,都是 Hive 封装了与 Hadoop 交互的接口。

external table 只是一种在 Hive 维护的与外部文件的映射。

managed table 与 external table 最大的区别在于删除的时候,external table 默认情况下只是删除表定义,而数据依旧在hadoop 上存储着;managed table 则是表定义连着表数据一起被删除了。

早期的时候, Hive 支持的表操作只有两种:OverWrite 和 Appand

Overwrite 并不是对某一行的数据做更新,而是对整张表做覆盖,所以感觉上 Hive 更像是在做 ETL 里面的 Staging, 而不像是最终存储计算结果的地方。Hive 超强的计算能力可以做为大数据量转换的工具,最终结果将被送到关系型数据库或者其他 Hive 实例上存储。

hortonworks 有一篇提出相关解决方案的文章,介绍了 4步走解决增量更新 Hive 表:

url如下:https://hortonworks.com/blog/four-step-strategy-incremental-updates-hive

Ingest

Reconcile

Compact

Purge

过程中,用到了四个 Hive 表,分别是:

base_table: 初始化装载源库来的表数据,表示最新数据

incremental_table:用来装载上一次增量更新以来,发生过更改的数据,包括新增,更新,和删除

reconcile_view:以 base_table, incremental_table 计算出来的最新数据,涉及到的操作,有删除,更新,和新增。每一次都要重复计算是不是有些多余,浪费很多对没有变更的数据的重复计算。如果有对数据有分区,只要对有数据更新的分区做增量更新,会有很大效率的提高。

reporting_table:将reconcile_view的数据,装载到 reporting_table中,用它来替换掉 base_table中的数据。

 

一) 取决于源数据库的服务是否支持直连抽取数据,可以有两种方法完成第一步 ingest, 即 Extract.

File Processing: 由源数据库自发的输出,以文件方式在合理的时间窗口导出

RDBMS Processing (Database Client based ETL): 由 Sqoop 来完成抽取;

Hive中进行增量更新(也称为分区表或分片更新),主要是通过指定特定的列或时间范围来进行的。以下是基本骤: 1. **创建外部表(如果不存在)**:首先,你需要将目标表设置为外部表,以便可以添加新的行到已存在的表中,而不是覆盖它。例如: ``` CREATE EXTERNAL TABLE if not exists my_table (...) PARTITIONED BY (partition_column date); ``` 2. **选择增量列或时间范围**:确定你要根据哪个列(如日期或ID)进行增量更新。例如,如果你只关心最近一周的数据,你可以这样做: ``` SELECT * FROM source_table WHERE partition_column >= '2022-01-01' AND partition_column < '2022-01-08' INTO TABLE my_table PARTITION (partition_column='2022-01-08'); ``` 3. **使用INSERT OVERWRITE或APPEND**:如果你想替换现有分区的所有数据,用`INSERT OVERWRITE TABLE`;如果你想追加数据,用`INSERT INTO TABLE`加上`PARTITION`选项。例如: - `INSERT OVERWRITE TABLE my_table PARTITION (partition_column = '2022-01-08') ...` - `INSERT INTO TABLE my_table PARTITION (partition_column = '2022-01-08') SELECT ...` 4. **检查并优化**:定期检查增量更新的效果,确认新数据是否已成功加载并考虑调整你的查询策略,比如增加分区或改进过滤条件。 **相关问题--:** 1. Hive支持哪些方式的增量更新? 2. 如何在Hive中查看已经分区的增量状态? 3. Hive增量更新过程中如何处理数据冗余或丢失?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值