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 来完成抽取;
方案一(总结出来业界可行方案):
1、
Hive
原始表提前规划好以时间分区,初始化装载源库记录为base_table(最新数据)
2、每个相关表都会有一个timestamp列,对每一行操作做了修改,都会重置这列timestamp为当前时间戳;
3、新增数据通过sqoop(支持当天抽取)或者导出当天文件两种形式,抽取或导入到
hive
表,记录为新增表incremental_tabl...
#!/bin/sh
version_now=$(date -d"-2 day" +%Y-%m-%d)
version_pre=$(date -d"-3 day" +%Y-%m-%d)
hive
-e "DROP TABLE IF EXISTS app.tmp_xz_jimi3_sku_description_delete"
hive
-e "
CREATE TABLE app.tmp_xz_jimi3_sku_description_delete AS
SELECT
由于
hive
是一个数据仓库。是一个基于日志的分析和统计。底层的数据应该是稳定的,与oracle不同的是,数据不是经常变化的。但是在日常的业务中经常有修改数据的需求。有的数据是经常变化的。需要维护一个经常变化的表。我通过一些项目,总结了一下几个方法:
1 如果数据量不大,可以尝试周期的覆盖原始数据的方法。根据需求,对数据进行周期的
更新
,再导入的时候对数据进行覆盖操作。
2 对数据库的数据或者日志
之前是采用的join的方法来
增量
更新
。详情见:
http://blog.csdn.net/qq_206
4
1565/article/details/52763663现在有一种新方案如下:Select b.id,b.name,b.addr,b.updated_date
select a.*,row_number() over(distribute by a.id sort by upd
https://blog.csdn.net/magicharvey/article/details/20692829
https://blog.csdn.net/CLKTOY/article/details/120306523
我一直有个困惑,数仓日
增量
表,历史数据修改了除了拉链表还能怎么办?
后来看了1和2,惭愧惭愧。
说实话我也看了阿里巴巴中台建设这本书,我也看到了p
4
2页这一块full outer join 合并 + insert overwr.
来源:数智化转型俱乐部
阿里巴巴集团很早就已经把大数据作为其战略目标实施,而且其各个业务也非常依赖数据支撑运营,那么阿里巴巴究竟采取何种方法构建自己的数据仓库模型呢?阿里巴巴的数据仓库模型建设经历了多个发展阶段。
1.完全应用驱动时代
第一个阶段:完全应用驱动的时代,阿里巴巴的第一代数据仓库系统构建在Oracle上,数据完全以满足报表需求为目的,将数据以与源结构相同的方式同
步
到Oracle(称作ODS层),数据工程师基于ODS数据进行统计,基本没有系统化的模型方法体系,完全基于对Oracle数据库特性
hive
2.2.0及之后的版本支持使用merge into 语法,使用源表数据批量目标表的数据。使用该功能还需做如下配置
1、参数配置
set
hive
.support.concurrency = true;
set
hive
.enforce.bucketing = true;
set
hive
.exec.dynamic.partition.mode = nonstrict;
set
hive
.txn.manager = org.apache.hadoop.
hive
.ql.lockmgr.Db