hive行级更新的实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43680708/article/details/90315008

一.
我们可以采用insert overwrite和insert into组合实现更新,即一个数据覆盖操作和一个数据插入操作。其实很简单,具体操作为,比如我要更新A表,那么首先对表A做个拆分,将待更新的那行数据查询出来保存到临时表A_swap2,其余不更新的数据保存到临时表A_swap1,然后把A_swap1数据使用insert overwrite命令重写回表A,此时A内的数据会被覆盖,然后对A_swap2做一些更新操作后在使用insert into命令将新数据插入到表A,这样就完成了数据更新操作。简单示例代码如下

--拆分表
drop table tmp.user_day_retention_rate_swap1;
create table tmp.user_day_retention_rate_swap1 as
select * from db.user_day_retention_rate
where dt!=date_sub('${biz_date}', 1);
 
drop table tmp.user_day_retention_rate_swap2;
create table tmp.user_day_retention_rate_swap2 as
select * from db.user_day_retention_rate
where dt=date_sub('${biz_date}', 1);
 
--不更新的数据重写回原表
insert overwrite table db.user_day_retention_rate
select * from tmp.user_day_retention_rate_swap1 ;
 
--更新的数据重新添加至原表
insert into table db.user_day_retention_rate
select
    0.5,
    b.user_retention_rate_3d as user_retention_rate_3d,
    b.user_retention_rate_7d as user_retention_rate_7d,
    b.user_retention_rate_14d as user_retention_rate_14d,
    b.user_retention_rate_30d as user_retention_rate_30d,
    b.dt as dt
from tmp.user_day_retention_rate_swap2 b;

二.
hbase表映射到hive表
创建一张hive表,实现将hbase表中的数据映射到该hive表中,而且当hbase表中的数据有更新时,该hive表中的数据也能够动态更新
–key是hbase的rowkey, 各个字段是hbase中的quailiter

CREATE external table hbase_table(row_key STRING, name STRING)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, jsonStr:jsonStr")
TBLPROPERTIES ("hbase.table.name" = "nameTable");

猜你喜欢

转载自blog.csdn.net/weixin_43680708/article/details/90315008