hive表 合并字段_hive数仓中两个维度表如果想合并纬度产生新自增ID方法

##hive 双表合并生成新主键

insert overwrite into dim_goods_d partition(dt='2018-06-01')

select

tb.*,

row_number() over(order by id) + ta.max_id as gid

from tmp_s_inc as tb

cross join

(select coalesce(max(gid),0)) as max_id from dim_goods_d where dt='2018-05-31') ta

union all

select * from dim_goods_d where dt='2018-05-31'

=========事实表装载代理键,没有把代理键引入事实表中会让sql查询极为复杂(维度表慎用拉链表,代理键会造成整个开发复杂度的增加)===========================

fact_order(事实表) oid(订单ID) tm_id(时间ID)...(后面还有很多事实字段)

dim_user(维度表,拉链表--缓慢纬度建模) uid(代理ID) id(数据表ID) name dept,start_date,end_date,... (要把这个维度表的代理键装载到事实表中)

order(业务表) oid(代理ID),id(数据表ID),created_time,updated_time

-----query where created_time > '2018-06-01'    ---->order_inc 采集进新增数据select

select

ta.*,uid

--order的增量表

order_incas ta

join

--(id关联上说明是同一个条数据,表中可能存在一个ID多条一样的,新增数据要大于维度表开始时间且时间应该小于这个数据的业务结束时间默认9999,拉链表只要这个业务时间没结束会替换成9999)

dim_user as tb on ta.id=tb.id and ta.created_time >=tb.start_date and ta.created_time <= tb.end_date

---hive中由于不支持不等号join方式,于是需要用嵌套方法

select * from (

select

ta.*,uid

--order的增量表

order_incas ta

join

--(id关联上说明是同一个条数据,表中可能存在一个ID多条一样的,新增数据要大于维度表开始时间且时间应该小于这个数据的业务结束时间默认9999,拉链表只要这个业务时间没结束会替换成9999)

dim_user as tb on ta.id=tb.id) tt  where ta.created_time >=tb.start_date and ta.created_time <= tb.end_date

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值