hive笔记

hive

hive相关笔记记录

  1. 注释部分:
  • 描述任务和表;
  • 结果表定义字段类型和字段含义;
  • 任务上游依赖事件或者应用了某些源表;
  • 开发人,工号,开发时间等;
--@Name:sospdm.sosp_ml_jxgoods_shop_rec_d
--@Description:精选好物店铺偏好活动信息
--@Author:18051165
--@CreateDate:2019-08-21
--@Source:
--@PreJob:
  1. 任务名设置
  • 生成表名和任务名关系对应;
  • 设置分区;
  • 时间参数 ${hivevar:statis_date}
--设置作业名
set mapred.job.name = sosp_ml_jxgoods_shop_rec_actinfo_d(${hivevar:statis_date});
参数名 参数值
${v_date} @@{yyyyMMdd-7d}
${hivevar:statis_date} @@{yyyyMMdd}
  1. hive参数设置,调优
--设置hive参数,map阶段慢,减小maxsize增大map数,reduce阶段慢,增大reduce数(资源不够时增大也无效)
set mapreduce.reduce.shuffle.memory.limit.percent=0.10;
set mapreduce.input.fileinputformat.split.maxsize=300000000;
set mapreduce.input.fileinputformat.split.minsize=150000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=30000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=30000000;
--使用Combinefileinputformat,将多个小文件打包作为一个整体的inputsplit,减少map任务数
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
--大表关联小表,把小表自动加载到内存中,需要确认以下配置为true,相当于写了一个mapjoin
set hive.auto.convert.join=false;
--在Map-only的任务结束时合并小文件,map阶段Hive自动对小文件合并
set hive.merge.mapfiles=true;
--默认false, true时在MapReduce的任务结束时合并小文件
set hive.merge.mapredfiles=false;
--设置reduce数最大值
set hive.exec.reducers.max=300;
---------------------------------- 数据处理 ------------------------------------
use sospdm; --使用数据库
  1. 导出数据
hive -e "set hive.cli.print.header=true;select * from sospdm.sosp_ml_pptv_yzt_noshopping_base_info;"
 > tmp_wuyu/sosp_ml_pptv_yzt_noshopping_base_info.txt --导出带表头
hive -e "set hive.cli.print.header=false;select cust_num,shop_gds_cd from sospdm.sosp_ml_jxgoods_shop_rec_results_sit;"
 > /home/sospdm/net_disk/data/sosp_ml_jxgoods_shop_rec_results_sit.txt  --jupyter env
  1. 建分区表导入分区数据
--元数据管理DDL建表
drop table if exists sospdm.tssa_imp_mcps_send_detail_topic_d;
create table sospdm.tssa_imp_mcps_send_detail_topic_d (
  serialId      string  comment '流水号,时间戳',  
  sysCode       string  comment '系统编码,如FHT,JBP,DSM',  
  terminalCode  string  comment '终端编码,如SNYG,SNXDGK'
) comment '云钻领任务关联规则推荐结果表'    
partitioned by (statis_date string comment '数据日期')
stored as rcfile;
--导入分区表数据
insert overwrite table sospdm.sosp_ml_yz_gds_mysql_to_hive partition (statis_date = '${hivevar:statis_date}')
--删除分区,保留一定时间段
${statis_date_365} @@{yyyyMMdd-365d}
alter table sospdm.supermarket_transfer_pred_test drop if exists partition (statis_date = ${statis_date_365});

6导入本地数据

--创建表
create table sospdm.sosp_ml_yunzuan_rec_test(
  `cust_num` string comment '会员编码',
  `gds_info` string comment '商品编码',
  `rating` double comment '商品偏好打分'
) row format delimited fields terminated by '\t';

--导入本地数据进表
load data local inpath '/data/home/sospdm/tmp_wuyu/sosp_ml_yunzuan_rec_mem_reverse.txt' 
overwrite into table sospdm.sosp_ml_yunzuan_rec_test;
  1. 批量显示建表时间
hdfs dfs -ls hdfs://suninghadoop2/user/sospdm/hive/warehouse/sospdm.db/sosp_ml_yunzuan_rec*
  1. MD5加密
add jar /home/sospdm/yf/jar/GetMd5.jar;
create temporary function getmd5 as 'com.md5.GetMd5';

hivesql函数

常用函数

--时间函数使用方式
select from_unixtime(unix_timestamp('20180808','yyyyMMdd') - 86400 * 7,'yyyyMMdd'); --20180801
select regexp_replace(date_sub(from_unixtime(to_unix_timestamp('20180808', 'yyyyMMdd'), 'yyyy-MM-dd'), 7), '-', ''); --20180801
select regexp_replace(from_unixtime(to_unix_timestamp('2018-08-08 23:41:33', 'yyyy-MM-dd HH:mm:ss'), 'yyyy-MM-dd'), '-', ''); --20180801
select regexp_replace(substr('2018-08-08 23:41:33', 1,10), '-', ''); --20180808
--百分数
select concat(cast(cast(coverage_all/transforms * 100 as decimal(8,2)) as string),'%') as cov_all_rate,  --预测总覆盖率
--模糊查询表名
show tables like '*sosp_ml_user_rfm*';
--字符串模糊查询
where label like 'abc%'
where gds_nm like concat('%','段奶粉','%') --中文
--排序
select row_number() over (partition by cust_num order by item_id desc) as rn
--中位数
select percentile_approx(cast(col as double),array(0.25,0.5,0.75),1000)
--字符串反转函数:reverse 语法: 
reverse(string '00001')  --10000
--字符串截取
select substr('abcde',3,2)  --cd
--去除编号前面的0 如00000000000001
select regexp_extract('0000000102', '^(0{0,9})?(\\w+)$', 2); --去0
select lpad('asabc',18,'0');  --补0
--统计短字符串在长字符串中出现的次数
select size(split('abcabdav','a'))-1 from dual;
--以某个符号切分成两个字段
select split('abtcdtef','t') from lxw_dual; --["ab","cd","ef"]
--行转列 去重
select cust_num,concat_ws(',',collect_set(gds_cd)) as gds_cd from sosp_ml_yunzuan_rec_test_01 group by cust_num;
--不去重
select cust_num,concat_ws(',',collect_list(l4_grp_cd)) as pre_groups
from(
select '0001' as cust_num,'R0001' as l4_grp_cd from dual
union all
select '0001' as cust_num,'R0001' as l4_grp_cd from dual) t group by cust_num;
--行转列并且排序 : 138     12,123,1234
select t.a, concat_ws(',',sort_array(collect_set(t.b)))
  from(
         select 138 as a, '1234' as b
         union all
         select 138 as a, '12' as b
         union all
         select 138 as a, '123' as b
      )t
group by t.a
;

正则化

--正则化匹配汉字
select regexp_extract('收件人为小明的15622150839','收件人为([\\u4E00-\\u9FFF]+)的',1 ) 
from sospdm.dual limit 1;
regexp_extract(gds_title,'([\\u4E00-\\u9FFF]+)') not in ('','-',' ') 
--num_rank:数字排序,超过10个num要从10开始排序  '\\d+\#!#' 正则化去除数字+'#!#'
select regexp_replace(concat_ws('#,#',sort_array(collect_list(concat_ws('#!#',cast(num_rank as string),
shop_gds_cd)))),'\\d+\#!#','') as shop_gds_cd
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容

  • hive中表分区 Hive中的表分区比较简单,就是将同一组数据放到同一个HDFS目录下,当查询中过滤条件指定了某一...
    raincoffee阅读 2,127评论 0 1
  • hive系列之六-hive元数据表结构详解 Hive自己维护了一套元数据,用户通过HQL查询时候,Hive首先需要...
    raincoffee阅读 1,169评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,293评论 0 9
  • Hive加载数据 在Hive中建好表之后,需要将数据加载进来,以便做后续查询分析,本文介绍向Hive表中加载数据的...
    raincoffee阅读 495评论 0 1
  • hive中join原理与机制 笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成jo...
    raincoffee阅读 1,227评论 0 4