[TOC]
# 内置函数
内容较多,见《Hive官方文档》
`https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF`
测试各种内置函数的快捷方法:
1. 创建一个dual表
~~~
create table dual(id string);
~~~
load一个文件(一行,一个空格)到dual表
~~~
select substr('angelababy',2,3) from dual;
~~~
# 日期函数
UNIX时间戳转日期函数: from_unixtime
获取当前UNIX时间戳函数: unix_timestamp
日期转UNIX时间戳函数: unix_timestamp
指定格式日期转UNIX时间戳函数: unix_timestamp
日期时间转日期函数: to_date
日期转年函数: year
日期转月函数: month
日期转天函数: day
日期转小时函数: hour
日期转分钟函数: minute
日期转秒函数: second
日期转周函数: weekofyear
日期比较函数: datediff
日期增加函数: date_add
日期减少函数: date_sub
**UNIX 时间戳转日期函数 : from_unixtime**
语法:` from_unixtime(bigint unixtime[, string format])`
返回值: string
说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式
举例:
~~~
hive> select from_unixtime(1323308943,'yyyyMMdd') from dual;
20111208
~~~
**获取当前 UNIX 时间戳函数 : unix_timestamp**
语法: unix_timestamp()
返回值: bigint
说明: 获得当前时区的UNIX时间戳
举例:
~~~
hive> select unix_timestamp() from dual;
1323309615
~~~
**日期转 UNIX 时间戳函数 : unix_timestamp**
语法: unix_timestamp(string date)
返回值: bigint
说明: 转换格式为`"yyyy-MM-dd HH:mm:ss"`的日期到UNIX时间戳。如果转化失败,则返回0。
举例:
~~~
hive> select unix_timestamp('2011-12-07 13:01:03') from dual;
1323234063
~~~
**指定格式日期转 UNIX 时间戳函数 : unix_timestamp**
语法: unix_timestamp(string date, string pattern)
返回值: bigint
说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。
举例:
~~~
hive> select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss') from dual;
1323234063
~~~
**日期时间转日期函数 : to_date**
语法: to_date(string timestamp)
返回值: string
说明: 返回日期时间字段中的日期部分。
举例:
~~~
hive> select to_date('2011-12-08 10:03:01') from dual;
2011-12-08
~~~
**日期转年函数 : year**
语法: year(string date)
返回值: int
说明: 返回日期中的年。
举例:
~~~
hive> select year('2011-12-08 10:03:01') from dual;
2011
hive> select year('2012-12-08') from dual;
2012
~~~
**日期转月函数 : month**
语法: month (string date)
返回值: int
说明: 返回日期中的月份。
举例:
~~~
hive> select month('2011-12-08 10:03:01') from dual;
12
hive> select month('2011-08-08') from dual;
8
~~~
**日期转天函数 : day**
语法: day (string date)
返回值: int
说明: 返回日期中的天。
举例:
~~~
hive> select day('2011-12-08 10:03:01') from dual;
8
hive> select day('2011-12-24') from dual;
24
~~~
**日期转小时函数 : hour**
语法: hour (string date)
返回值: int
说明: 返回日期中的小时。
举例:
~~~
hive> select hour('2011-12-08 10:03:01') from dual;
10
~~~
**日期转分钟函数 : minute**
语法: minute (string date)
返回值: int
说明: 返回日期中的分钟。
举例:
~~~
hive> select minute('2011-12-08 10:03:01') from dual;
3
~~~
**日期转秒函数 : second**
语法: second (string date)
返回值: int
说明: 返回日期中的秒。
举例:
~~~
hive> select second('2011-12-08 10:03:01') from dual;
1
~~~
**日期转周函数 : weekofyear**
语法: weekofyear (string date)
返回值: int
说明: 返回日期在当前的周数。
举例:
~~~
hive> select weekofyear('2011-12-08 10:03:01') from dual;
49
~~~
**日期比较函数 : datediff**
语法: datediff(string enddate, string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数。
举例:
~~~
hive> select datediff('2012-12-08','2012-05-09') from dual;
213
~~~
**日期增加函数 : date_add**
语法: date_add(string startdate, int days)
返回值: string
说明: 返回开始日期startdate增加days天后的日期。
举例:
~~~
hive> select date_add('2012-12-08',10) from dual;
2012-12-18
~~~
**日期减少函数 : date_sub**
语法: date_sub (string startdate, int days)
返回值: string
说明: 返回开始日期startdate减少days天后的日期。
举例:
~~~
hive> select date_sub('2012-12-08',10) from dual;
2012-11-28
~~~
# 条件函数
If函数: if
非空查找函数: COALESCE
条件判断函数:CASE
**If 函数 : if**
语法: `if(boolean testCondition, T valueTrue, T valueFalseOrNull)`
返回值: T
说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull
举例:
~~~
hive> select if(1=2,100,200) from dual;
200
hive> select if(1=1,100,200) from dual;
100
~~~
**非空查找函数 : COALESCE**
语法: `COALESCE(T v1, T v2, …)`
返回值: T
说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
举例:
~~~
hive> select COALESCE(null,'100','50′) from dual;
100
~~~
**条件判断函数: CASE**
语法 : `CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END`
返回值 : T
说明:如果 a 等于 b ,那么返回 c ;如果 a 等于 d ,那么返回 e ;否则返回 f
举例:
~~~
hive> Select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from dual;
mary
~~~
# 字符串函数
字符串长度函数:length
字符串反转函数:reverse
字符串连接函数:concat
带分隔符字符串连接函数:concat_ws
字符串截取函数:substr,substring
字符串截取函数:substr,substring
字符串转大写函数:upper,ucase
字符串转小写函数:lower,lcase
去空格函数:trim
左边去空格函数:ltrim
右边去空格函数:rtrim
正则表达式替换函数:regexp_replace
正则表达式解析函数:regexp_extract
URL解析函数:parse_url
json解析函数:get_json_object
空格字符串函数:space
重复字符串函数:repeat
首字符ascii函数:ascii
左补足函数:lpad
右补足函数:rpad
分割字符串函数: split
集合查找函数: find_in_set
**字符串长度函数: length**
语法: length(string A)
返回值: int
说明:返回字符串A的长度
举例:
~~~
hive> select length('abcedfg') from dual;
7
~~~
**字符串反转函数: reverse**
语法: reverse(string A)
返回值: string
说明:返回字符串A的反转结果999999举例:
~~~
hive> select reverse(abcedfg’) from dual;
gfdecba
~~~
- linux
- 常用命令
- 高级文本命令
- 面试题
- redis
- String
- list
- hash
- set
- sortedSet
- 案例-推荐
- java高级特性
- 多线程
- 实现线程的三种方式
- 同步关键词
- 读写锁
- 锁的相关概念
- 多线程的join
- 有三个线程T1 T2 T3,保证顺序执行
- java五种线程池
- 守护线程与普通线程
- ThreadLocal
- BlockingQueue消息队列
- JMS
- 反射
- volatile
- jvm
- IO
- nio
- netty
- netty简介
- 案例一发送字符串
- 案例二发送对象
- 轻量级RPC开发
- 简介
- spring(IOC/AOP)
- spring初始化顺序
- 通过ApplicationContextAware加载Spring上下文
- InitializingBean的作用
- 结论
- 自定义注解
- zk在框架中的应用
- hadoop
- 简介
- hadoop集群搭建
- hadoop单机安装
- HDFS简介
- hdfs基本操作
- hdfs环境搭建
- 常见问题汇总
- hdfs客户端操作
- mapreduce工作机制
- 案列-单词统计
- 局部聚合Combiner
- 案列-流量统计(分区,排序,比较)
- 案列-倒排索引
- 案例-共同好友
- 案列-join算法实现
- 案例-求topN(分组)
- 自定义inputFormat
- 自定义outputFormat
- 框架运算全流程
- mapreduce的优化方案
- HA机制
- Hive
- 安装
- DDL操作
- 创建表
- 修改表
- DML操作
- Load
- insert
- select
- join操作
- 严格模式
- 数据类型
- shell参数
- 函数
- 内置运算符
- 内置函数
- 自定义函数
- Transform实现
- 特殊分割符处理
- 案例
- 级联求和accumulate
- flume
- 简介
- 安装
- 常用的组件
- 拦截器
- 案例
- 采集目录到HDFS
- 采集文件到HDFS
- 多个agent串联
- 日志采集和汇总
- 自定义拦截器
- 高可用配置
- 使用注意
- sqoop
- 安装
- 数据导入
- 导入数据到HDFS
- 导入关系表到HIVE
- 导入表数据子集
- 增量导入
- 数据导出
- 作业
- 原理
- azkaban
- 简介
- 安装
- 案例
- 简介
- command类型单一job
- command类型多job工作流flow
- HDFS操作任务
- mapreduce任务
- hive脚本任务
- hbase
- 简介
- 安装
- 命令行
- 基本CURD
- 过滤器查询
- 系统架构
- 物理存储
- 寻址机制
- 读写过程
- Region管理
- master工作机制
- 建表高级属性
- 与mapreduce结合
- 协处理器
- 点击流平台开发
- 简介
- storm
- 简介
- 安装
- 集群启动及任务过程分析
- 单词统计
- 并行度
- ACK容错机制
- ACK简介