hive数据类型
1) 原子数据类型
- TinyInt:1byte有符号整数
- SmallInt:2byte有符号整数
- Int:4byte有符号整数
- BigInt:8byte有符号整数
- Float:单精度浮点数
- Double:双精度浮点数
- Boolean:布尔类型
- String:字符串
- TimeStamp:整数
2) 复杂数据类型
Array\<Type>
- 由一系列相同数据类型的元素组成
- 这些元素可以通过 下标 来访问
- 查询时如果查到返回响应值,没查到则返回null
建表:
create table person(name string,work_locations array\<string>)
row format delimited fields terminated by ‘\t’
collection items terminated by ‘,’;
导入数据:
load data local inpath ‘/home/sigeon/person.txt’ into table person;
查询
Select work_locations[0] from person;
Map<KType, VType>
- 包含 key-value 键值对
- 可以通过 key 来访问元素
建表语句:
create table score(name string, scores map)
row format delimited fields terminated by ‘\t’
collection items terminated by ‘,’
map keys terminated by ‘:’;
导入数据:
load data local inpath ‘/home/sigeon/score.txt’ into table score;
查询语句:
Select scores[‘Chinese’] from score;
Struct<Param1:Type1, Param1:Type1, … >
- 可以包含不同数据类型的元素
类似于c语言中的结构体 - 这些元素可以通过 点语法 的方式来得到
建表语句:
create table course(id int,course struct<name:string, score:int>)
row format delimited fields terminated by ‘\t’
collection items terminated by ‘,’;
导入数据:
load data local inpath ‘/ home/sigoen/course.txt’ into table course;
查询语句:
Select c.course.score from course c;
- 可以包含不同数据类型的元素
几个分隔符
指定分隔符要按从外向内的顺序,字段 -> 集合元素 ->map k-v
- ROW FORMAT:指定分隔符的关键字
- DELIMITED FIELDS TERMINATED BY:字段分隔符
- COLLECTION ITEMS TERMINATED BY:集合元素分隔符(Array 中的各元素、Struct 中的各元素、 Map 中的 key-value 对之间)
- MAP KEYS TERMINATED BY:Map 中 key 与 value 的分隔符
- LINES TERMINATED BY:行之间的分隔符
hive视图
和关系型数据库一样,Hive也提供了视图的功能
Hive 的视图和关系型数据库的视图有很大的区别:
- 1、只有逻辑视图,没有物化视图;
- 2、视图只能查询,不能增删改 (Load|Insert/Update/Delete) 数据;
- 3、视图在创建时候,只是保存了一份元数据 (存在TBLS中),当查询视图的时候,才开始执行视图对应的那些子查询
视图元数据只存储了hql语句,而不是执行结果
视图操作
创建视图
1
create view my_view as <select * from mytable> [limit 500];
查看视图
- show tables; // 显示所有表和视图
- show views; //显示所有视图
- desc [formatted] view_name; // 查看某个具体视图的(详细)信息
视图类型:VIRTUAL_VIEW
删除视图
- drop view [if exists] view_name
使用视图
- select count(distinct uid) from my_view;
hive函数
函数分类
- UDF(自定义函数 User-Defined Function)作用于单个数据行,产生一个数据行作为输出。(数学函数,字 符串函数)
- UDAF(用户定义聚集函数 User-Defined Aggregation Funcation):接收多个输入数据行,并产 生一个输出数据行。(count,max)
- UDTF(表格生成函数 User-Defined Table Function):接收一行输入,输出多行(explode)
内置函数
查看函数命令
- 查看内置函数: show functions;
- 显示函数的详细信息: desc function [extended] fun_name;
extended:显示扩展信息
分类
关系运算
- 分类
\1. 等值比较: =
\2. 等值比较:<=>
\3. 不等值比较: <>和!=
\4. 小于比较: <
\5. 小于等于比较: <=
\6. 大于比较: >
\7. 大于等于比较: >=
\8. 区间比较
\9. 空值判断: IS NULL
\10. 非空判断: IS NOT NULL
\10. LIKE 比较: LIKE
\11. JAVA 的 LIKE 操作: RLIKE
\12. REGEXP 操作: REGEXP
- 分类
数学运算
- 分类
\1. 加法操作: +
\2. 减法操作: –
\3. 乘法操作: *
\4. 除法操作: /
\5. 取余操作: %
\6. 位与操作: &
\7. 位或操作: |
\8. 位异或操作: ^
9.位取反操作: ~
- 分类
逻辑运算
- 分类
\1. 逻辑与操作: AND 、&&
\2. 逻辑或操作: OR 、||
\3. 逻辑非操作: NOT、!
- 分类
复合类型构造函数
- 分类
- array 结构
- map 结构
\3. struct 结构
\4. named_struct 结构
\5. create_union
- 分类
复合类型操作符
- \1. 获取 array 中的元素
- \2. 获取 map 中的元素
- \3. 获取 struct 中的元素
集合操作函数
\1. map 类型大小:size
\2. array 类型大小:size
\3. 判断元素数组是否包含元素:array_contains
\4. 获取 map 中所有 value 集合
\5. 获取 map 中所有 key 集合
\6. 数组排序
\7. 获取素组或map集合的单个元素(k-v对):explode()
当同时查询炸裂字段和普通字段时,需要使用横向虚拟视图:lateral view
- 如:select name,addr.city from usr_addr lateral view(address) addr as city;
这里一般需要给 查询结果 和 结果字段 起别名,不然没办法获得每个字段,如果只是查询所有的话就不需要了
- 如:select name,addr.city from usr_addr lateral view(address) addr as city;
类型转换函数
- \1. 二进制转换:binary
- \2. 基础类型之间强制转换:cast
数值计算函数
- \1. 取整函数: round
- \2. 指定精度取整函数: round
- \3. 向下取整函数: floor
- \4. 向上取整函数: ceil
- \5. 向上取整函数: ceiling
- \6. 取随机数函数: rand
- \7. 自然指数函数: exp
- \8. 以 10 为底对数函数: log10
- \9. 以 2 为底对数函数: log2
- \10. 对数函数: log
- \11. 幂运算函数: pow
- \12. 幂运算函数: power
- \13. 开平方函数: sqrt
- \14. 二进制函数: bin
- \15. 十六进制函数: hex
- \16. 反转十六进制函数: unhex
- \17. 进制转换函数: conv
- \18. 绝对值函数: abs
- \19. 正取余函数: pmod
- \20. 正弦函数: sin
- \21. 反正弦函数: asin
- \22. 余弦函数: cos
- \23. 反余弦函数: acos
- \24. positive 函数: positive
- \25. negative 函数: negative
字符串函数
- \1. 字符 ascii 码函数:ascii
- \2. base64 字符串
- \3. 字符串连接函数:concat
- \4. 带分隔符字符串连接函数:concat_ws
- \5. 数组转换成字符串的函数:concat_ws
- \6. 小数位格式化成字符串函数:format_number
- \7. 字符串截取函数:substr, substring
序号从1开始,可以传负数,代表从右开始 - \9. 字符串查找函数:instr
找到返回一个正整数,未找到返回0 - \10. 字符串长度函数:length
- \11. 字符串查找函数:locate
- \12. 字符串格式化函数:printf
- \13. 字符串转换成 map 函数:str_to_map
- \14. base64 解码函数:unbase64(string str)
- \15. 字符串转大写函数:upper,ucase
- \16. 字符串转小写函数:lower,lcase
- \17. 去空格函数:trim
- \18. 左边去空格函数:ltrim
- \19. 右边去空格函数:rtrim
- \20. 正则表达式替换函数:regexp_replace
- \21. 正则表达式解析函数:regexp_extract
- \22. URL 解析函数:parse_url
- \23. json 解析函数:get_json_object
- \24. 空格字符串函数:space
- \25. 重复字符串函数:repeat
- \26. 左补足函数:lpad
- \27. 右补足函数:rpad
- \28. 分割字符串函数: split
- \29. 集合查找函数: find_in_set
- \30. 分词函数:sentences
- \31. 分词后统计一起出现频次最高的 TOP-K
- \32. 分词后统计与指定单词一起出现频次最高的 TOP-K
日期函数
- \1. UNIX 时间戳转日期函数: from_unixtime
- \2. 获取当前 UNIX 时间戳函数: unix_timestamp
- \3. 日期转 UNIX 时间戳函数: unix_timestamp
- \4. 指定格式日期转 UNIX 时间戳函数: unix_timestamp
- \5. 日期时间转日期函数: to_date
- \6. 日期转年函数: year
- \7. 日期转月函数: month
- \8. 日期转天函数: day
- \9. 日期转小时函数: hour
- \10. 日期转分钟函数: minute
- \11. 日期转秒函数: second
- \12. 日期转周函数: weekofyear
- \13. 日期比较函数: datediff
- \14. 日期增加函数: date_add
- \15. 日期减少函数: date_sub
条件函数
- \1. If 函数: if( 条件 ,true返回参数,false返回参数 )
- \2. 当param1不为null返回param1,否则返回param2:nvl(param1, param2)
- \2. 非空查找函数: coalesce
- \3. 条件判断函数:case
混合函数
- 分类
\1. 调用 Java 函数:java_method
\2. 调用 Java 函数:reflect
\3. 字符串的 hash 值:hash
- 分类
XPath 解析 XML 函数
- 分类
\1. xpath
\2. xpath_string
\3. xpath_boolean
\4. xpath_short, xpath_int, xpath_long
\5. xpath_float, xpath_double, xpath_number
- 分类
汇总统计函数(UDAF)
- \1. 个数统计函数: count
- \2. 总和统计函数: sum
- \3. 平均值统计函数: avg
- \4. 最小值统计函数: min
- \5. 最大值统计函数: max
- \6. 非空集合总体变量函数: var_pop
- \7. 非空集合样本变量函数: var_samp
- \8. 总体标准偏离函数: stddev_pop
- \9. 样本标准偏离函数: stddev_samp
- 10.中位数函数: percentile
- \11. 中位数函数: percentile
- \12. 近似中位数函数: percentile_approx
- \13. 近似中位数函数: percentile_approx
- \14. 直方图: histogram_numeric
- \15. 集合去重数:collect_set
- \16. 集合不去重函数:collect_list
表格生成函数 Table-Generating Functions (UDTF)
- 分类
1.数组拆分成多行:explode(array)
2.Map 拆分成多行:explode(map)
- 分类
自定义函数
- \1. 需要继承 org.apache.hadoop.hive.ql.exec.UDF 类,实现一个或多个 evaluate() 方法
- \2. 将hive的jar包放在hive的classpath路径下,进入hive客户端,执行命令:add jar \
; - \3. 检查jar包是否添加成功,执行命令:list jars;
- \4. 给自定义函数 添加别名,并在hive中 注册 该函数,执行命令:create temporary function myfunc as ‘主类全路径名’;
myfunc:自定义函数别名
该方法创建的是临时函数,当前客户端关闭就没有了,下次重复第3,4步;
真实 生产中就是使用该方法! - \5. 查看hive函数库有没有成功添加,执行命令:show functions;
- \6. 调用函数时通过函数名和参数列表确定调用的是具体哪一个方法