前言
嗨,各位小伙伴,恭喜大家学习到这里,不知道关于大数据前面的知识遗忘程度怎么样了,又或者是对大数据后面的知识是否感兴趣,本文是《大数据从入门到精通(超详细版)》
的一部分,小伙伴们如果对此感谢兴趣的话,推荐大家按照大数据学习路径开始学习哦。
以下就是完整的学习路径哦。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
推荐大家认真学习哦!!!
上一篇文章我们主要讲了Hive的虚拟列的使用与数据抽样操作,接下来的文章我们将讲解Hive的函数使用。重点帮助大家学习函数的分类与常见的函数及其实际的操作用法。
文章目录
函数的分类
Hive的函数分为两大类:内置函数(Built-in Functions)、用户定义函数UDF(User-Defined Functions)
内置函数
:Hive诞生时已经帮助我们定义好了的函数。用户定义函数
:Hive本身不包含的,需要我们使用Hive本身的SDK去自定义开发。
接下来我们讲解的函数是最常用最实用的函数,而对于不常用的函数我们无法一一讲解,主打一个使用。
内置函数
查看函数列表
Hive当中的函数这么多,我们应该如何查看这些函数呢?
-
使用s
how functions
查看当下可用的所有函数;通过这条命令的结果得知,Hive拥有多达290条函数
-
通过
describe function extended [funcname]
来查看函数的使用方式。通过这条命令,我们可以看到具体函数的详细用法与解释。
数值函数(Mathematical Functions )
-
取整函数:
round
返回double类型的整数值部分 (遵循四舍五入)select round(3.1415926);
-
指定精度取整函数:
round(double a, int d)
返回指定精度d的double类型select round(3.1415926,4);
-
取随机数函数:
rand
每次执行都不一样 返回一个0到1范围内的随机数select rand();
-
得到一个稳定的随机数序列,每次执行结果都一样
select rand(3);
指定种子取随机数函数:
rand(int seed)
; -
求数字的绝对值
select abs(-3);
-
得到pi值(小数点后15位精度)
select pi();
集合函数(Collection Functions)
以下是集合函数全部内容,用到时进行查询即可
Return Type | Name(Signature) | Description |
---|---|---|
int | size(Map<K.V>) | 返回map类型的元素个数 |
int | size(Array) | 返回array类型的元素个数 |
array | map_keys(Map<K.V>) | 返回map内的全部key(得到的是array) |
array | map_values(Map<K.V>) | 返回map内的全部value(得到的是array) |
boolean | array_contains(Array, value) | 如果array包含指定value,返回True |
array | sort_array(Array) | 根据数组元素的自然顺序按升序对输入数组进行排序并返回它 |
-
ARRAY(expr1, expr2, ...)
:将多个表达式组成一个数组。 示例:ARRAY(1, 2, 3) 返回 [1, 2, 3]
-
MAP(key1, value1, key2, value2, ...)
:将多个键值对组成一个映射。 示例:MAP(‘name’, ‘John’, ‘age’, 30) 返回 {‘name’: ‘John’, ‘age’: 30}
-
STRUCT(expr1, expr2, ...)
:将多个表达式组成一个结构体。 示例:STRUCT(‘John’, 30) 返回 {name: ‘John’, age: 30}
-
SIZE(collection)
:返回给定集合的大小。示例:
SIZE(array_column)
返回数组的大小 -
ELEMENT_AT(collection, index)
:返回给定集合中指定索引的元素。示例:
ELEMENT_AT(array_column, 2)
返回数组中索引为2的元素 -
ARRAY_CONTAINS(array, value)
:检查给定数组是否包含指定元素。示例:
ARRAY_CONTAINS(array_column, 'value')
检查数组是否包含’value’ -
MAP_KEYS(map)
:返回给定映射中所有键的数组。示例:
MAP_KEYS(map_column)
返回映射中的所有键构成的数组 -
MAP_VALUES(map)
:返回给定映射中所有值的数组。示例:
MAP_VALUES(map_column)
返回映射中的所有值构成的数组 -
TRANSFORM(array, expr, ...)
:对给定数组中的每个元素执行表达式,并返回结果数组。示例:
TRANSFORM(array_column, x -> x + 1)
对数组中的每个元素执行加1操作 -
FILTER(array, condition)
:对给定数组进行过滤,只返回符合条件的元素构成的新数组。示例:
FILTER(array_column, x -> x > 5)
返回数组中大于5的元素构成的新数组
类型转换函数(Type Conversion Functions)
类型转换函数就两个,二进制和强行转换。
Return Type | Name(Signature) | Description |
---|---|---|
binary | binary(string|binary) | 将给定字符串转换为二进制 |
Expected “=” to follow “type” | cast(expr as ) | 将表达式 expr 的结果转换为给定类型 。例如,cast(‘1’ as BIGINT) 会将字符串 ‘1’ 转换为整数表示。如果转换不成功,则返回 null。对于cast(expr as boolean),对于非空字符串将会返回True |
日期函数(Date Functions)
Return Type | Name(Signature) | Description |
---|---|---|
timestamp | current_timestamp() | 返回当前时间戳。在同一个查询中对 current _ time戳的所有调用都返回相同的值。 |
date | current_date | 返回当前日期。在同一个查询中对current_date戳的所有调用都返回相同的值。 |
2.1.0版本之前返回string现在版本返回date | to_date(string timestamp) | 时间戳转日期 |
int | year(string date)quarter(date/timestamp/string)month(string date)day(string date) dayofmonth(date)hour(string date)minute(string date)second(string date)weekofyear(string date) | 得到给定时间的:年得到给定时间的:季度得到给定时间的:月得到给定时间的:日得到给定时间的:当前月份第几天得到给定时间的:小时得到给定时间的:分钟得到给定时间的:秒得到给定时间的:本年第几周 |
int | datediff(string enddate, string startdate) | 返回enddate 到 startdate之间的天数 |
2.1.0版本之前返回string现在版本返回date | date_add(date/timestamp/string startdate, tinyint/smallint/int days)date_sub(date/timestamp/string startdate, tinyint/smallint/int days) | 日期相加: date_add(‘2008-12-31’, 1) = ‘2009-01-01’.日期相减: date_sub(‘2008-12-31’, 1) = ‘2008-12-30’. |
条件函数(Conditional Functions)
Return Type | Name(Signature) | Description |
---|---|---|
T | if(boolean testCondition, T valueTrue, T valueFalseOrNull) | 如果 testCondition 为 true,则返回 valueTrue,否则返回 valueFalseOrNull。 |
boolean | isnull( a ) | 如果 a 为 NULL,则返回 true,否则返回 false。 |
boolean | isnotnull ( a ) | 如果 a 不****为 NULL,则返回 true,否则返回 false。 |
T | nvl(T value, T default_value) | 如果value为 null,则返回default_value,否则value。 |
T | COALESCE(T v1, T v2, …) | 返回第一个不是 NULL 的 v,如果所有 v 都是 NULL,则返回 NULL。 |
T | CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END | 当 a = b 时,返回 c; [当 a = d 时,返回 e]* ;否则返回 f。 |
T | CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END | When a = true, returns b; when c = true, returns d; else returns e.a可以是表达式,如1=1 |
T | nullif( a, b ) | 如果 a=b,则返回 NULL;否则返回a 。等价:CASE WHEN a = b then NULL else a |
void | assert_true(boolean condition) | 如果boolean_condition结果不为True,则引发异常报错比如:select assert_true (2<1). |
示例:
if函数
: 判断truename字段是否为空,空的话返回“不知道名字” , 不为空的话返回字段本身
select if(truename is null , '不知道名字' ,truename ) from user;
字符串函数(String Functions)
Return Type | Name(Signature) | Description |
---|---|---|
string | concat(string|binary A, string|binary B…) | 连接字符串For example, concat(‘foo’, ‘bar’) results in ‘foobar’ |
string | concat_ws(string SEP, string A, string B…) | 同concat,但是可以自己定义字符串之间的分隔符(SEP) |
int | length(string A) | 字符串长度 |
string | lower(string A)upper(string a) | 全部转小写全部转大写 |
string | trim(string A) | 返回从 A 的两端裁剪空格得到的字符串。例如,trim(‘ foobar ’)的结果是‘ foobar’ |
array | split(string str, string pat) | 按照pat分隔字符串,pat是正则表达式 |
数据脱敏函数(Data Masking Functions)
Return Type | Name(Signature) | Description |
---|---|---|
string | mask_hash(string|char|varchar str) | 对字符串进行hash加密非字符串加密会得到NULL |
加密示例:
select mask_hash('hadoop');
其他函数(Misc. Functions)
Return Type | Name(Signature) | Description |
---|---|---|
int | hash(a1[, a2…])) | 返回参数的hash数字 |
string | current_user() | 返回当前登录用户 |
string | current_database() | 返回当前选择的数据库 |
string | version() | 返回当前hive版本 |
string | md5(string/binary) | 返回给定参数的md5值 |
以上就是Hive的内置函数的介绍了,大家认真学习吧。
结尾
恭喜小伙伴完成本篇文章的学习,相信文章的内容您已经掌握得十分清楚了,如果您对大数据的知识十分好奇,请接下来跟着学习路径完成大数据的学习哦,相信你会做到的~~~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
据的学习哦,相信你会做到的~~~