1、常用命令

命令 说明
hive --version 查看hive版本
select version() 查看hive版本
show databases 查看数据库
show tables like 'test_*' 查看表
show functions 查看函数
show create table tbname 查看建表语句
show partitions tbname 查看分区
desc tbname 查看表字段注释
desc extended tbname 查看表字段注释
desc formatted tbname 查看表字段注释
show locks extended 查看锁
unlock table tbname 释放锁
msck repair table tbname 刷新所有分区元数据
drop database db_name cascade 删表删库
hive -hiveconf bizdate=20180101 -f test.hql 传参执行 hql 文件
ANALYZE TABLE tablename COMPUTE STATISTICS -- noscan 更新统计信息
alter table tablename set FILEFORMAT orc 修改表存储格式

2、常用调优设置

-- 启用本地模式
set hive.exec.mode.local.auto=true;
set hive.exec.mode.local.auto.inputbytes.max=52428800;
set hive.exec.mode.local.auto.input.files.max=10;
-- hive开启动态分区写入
set hive.exec.dynamici.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=10000;
set hive.exec.max.dynamic.partitions.pernode=10000;
-- 使用spark引擎
-- spark引擎参数
-- 内存占用 cores * memory * instances 
-- 核数占用 cores * instances + 1 (driver)
set hive.execution.engine=spark;
set spark.executor.cores=2;
set spark.executor.memory=1G;
set spark.executor.instances=8;
-- hive 不能直接设置 map 数,只能通过设置块大小间接实现控制 map 数
-- 合并输入端的小文件,减少map数
set mapred.max.split.size=256000000;
set mapred.min.split.size.per.node=256000000;
set mapred.min.split.size.per.rack=256000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
--设置内存缓冲区大小,很多时候可以解决内存不足问题
set io.sort.mb=10;

--最大可用内存
set mapreduce.map.java.opts=-Xmx2048m;
set mapreduce.reduce.java.opts=-Xmx2048m;

--join优化 数据量大时使用
set hive.auto.convert.join=true;

--设置任务数
set mapred.reduce.tasks=20;

--任务并行,会消耗更多资源
set hive.exec.parallel=true;

3、常用建表语句

  • 内部表/分区表
CREATE TABLE `t_gfecp_bigdata_admin_penalty`(
  `id` string COMMENT '主键',
  `case_name` string COMMENT '案件名称',
  `case_no` string COMMENT '行政处罚决定书文号',
  `penalty_name` string COMMENT '被处罚者',
  `penalty_type` string COMMENT '被处罚者类型:法人、个人、其他(这里一般指法人)',
  `authority` string COMMENT '执法部门',
  `penalty_date` string COMMENT '作出行政处罚的日期',
  `case_detail` string COMMENT '行政处罚决定书(正文)',
  `person_in_charge` string COMMENT '法定代表人或单位负责人',
  `notice_date` string COMMENT '公告日期',
  `severity` string COMMENT '非常严重、严重、一般',
  `detail_url` string COMMENT '处罚信息原文链接URL',
  `file_name` string COMMENT '附件名称',
  `file_id` string COMMENT '附件id',
  `spider_date` string COMMENT '数据采集日期',
  `site_id` string COMMENT '网站id',
  `enterprise_id` string COMMENT '企业ID:当前非必填,先用“被处罚者”与企业表的“企业名称”做关联',
  `insert_user` string COMMENT '创建者',
  `insert_time` string COMMENT '创建时间',
  `update_user` string COMMENT '修改者',
  `update_time` string COMMENT '修改时间',
  `data_dt` string COMMENT '数据日期',
  `keyid` string COMMENT '',
  `all_item` string COMMENT '正文带标签',
  `spider_name` string COMMENT '爬虫名称',
  `file_path` string COMMENT '文件路径',
  `area_name` string COMMENT '',
  `site_desc` string COMMENT '')
COMMENT '行政处罚结果信息'
PARTITIONED BY (
  `bizdate` string COMMENT '业务日期')
  • 内部表/指定分隔符
CREATE TABLE `edw.f_gf_check_json`(
  `bizdate` string COMMENT '业务日期',
  `detail_url` string COMMENT '详情地址',
  `content` string COMMENT 'json串内容')
PARTITIONED BY (
  `check_tab_name` string COMMENT '表名',
  `check_site_id` string COMMENT '站点id')
row format delimited
fields terminated by '\001'
lines terminated by '\n'
  • 内部表/snappy 压缩
CREATE EXTERNAL TABLE `spider.zhifang_list`(
  `keyid` string,
  `tit0` string COMMENT '字段注释',
  `tit1` string COMMENT '字段注释',
  `txt` string COMMENT '字段注释',
  `price` string COMMENT '字段注释',
  `name` string COMMENT '字段注释',
  `detail_url` string COMMENT '字段注释',
  `pkey` string COMMENT '等于 zhifang_detail.fkey',
  `pagenum` string COMMENT '下单页码',
  `sitename` string COMMENT '站点名称',
  `bizdate` string COMMENT '业务日期',
  `ctime` string COMMENT '入库时间',
  `spider` string COMMENT '爬虫名称')
STORED AS Parquet -- 或者 orc
TBLPROPERTIES ("orc.compress"="SNAPPY");
  • 外部表/hbase
CREATE EXTERNAL TABLE edw.test_turboway_hbase(
  `keyid` string COMMENT 'from deserializer',
  `title` string COMMENT 'from deserializer',
  `bizdate` string COMMENT 'from deserializer',
  `loginid` string COMMENT 'from deserializer')
ROW FORMAT SERDE
  'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY
  'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
  'hbase.columns.mapping'=':key,cf:title,cf:bizdate,cf:loginid',
  'serialization.format'='1')
  • 外部表/elasticsearch
--根据 id 追加更新,无法删除
add jar hdfs:/user/hive/es_hadoop/elasticsearch-hadoop-5.4.3/dist/elasticsearch-hadoop-hive-5.4.3.jar;

--es_行政处罚结果信息
DROP TABLE IF EXISTS edw.f_gf_ent_penalty_info_es;
CREATE EXTERNAL TABLE IF NOT EXISTS edw.f_gf_ent_penalty_info_es(
id  string  comment '技术主键'
,case_name  string  comment '案件名称'
,case_no  string  comment '行政处罚决定书文号'
,penalty_name  string  comment '被处罚者'
,penalty_type  string  comment '被处罚者类型'
,authority  string  comment '执法部门'
,authority_clearing_text  string  comment '执法部门_清洗_text'
,authority_clearing_keyword  string  comment '执法部门_清洗_keyword'
,penalty_date  string  comment '行政处罚日期'
,case_detail  string  comment '行政处罚决定书'
,person_in_charge  string  comment '负责人'
,notice_date  string  comment '公告日期'
,detail_url  string  comment '详情链接'
,file_name  string  comment '附件名称'
,file_id  string  comment '附件id'
,corp_matching_degree  string  comment '企业信息匹配度'
,spider_date  string  comment '数据采集日期'
,bizdate  string  comment '业务日期'
,site_id string comment'网站id'
,data_source_area string comment'数据来源地区'
,data_source  string  comment '数据来源说明'
,data_sort_num  string  comment '数据排序号'
,del_flag  string  comment '数据逻辑删除标志'
,etldate  string  comment '数据加载更新日期'
)comment 'es_行政处罚结果信息'
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'idx_f_gf_ent_penalty_info/f_gf_ent_penalty_info',
'es.nodes'='172.16.123.80 ',
'es.port'='8200',
'es.mapping.id' = 'id',
'es.write.operation'='upsert',
'es.net.http.auth.user'='elastic',
'es.net.http.auth.pass'='changeme'
);

4、常用语句

-- 加载数据文件,相当于直接 put 覆盖到指定 hdfs 目录
LOAD DATA LOCAL INPATH '/home/getway/tmp/way/data_test.txt'
OVERWRITE  INTO TABLE spider.test_way_20200818 ;
-- 创建临时表
create temporary table as select id from tb;

-- 分区表添加字段,需要使用 CASCADE
alter table test20200415 add columns (name string, age string) CASCADE;

-- hive删除外部表数据
ALTER TABLE xxx SET TBLPROPERTIES('EXTERNAL'='False'); drop table xxx;

-- hive正则查找替换, 注释使用 \\
select regexp_replace(regexp_extract('asdas.doc','.docx|.xlsx|.xls|.pdf|.doc',0),'\\.','')

-- hive截取
SELECT SUBSTRING("6.5-8.5",INSTR("6.5-8.5",'-')+1,length("6.5-8.5")-INSTR("6.5-8.5",'-')),
SUBSTRING("6.5-8.5",0,INSTR("6.5-8.5",'-')-1)
-- 侧视图 完成 列转行
with tt as (
select '0001/0002/0003' as file_id, '1' as key
union all select '0004' as file_id, '2' as key
)
select *
from tt
lateral view explode(split(file_id,'/'))  b AS col5
-- 行合并
with tt AS(
select 'aaa' as a,'aaa' as b
union all select '1234' as a,'cccc' as b
)
select concat_ws(',',collect_set(a)) as ua,  concat_ws(',',collect_set(b)) as ub
from tt
-- json 解析函数 只有hive支持,impala不支持
-- get_json_object
with json_test as (
select '{"message":"2015/12/08 09:14:4","server": "passport.suning.com","request": "POST /ids/needVerifyCode HTTP/1.1"}' as js
)
select get_json_object(js,'$.message'), get_json_object(js,'$.server') from json_test;

-- json_tuple
with json_test as (
select '{"message":"2015/12/08 09:14:4","server": "passport.suning.com","request": "POST /ids/needVerifyCode HTTP/1.1"}' as js
)
select a.* 
from json_test
lateral view json_tuple(js,'message','server','request') a as f1,f2,f3;

5、元数据

--更新统计信息
ANALYZE TABLE tablename COMPUTE STATISTICS -- noscan

--hive元数据查看
select * from(
select a.TBL_NAME,
        sum(case when param_key='numRows' then  param_value else 0 end) 'rownum',
        sum(case when param_key='numRows' then  1 else 0 end) 'part_num' ,
        sum(case when param_key='totalSize' then  param_value else 0 end)/1024/1024/1024 'totalSize',
        sum(case when param_key='numFiles' then  param_value else 0 end) 'numFiles'
from TBLS a
left join TABLE_PARAMS b on a.TBL_ID = b.TBL_ID
where a.TBL_NAME not like '%_hbase'
group by a.TBL_NAME
) as a order by a.totalSize desc
-- 分区表,元数据不一致处理,统一更新
-- select  T1.TBL_NAME, T4.PART_NAME, T5.CD_ID, T3.CD_ID
-- from TBLS T1,DBS T2,SDS T3,PARTITIONS T4, SDS T5
UPDATE TBLS T1,DBS T2,SDS T3,PARTITIONS T4, SDS T5
SET T5.CD_ID = T3.CD_ID
WHERE T2.NAME = 'edw'
AND T1.TBL_NAME = 'test20200415'
AND T1.DB_ID = T2.DB_ID
AND T1.SD_ID = T3.SD_ID
AND T1.TBL_ID=T4.TBL_ID
AND T4.SD_ID = T5.SD_ID
and T5.CD_ID <> T3.CD_ID

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://blog.turboway.top/article/hive2/

许可协议:署名-非商业性使用 4.0 国际许可协议