Hive日常操作
模糊搜索表:show tables like '*name*';
查看表结构:desc table_name
查看表的详细信息:desc formatted table_name
查看分区信息:show partitions table_name;
根据分区查询数据:select table_coulm from table_name where partition_name = '2018-11-01';
删除分区:alter table table_name drop partition(dt='2018-11-01');
修改表名: alter table table_name rename to table_name_new;
复制表结构:CREATE TABLE table_name LIKE table_name_old;
添加字段:alter table table_name add columns(site_uv bigint comment '到站UV');
查看hdfs文件信息:dfs -ls /user/hive/warehouse/table_name;
查询结果导出到文件
insert overwrite local directory '/tmp/output' select * from table_name; insert overwrite local directory '/tmp/output' row format delimited fields terminated by ',' select * from table_name -- 或者 hive -e 'select * from table_name' > /tmp/output
kill hive job:hadoop job -kill job_201811011453_58225
<>
这个符号是不等于的意思,相当于 !=
hive查询显示列名
set hive.cli.print.header=true; // 打印列名 set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能 set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数
从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字)
LOAD DATA LOCAL INPATH 'dim_config.txt' OVERWRITE into table default.dim_config; --从查询语句给table插入数据 INSERT OVERWRITE TABLE dim_config PARTITION(ds) select * from default.dim_config_old where ds='2018-11-01';
自定义udf函数
1. 继承UDF类 2. 重写evaluate方法 3. 把项目打成jar包 4. hive中执行命令add jar /home/root/dw_etl/pub/udf/GetProperty.jar; 5. 创建函数 create temporary function get_pro as 'bi.Get_Property';
开启简单模式不启用mr: set hive.fetch.task.conversion=more;
hive默认分隔符 \001
hive命令行中查看当前hive环境变量 !env
hive命令行中查看当前hive及hadoop环境变量 set -v
sqoop导出sequencefile格式的文件时需要特殊处理(自行百度),默认需要使用textfile
Hive将一行记录拆分成多行
select username,browse_product from default.user_browse lateral view explode(split(product, ',')) virtual_table_name as browse_product;
hive子查询时的错误Unsupported SubQuery Expression : Correlating expression cannot contain unqualified column references
原因:hive子查询列名要具有确定性,需要给表加个别名 select b from tablename t1 where t1.b in (select b from t2);
hive优化原则
- hive优化原则,减小map数,减少job数
hive优化参数
set hive.merge.mapfiles=true; set hive.merge.mapredfiles=true; set mapred.max.split.size=268435456; set hive.merge.size.per.task=268435456; set hive.merge.smallfiles.avgsize=134217728;
hive异常定位
- hive创建有分区到外部表时,一定要先增加分区,然后才能查到数据,如果不手动新增分区是查不到数据的
LTER TABLE adcall ADD IF NOT EXISTS PARTITION(day='$date', hou='$hour');
- hive查询时需要估算下结果的大小,特别时有子查询时,会把查询结果存放到本地,防止中间结果太多硬盘满了
- hive查询不动了,假死,首先查看NodeManager的日志,多半是NodeManager挂掉了,或者处于unhealthy state状态
- job执行报错,可能就是nodemanager的问题,而不是resourcemanager的问题
欢迎订阅「K叔区块链」 - 专注于区块链技术学习
博客地址:http://www.jouypub.com
简书主页:https://www.jianshu.com/u/756c9c8ae984
segmentfault主页:https://segmentfault.com/blog/jouypub
腾讯云主页:https://cloud.tencent.com/developer/column/72548