1.Hive JDBC
public class Hive01 {
private static String driverName="org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
Connection conn= DriverManager.getConnection("jdbc:hive2://hadoop102:1000/default","root","333");
Statement statement=conn.createStatement() ;
String sql="select * from student";
ResultSet res=statement.executeQuery(sql);
while(res.next()){
System.out.println(res.getString(1));
}
}
}
2.内置运算符
(1)关系运算符(where子句中使用)
A=B | sql不使用"==" |
---|---|
A<>B | 如果A不等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。 |
A IS NULL | |
A IS NOT NULL | |
A LIKE B | 如 果A或B值为”NULL”,结果返回”NULL”。字符串中 的””代表任一字符,”%”则代表多个任意字符。例如: (‘foobar’ like ‘foo’)返回FALSE,( ‘foobar’ like ‘foo _ _’或者 ‘foobar’ like ‘foo%’)则返回TURE |
(2)算术运算符
加减乘除,取余,位运算
(3)逻辑运算符(A、B是两个语句)
A && B | A和B同时正确时,返回TRUE,否则FALSE。如果A或B值为NULL,返回NULL。 |
---|---|
A竖线B | A或B正确,或两者同时正确返返回TRUE,否则FALSE。如果A和B值同时为NULL,返回NULL。 |
!A | 如果A为NULL或错误的时候返回TURE,否则返回FALSE。 |
(4)复杂类型函数
map | 通过指定的键值对,创建一个map |
---|---|
struct | 创建一个结构 |
array | 创建一个数组 |
(5)对复杂函数类型操作
A[n] | 返回数组A的第n个元素 |
---|---|
M[key] | 返回关键值对应的值 |
S.x | 返回字符串在结构s的位置 |
使用: 1) select col1[1] from complex
2) select col2[1] from complex
3) select col3.a,col3.b from complex
3.内置函数
(1)数学函数
使用:select round(3.1415926) from dual
输出 3.0
(2)收集函数
属性作为key,统计该属性有几个数值
(3)条件函数
例子:
(4)字符函数
4.内置聚合函数
5.内置表生成函数
6.hive分桶概述
分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。
由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。
6.1开启分桶
set hive.enforce.bucketing=true;
6.2 分桶操作
6.2.1分桶表中加载数据
insert into table bucket_table select columns from tbl;
insert overwrite table bucket_table select columns from tbl;
6.2.2分桶表抽样查询
select * from bucket_table tablesample(bucket 1 out of 4 on columns);
TABLESAMPLE语法:
tablesample(bucket x out of y on columnname)
x:表示从哪个bucket开始抽取数据
y:必须为该表总bucket数的倍数或因子
7.Hive Lateral view
Lateral View用于和UDTF函数(explode、split)结合来使用。
主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题
语法:
LATERAL VIEW udtf函数 表名 AS 字段名