load:数据导入
load DATA [local] INPATH 'filepath' [overwrite] into table tablename [partition (partition1=val1,partition2=val2...)]
1,'filepath' 可以为/root/data/data1.txt一个文件,也可以是/root/data一个路径,此时则会将改路径下所有文件都会写入到tablename表当中
查询
SELECT [ALL | DISTINCT] select_expr,select_expr,...
FROM table_reference
[WHERE where_condition]
[
GROUP BY col_list
| [DISTRIBUTE BY col_list] [ STORT BY col_list] (DISTRIBUTE 指定分发器,多Reducer可用)
| [ORDER BY col_list]
]
[LIMIT number]
字段解释
[ALL | DISTINCT] # 查询的字段
[WHERE where_condition] # where子句
# 类似我们传统SQL的where 条件
# 目前支持 AND,OR ,0.9版本支持between
# IN, NOT IN
# 不支持EXIST ,NOT EXIST
[GROUP BY col_list [HAVING condition]] # 字段分组和having子句
[SORT BY| ORDER BY col_list] # 排序
# ORDER BY与SORT BY的不同
# ORDER BY 全局排序,只有一个Reduce任务
# SORT BY 只在本机做排序
[LIMIT number] # 限制查询记录数
fetch task
配置fetch task后—(当使用简单的查询语句(不含有排序、函数)。不会生成mapreduce作业,而直接使用fetch task在HDFS中查询输出)
1— set hive.fetch.task.conversion=more
2— hive --hiveconf hive.fetch.task.conversion=more
3— 修改hive-site.xml
1,2 在 hive下设置,当退出时失效,3可以一直有效
where
where_condition:int型可以不用 " ",string要用(区分大小写)
order by
set hive.groupby.orderby.position,alias=true
之后列可以直接使用数字来表示
eg:select col1,col2 from tablename oder by 4;
NULL
只能使用is来判断,不能用=
nvl(colume,0),当colum列为NULL时,则改为
在order by排序中,升序显示在最前(一般先设置为0),降序在最后
函数
1,内置函数
round(,) ceil() float()
字符函数:
lower(),upper(),substr(,,),trim(),lpad(),rpad()
收集函数:size(map(<>,<>))
转换函数:cast()
日期函数:to_data(),year(),month(),day(),weekofyear(),datediff(),data_add(),data_sub()
条件函数:coalesce(),case..then...
2,聚合函数:count(),sum(),max().min(),avg()
3,表生成函数:explode(),把map集合,或者 数组中每个元素单独生成一个行
4,java自定义函数
连接
1,等值连接(where连接条件为=)
select a.col1,a.col2,b.col1
from tablename1 a , tablename2 b
where a.col3=b.col2;
2,不等值连接
select a.col1,a.col2,b.col1
from tablename1 a , tablename2 b
where a.col3 between b.col1 and b.col2;
3,外连接
right outer join
left outer join
full join
outer join
inner join
4,自连接(表内关系查询)
select a.col1, b.col2
from tablename1 a,tablename1 b
where a.col1=b.col3
子查询
Hive只支持where和from子句的子查询
主查询和子查询可以不是同一张表
子查询中的空值NULL问题: 不能使用not in
select a.col1 from tablename1 a where a,col1 in (select b.tablename2 from tablename2 b where b.col2="val1")
网友评论