hive编程笔记---多表关联使用感想

背景:

hadoop平台上通过hive整理模型预测数据,需要将多个表(行为表,大概20+张,以下简称“子表”)与注册信息表(简称“主表”)进行关联,需要每天凌晨5点前输出预测数据。关联不同方式可能影响最终建模数据表生成时间。整理过程中,主要经过了如下步骤。

感想:
使用left outer join 进行关联时,left的表越多,则运算需要的时间越多。所以尽可能将需要left的表进行合并。使得left 的记录数变小。

第一天:
简单粗暴,将注册信息表直接与20+表关联,其实没有复杂的运算,但是任务执行时间2小时40分钟。

第二天:
1) 分析需要关联的表运行完成时间,发现其中很多行为表都是凌晨1点完成的。
2) 将同类特征且运行完成时间早的表进行先组合,然后再与注册信息表关联。
3)剔除完成时间较晚的子表
4)发现运行完成时间还是有些晚。

第三天:

1) 分析昨天处理后的子表,发现union all 结果,id去重与未去重差异挺大的,说明进将同类特征先合并不够,需要将更多的行为表合并(通过union all )减少记录数,然后再跟主表关联。
14114988 5433174

select
    count(*)
    ,count(distinct id)
from (select
        id
      from t_a
      where data_date=20170718
      union all
      select
        id
      from t_b
      where data_date=20170718
      )a

2) 分析大表(a,b), 发现这两个表的记录数都是超过千万级别的,但实际应用中,其实我们只需要使用最近活跃的用户。这两个表,
解决方法: 将主表拆分为当天活跃+历史活跃。历史活跃则可t+2计算,t+1计算时,则只需要计算当天活跃的。然后再 将历史活跃和当天活跃合并。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值