hive小记
Hive介绍
1、Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架
2、Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能
3、Hive处理的数据存储在HDFS,底层实现是MapReduce,执行程序运行在Yarn上
4、当我们提到hive查询时,底层引擎不一定是MapReduce,较流行的引擎有Presto和Spark等
Hive小抄
hdfs文件导表
-- 常规建表
create table if not exists tmp.tmp_uid_table (
name string comment 'name',
age bigint comment 'age'
)comment '临时表'
row format delimited
fields terminated by ','
stored as textfile;
-- csv内容中包含双引号,则下面的相关配置改一下
ROW FORMAT serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties (
'separatorChar' = ',',
'quoteChar' = '"',
'escapeChar' = '\\'
)
STORED AS TEXTFILE;
-- 导表
load data inpath '/user/liaohuiqiang/tmp_uid.csv' overwrite into table tmp.tmp_uid_table;
服务器拉hive数据
hive -e "set hive.cli.print.header=true;set hive.resultset.use.unique.column.names=false;select * from tmp.tmp_uid_table" > tmp_uid.csv;
可以通过(a|b|c)?+.+
来排除某些列,有些引擎不支持(版本低),可以尝试增加配置
set hive.support.quoted.identifiers=none;
distribute by和sort by
-- 常规
select * from table order by time desc limit 50;
-- 优化
select * from (select * from table distribute by time sort by time desc limit 50 ) t order by time desc limit 50;
一些函数
get_json_object(字段名, '$.key名')
substring_index(源字符串, 分割字符串, 取前几段)
trunc("${day}",'MM') -- 每个月1号
array_contains(array, value)
concat_ws(sort_array(collect_list(字段)))
null操作的返回值
not null返回的是null
null = 'CN' 返回的是null
null and/or/= null 返回的是null
null and false 返回的是false
null and true 返回的是null
null or false 返回的是null
null or true 返回的是true
使用较少的语法
alter table tmp.old rename to tmp.new;
ALTER TABLE tmp.table change col_old col_new bigint comment ""; -- double改不成bigint