分享

hive如何获取shell当天日期,并创建分区表

langke93 发表于 2015-1-4 08:08:23 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 23175
本帖最后由 nettman 于 2015-1-4 08:19 编辑
hive如何获取当天日期,并创建分区表
欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(1)人评论

跳转到指定楼层
muyannian 发表于 2015-1-4 08:09:42
本帖最后由 nettman 于 2015-1-4 09:11 编辑
hive建立分区表,以当天日期(“2014-08-15”)作为分区依据,hql如下:
  1. CREATE EXTERNAL TABLE IF NOT EXISTS product_sell(  
  2. category_id BIGINT,  
  3. province_id BIGINT,  
  4. product_id BIGINT,  
  5. price DOUBLE,  
  6. sell_num BIGINT  
  7. )  
  8. PARTITIONED BY (ds string)  
  9. ROW FORMAT DELIMITED  
  10. FIELDS TERMINATED BY '\t'  
  11. LINES TERMINATED BY '\n'  
  12. STORED AS TEXTFILE;  
复制代码

然后以日期作为分区依据,插入数据,shell脚本如下:
  1. #!/bin/bash  
  2. source /etc/profile;  
  3.   
  4. yesterday=$(date -d '-1 day' '+%Y-%m-%d')  
  5. lastweek=$(date -d '-1 week' '+%Y-%m-%d')  
  6.   
  7. /usr/local/cloud/hive/bin/hive<<EOF   
  8. INSERT OVERWRITE TABLE product_sell PARTITION (ds='$yesterday') select a.category_id, b.good_receiver_province_id as province_id, a.id as product_id, (b.sell_amount/b.sell_num) as price, b.sell_num from product a join (select si.product_id, s.good_receiver_province_id, sum(si.order_item_amount) sell_amount, sum(si.order_item_num) sell_num from so_item si join so s on (si.order_id=s.id) where si.is_gift=0 and si.is_hidden=0 and si.ds between '$lastweek' and '$yesterday' group by s.good_receiver_province_id, si.product_id) b on (a.id=b.product_id);  
  9. EOF  
复制代码
难点在于hive中不知道如何调用形如shell日期变量的方式创建日期分区


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条