hive常用函数

本文介绍了Hive中关于分区表的创建、数据上传、分区管理(包括删除和添加)、多级和动态分区,以及常用的时间函数和日期时间转换技巧。通过实例演示了如何使用partitionedby和LOAD DATA LOCAL INPATH等命令。
摘要由CSDN通过智能技术生成

1.1、partitioned by (fiels string…)

CREATE TABLE dept_partition(
 deptno int,
 dname string,
 loc string
)
PARTITIONED BY (day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' OVERWRITE INTO TABLE dept_partition PARTITION (day=20201225)

1.2、上传文件文件至指定分区,然后MSCK进行分区修复-(慎用,全部分区进行重新扫描)

[hadoop@node01 data]$ hadoop fs -mkdir  /user/hive/warehouse/test.db/dept_partition/day=20201226
[hadoop@node01 data]$ hadoop fs -put dept.txt /user/hive/warehouse/test.db/dept_partition/day=20201226
MSCK REPAIR TABLE dept_partition;

1.3、删除、添加分区

ALTER TABLE dept_partition DROP PARTITION(day='20201226'),PARTITION(day='20201225');
[hadoop@node01 data]$ hadoop fs -mkdir  /user/hive/warehouse/test.db/dept_partition/day=20201226
[hadoop@node01 data]$ hadoop fs -put dept.txt /user/hive/warehouse/test.db/dept_partition/day=20201226
ALTER TABLE dept_partition ADD  IF NOT EXISTS PARTITION (day=20201226) 
insert into table dept_partition partition(day='20201226')
select * from dept;

1.4、多级分区

CREATE TABLE dept_partition_d_h(
  deptno int,
  dname string,
  loc string
)
PARTITIONED BY (day string,hour string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' overwrite INTO table dept_partition_d_h partition(day='20201111',hour='06')

1.5、动态分区

CREATE TABLE emp_partition(
  `empno` int, 
  `ename` string, 
  `job` string, 
  `mgr` int, 
  `hiredate` string, 
  `sal` double, 
  `comm` double)
 partitioned by (deptno int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

set hive.exec.dynamic.partition.mode=nonstrict;
insert into table emp_partition partition(deptno)
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
 

2.1、时间函数

0: jdbc:hive2://node01:10000> current_date   
2020-12-13
0: jdbc:hive2://node01:10000> current_timestamp; 
2020-12-13 10:41:03.687

2.2. 日期->时间戳

1.unix_timestamp() 获取当前时间戳

select unix_timestamp() 
1565858389

2.unix_timestamp(string timestame) 输入的时间戳格式必须为’yyyy-MM-dd HH:mm:ss’,如不符合则返回null

select unix_timestamp('2019-08-15 16:40:00') 
1565858400
select unix_timestamp('2019-08-15') 
null

3.unix_timestamp(string date,string pattern) 将指定时间字符串格式字符串转化成unix时间戳,如不符合则返回null

select unix_timestamp('2019-08-15','yyyy-MM-dd') 
1565798400

select unix_timestamp('2019-08-15 16:40:00','yyyy-MM-dd HH:mm:ss')
1565858400

select unix_timestamp('2019-08-15','yyyy-MM-dd HH:mm:ss') 
null

2.2. 时间戳->日期
1.from_unixtime(bigint unixtime,string format) 将时间戳秒数转化为UTC时间,并用字符串表示,可通过format规定的时间格式,指定输出的时间格式,其中unixtime 是10位的时间戳值,而13位的所谓毫秒的是不可以的。

select from_unixtime(1565858389,'yyyy-MM-dd HH:mm:ss')
2019-08-15 16:39:49

select from_unixtime(1565858389,'yyyy-MM-dd')
2019-08-15

2.如果unixtime为13位的,需要先转成10位

select from_unixtime(cast(1553184000488/1000 as int),'yyyy-MM-dd HH:mm:ss')
2019-03-22 00:00:00

select from_unixtime(cast(substr(1553184000488,1,10) as int),'yyyy-MM-dd HH:mm:ss') 
2019-03-22 00:00:00

3.获取当前时间

select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')  
 2019-08-15 17:18:55

3.1、to_date

select to_date('2020-02-22 12:12:12')
2020-02-22

3.2、year month day hour minute second

select year('2020-02-22 12:12:12')
 2020

3.3、weekofyear 、 dayofmonth

select weekofyear('2020-10-21')
 43

3.4、months_between

select monthbetween('2020-02-01','2020-12-01-09');   ---10.25806452

3.5、add_months,datediff

select add_months('2020-09-09',2);  --2020-11-09
select datediff('2020-09-09 10:10:10','2020-12-01 12:12:12')  ---83

date_add

select date_add('2020-11-15',5);   -- 2020-11-20

date_sub

select date_sub('2020-11-15',5);   --2020-11-10

last_day

 select last_day('2020-12-01')    -- 2020-12-31

round、ceil、floor

select round(1.4)   1.0
select round(1.5)   2.0
select ceil(1.01);  2
select floor(1.999) 1

upper/lower

select upper('abc');   ABC
select lower('AbCDE')  abcde

length

select length('你好abc'); 7
select length('abc'); 3

trim

select trim(" effwa   ")   effwa

lpad/rpad

select lpad("123",10,"*");   *******123
select lpad("123",10,"*");   123******* 

regexp_replace

select regexp_replace("abcdefag","a","+")           +bcdef+g

substr

 select substr('abcde',3)         cde
 select substring('abcde',3)      cde
 select substr('abcde',-1)        e
 select substr('abcde',3,2)       cd
 select substring('abcde',3,2)    cd
 select substring('abcde',-2,2)   de

concat

concat_ws
select concat("abc","-","哈");   abc-哈哈
 select concat_ws('+',"abc","1321","哈哈") abc+1321+哈哈

json_tuple

create table t_rate
as
select 
movie, rate, time, userid,
year(from_unixtime(cast(time as bigint))) as year,
month(from_unixtime(cast(time as bigint))) as month,
day(from_unixtime(cast(time as bigint))) as day,
hour(from_unixtime(cast(time as bigint))) as hour,
minute(from_unixtime(cast(time as bigint))) as minute,
from_unixtime(cast(time as bigint)) ts
from 
(
select json_tuple(json, "movie","rate","time","userid") as(movie, rate, time, userid) from rating_json 
) tmp;

parse_url_tuple

select parse_url_tuple("http://www.google.com/test/film?param1=value1&param2=value2" ,'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'FILE',  'AUTHORITY', 'USERINFO')
+-----------------+-------------+------------------------------+-------+-------+-----------------------------------------+-----------------+-------+--+
|       c0        |     c1      |              c2              |  c3   |  c4   |                   c5                    |       c6        |  c7   |
+-----------------+-------------+------------------------------+-------+-------+-----------------------------------------+-----------------+-------+--+
| www.google.com  | /test/film  | param1=value1&param2=value2  | NULL  | http  | /test/film?param1=value1&param2=value2  | www.google.com  | NULL  |
+-----------------+-------------+------------------------------+-------+-------+-----------------------------------------+-----------------+-------+--+
一、关系运算: 4 1. 等值比较: = 4 2. 不等值比较: 4 3. 小于比较: < 4 4. 小于等于比较: 5 6. 大于等于比较: >= 5 7. 空值判断: IS NULL 5 8. 非空判断: IS NOT NULL 6 9. LIKE比较: LIKE 6 10. JAVA的LIKE操作: RLIKE 6 11. REGEXP操作: REGEXP 7 二、数学运算: 7 1. 加法操作: + 7 2. 减法操作: - 7 3. 乘法操作: * 8 4. 除法操作: / 8 5. 取余操作: % 8 6. 位与操作: & 9 7. 位或操作: | 9 8. 位异或操作: ^ 9 9.位取反操作: ~ 10 三、逻辑运算: 10 1. 逻辑与操作: AND 10 2. 逻辑或操作: OR 10 3. 逻辑非操作: NOT 10 四、数值计算 11 1. 取整函数: round 11 2. 指定精度取整函数: round 11 3. 向下取整函数: floor 11 4. 向上取整函数: ceil 12 5. 向上取整函数: ceiling 12 6. 取随机数函数: rand 12 7. 自然指数函数: exp 13 8. 以10为底对数函数: log10 13 9. 以2为底对数函数: log2 13 10. 对数函数: log 13 11. 幂运算函数: pow 14 12. 幂运算函数: power 14 13. 开平方函数: sqrt 14 14. 二进制函数: bin 14 15. 十六进制函数: hex 15 16. 反转十六进制函数: unhex 15 17. 进制转换函数: conv 15 18. 绝对值函数: abs 16 19. 正取余函数: pmod 16 20. 正弦函数: sin 16 21. 反正弦函数: asin 16 22. 余弦函数: cos 17 23. 反余弦函数: acos 17 24. positive函数: positive 17 25. negative函数: negative 17 五、日期函数 18 1. UNIX时间戳转日期函数: from_unixtime 18 2. 获取当前UNIX时间戳函数: unix_timestamp 18 3. 日期转UNIX时间戳函数: unix_timestamp 18 4. 指定格式日期转UNIX时间戳函数: unix_timestamp 18 5. 日期时间转日期函数: to_date 19 6. 日期转年函数: year 19 7. 日期转月函数: month 19 8. 日期转天函数: day 19 9. 日期转小时函数: hour 20 10. 日期转分钟函数: minute 20 11. 日期转秒函数: second 20 12. 日期转周函数: weekofyear 20 13. 日期比较函数: datediff 21 14. 日期增加函数: date_add 21 15. 日期减少函数: date_sub 21 六、条件函数 21 1. If函数: if 21 2. 非空查找函数: COALESCE 22 3. 条件判断函数:CASE 22 4. 条件判断函数:CASE 22 七、字符串函数 23 1. 字符串长度函数:length 23 2. 字符串反转函数:reverse 23 3. 字符串连接函数:concat 23 4. 带分隔符字符串连接函数:concat_ws 23 5. 字符串截取函数:substr,substring 24 6. 字符串截取函数:substr,substring 24 7. 字符串转大写函数:upper,ucase 24 8. 字符串转小写函数:lower,lcase 25 9. 去空格函数:trim 25 10. 左边去空格函数:ltrim 25 11. 右边去空格函数:rtrim 25 12. 正则表达式替换函数:regexp_replace 26 13. 正则表达式解析函数:regexp_extract 26 14. URL解析函数:parse_url 26 15. json解析函数:get_json_object 27 16. 空格字符串函数:space 27 17. 重复字符串函数:repeat 27 18. 首字符ascii函数:ascii 28 19. 左补足函数:lpad 28 20. 右补足函数:rpad 28 21. 分割字符串函数: split 28 22. 集合查找函数: find_in_set 29 八、集合统计函数 29 1. 个数统计函数: count 29 2. 总和统计函数: sum 29 3. 平均值统计函数: avg 30 4. 最小值统计函数: min 30 5. 最大值统计函数: max 30 6. 非空集合总体变量函数: var_pop 30 7. 非空集合样本变量函数: var_samp 31 8. 总体标准偏离函数: stddev_pop 31 9. 样本标准偏离函数: stddev_samp 31 10.中位数函数: percentile 31 11. 中位数函数: percentile 31 12. 近似中位数函数: percentile_approx 32 13. 近似中位数函数: percentile_approx 32 14. 直方图: histogram_numeric 32 九、复合类型构建操作 32 1. Map类型构建: map 32 2. Struct类型构建: struct 33 3. array类型构建: array 33 十、复杂类型访问操作 33 1. array类型访问: A[n] 33 2. map类型访问: M[key] 34 3. struct类型访问: S.x 34 十一、复杂类型长度统计函数 34 1. Map类型长度函数: size(Map) 34 2. array类型长度函数: size(Array) 34 3. 类型转换函数 35
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值