hive行级更新的实现

一.
我们可以采用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");
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值