大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Hue-hive sql常用函数详解,希望您对编程的造诣更进一步.
什么是hue
HUE是一个开源的Apache Hadoop UI系统,早期由Cloudera开发,后来贡献给开源社区。它是基于Python Web框架Django实现的。通过使用Hue我们可以通过浏览器方式操纵Hadoop集群。例如put、get、执行MapReduce Job等等
hue的查询工具
hive
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序
Impala
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。
Aggregate(聚合函数)
avg (col)
返回该组中元素的平均值或该组中列的不同值的平均值
count([DISTINCT] col)
count(*)返回检索到的行总数,包括包含空值的行。count(expr)返回所提供的表达式为非空的行数。count(DISTINCT expr[, expr])返回所提供的表达式唯一且非空的行数。可以通过hive. optimized .distinct.rewrite优化执行。
sum(col)
返回组中元素的和或组中列的不同值的和
max(col),min(col)
返回组中列的最大值,最小值
collect_set(col)
返回一组消除了重复元素的对象
Analytic(分析函数)
cume_dist()
计算一行在组中的相对位置,CUME_DIST总是返回大于0、小于或等于1的数,该数表示该行在N行中的位置
select
loan_amount,
user_id,
cume_dist() over(order by loan_amount) as rn1
from fin_tmp.app_user_y where user_id='30765911715'
查询结果如下:
loan_amount | user_id | rn1 |
---|---|---|
700 | 30765911715 | 0.25 |
1100 | 30765911715 | 0.5 |
4800 | 30765911715 | 0.75 |
10000 | 30765911715 | 1 |
row_number () over ([partition_by_clause] order_by_clause)
返回一个递增的整数序列,从1开始。对分区by子句生成的每个组重新启动序列。输出序列为重复的输入值包含不同的值。因此,无论输入值是否重复,序列都不会包含任何重复或空白。
select
create_time,
user_id,
row_number ( ) over ( PARTITION BY user_id ORDER BY create_time进行排序,执行完这个操作后对每一条数据进行顺序标号,从1开始递增,如果标号出现相同值时给不同的序号。 DESC ) rn
from fin_tmp.app_user_y
对用户表app_user_y中的user_id字段进行分组,然后按照create_time进行排序,执行完这个操作后对每一条数据进行顺序标号,从1开始递增,如果标号出现相同值时给不同的序号。
Collection(集合函数)
array_contains(Arraya,val)
如果数组内包含val,返回True;如果fullname这一列不是数组形式,先用array()函数转化下
sort_array(Array a)
根据数组元素的自然顺序对输入数组按升序排序并返回它
create_union(tag,val1,val2,…)
用标记参数指向的值创建一个联合类型
map(key1, value1, …)
创建具有给定键/值对的映射
named_struct(name1, val1, …)
用给定的字段名和值创建结构,注意:这里的name和val只能是给定的值,用已有的列不行
struct(val1, val2, …)
创建具有给定字段值的结构,这里的val可以是已有的列,也可以是给定的值
Complex Type(复合类型)
array(val1, val2, …)
用给定的元素创建一个数组
Conditional(条件函数)
assert_true(BOOLEAN condition)
如果成立返回NULL,如果不成立抛异常
select assert_true(2>1) from fin_tmp.app_user_y limit 1 select assert_true(user_id is not null) from fin_tmp.app_user_y limit 1
coalesce(T v1, T v2, …)
返回其参数中的第一个非空表达式,当你要在n个字段中选取某一个非空值
if(BOOLEAN testCondition, T valueTrue, T valueFalseOrNull)
当testCondition为真时返回valueTrue,否则返回valueFalseOrNull
select if (2>1,2,1) from fin_tmp.app_user_y limit 1 >>2 select if (2=1,2,1) from fin_tmp.app_user_y limit 1 >>1
isnotnull(a),isnull(a)
如果a不为空,则返回true,否则返回false;如果a为空,则返回true,否则返回false
nullif(a, b)
如果a=b返回NULL;否则返回一个(从Hive 2.2.0开始)
nvl(T value, T default_value)
返回默认值,如果值为空,否则返回值(如Hive 0.11)
Date(日期函数)
add_months(DATE|STRING|TIMESTAMP start_date, INT num_months)
返回start_date之后的num_months的日期(从Hive 1.1.0开始)。start_date是一个字符串、日期或时间戳。num_months是一个整数。start_date的时间部分被忽略。如果start_date是一个月的最后一天,或者结果月份的天数少于start_date的day组件的天数,那么结果就是结果月份的最后一天。否则,结果具有与start_date相同的day组件
current_date
注意没有(),返回查询求值开始时的当前日期(从Hive 1.2.0开始)。同一查询中的所有current_date调用都返回相同的值
current_timestamp()
返回查询求值开始时的当前时间戳(从Hive 1.2.0开始)。同一查询中的所有current_timestamp调用都返回相同的值
datediff(STRING enddate, STRING startdate)
返回从起始日期到结束日期的天数:datediff(‘2009-03-01’, ‘2009-02-27’) = 2
date_add(DATE startdate, INT days)
添加日期日期:date_add(‘2008-12-31’, 1) = ‘2009-01-01’。T = pre 2.1.0: STRING, 2.1.0 on: DATE
date_format(DATE|TIMESTAMP|STRING ts, STRING fmt)
将日期/时间戳/字符串转换为日期格式fmt指定的字符串值(从Hive 1.2.0开始)。支持的格式是JavaSimpleDateFormat格式——docs.oracle.com/javase/7/do…(‘2015-04-08’, ‘y’) = ‘2015’
date_sub(DATE startdate, INT days)
减去开始日期的天数:date_sub(‘2008-12-31’, 1) = ‘2008-12-30’。T = pre 2.1.0: STRING, 2.1.0 on: DATE
day(STRING date)
返回日期或时间戳字符串的日期部分:day(‘1970-11-01 00:00:00’) = 1, day(‘1970-11-01’) = 1
dayofmonth(STRING date)
返回日期或时间戳字符串的日期部分:dayofmonth(‘1970-11-01 00:00:00’) = 1, dayofmonth(‘1970-11-01’) =11
from_unixtime(BIGINT unixtime [, STRING format])
将yyyy-MM-dd HH:mm:ss格式的时间字符串转换为Unix时间戳(以秒为单位),使用默认时区和默认地区,如果转换失败,返回0:unix_timestamp(‘2009-03-20 11:30:01’) = 1237573801
hour(STRING date)
返回时间戳的时间:hour(‘2009-07-30 12:58:59′) = 12, hour(’12:58:59’) = 12。
last_day(STRING date),minute(STRING date),month(STRING date),second(STRING date)
返回日期所属的月份的最后一天(从Hive 1.1.0开始)。日期是一个格式为’yyyy-MM-dd HH:mm:ss’或’yyyy-MM-dd’的字符串。last_day(‘1970-11-01 00:11:00’) = 1970-11-30 返回日期或时间戳字符串的分钟数:minute(‘1970-11-01 00:00:00’) = 00, minute(‘1970-11-01 00:12:00’) = 12 返回日期或时间戳字符串的月份部分:month(‘1970-11-01 00:00:00’) = 11, month(‘1970-11-01’) = 11 返回日期或时间戳字符串的分钟数:second(‘1970-11-01 00:00:01’) = 01
months_between(DATE|TIMESTAMP|STRING date1, DATE|TIMESTAMP|STRING date2)
返回日期date1和date2之间的月数(从Hive 1.2.0开始)。如果date1晚于date2,则结果为正数。如果date1早于date2,则结果为负。如果date1和date2是一个月的相同天数或两个月的最后几天,那么结果总是一个整数。否则,UDF根据31天的月份计算结果的小数部分,并考虑date1和date2时间组件的差异。date1和date2类型可以是“yyyy-MM-dd”或“yyyy-MM-dd HH:mm:ss”格式的日期、时间戳或字符串。结果四舍五入到小数点后八位。例如:months_between(‘1997-02-28 10:30:00’, ‘1996-10-30’) = 3.94959677
next_day(STRING start_date, STRING day_of_week)
返回比start_date晚的第一个日期,并将其命名为day_of_week(从Hive 1.2.0开始)。start_date是一个字符串/日期/时间戳。day_of_week是指2个字母、3个字母或一周中某一天的全称(如Mo、tue、FRIDAY)。start_date的时间部分被忽略。例如:next_day(‘2020-03-31′,’Monday’) = 2020-04-06;及返回下周的的周一
quarter(DATE|TIMESTAMP|STRING a)
获取日期、时间戳或字符串在一年中的季度数,范围为1到4。示例:quarter(‘2015-04-08’) = 2
to_date(STRING timestamp)
返回时间戳字符串的日期部分,例如to_date(‘1970-01-01 00:00:00’)=1970-01-01
weekofyear(STRING date)
返回时间戳字符串的周数:weekofyear(‘1970-11-01 00:00:00’) = 44, weekofyear(‘1970-11-01’) = 44。
year(STRING date)
返回日期或时间戳字符串的年份部分:year(‘1970-01-01 00:00:00’) = 1970, year(‘1970-01-01’) = 1970
Mathematical(数学函数)
abs(DOUBLE a)
返回绝对值
ceil(DOUBLE a)
返回等于或大于a的最小BIGINT值
floor(DOUBLE a)
返回等于或小于a的最大BIGINT值
rand([INT seed])
返回一个从0到1均匀分布的随机数(从行到行变化)。指定种子将确保生成的随机数序列是确定的
round(DOUBLE a [, INT d])
返回四舍五入的BIGINT值a或a的四舍五入到d位小数
Misc(类型函数)
aes_decrypt(BINARY input, STRING|BINARY key)
使用AES(从Hive 1.3.0开始)解密输入。可以使用128、192或256位的密钥长度。如果安装了Java Cryptography Extension (JCE)无限强度管辖策略文件,则可以使用192和256位密钥。如果参数为NULL或键长度不属于允许的值之一,则返回值为NULL。例如:aes_decrypt(unbase64(‘y6Ss+zCYObpCbgfWfyNWTw==’), ‘1234567890123456’) =’ ABC’。
aes_encrypt(STRING|BINARY input, STRING|BINARY key)
使用AES加密输入(从Hive 1.3.0开始)。可以使用128、192或256位的密钥长度。如果安装了Java Cryptography Extension (JCE)无限强度管辖策略文件,则可以使用192和256位密钥。如果参数为NULL或键长度不属于允许的值之一,则返回值为NULL。例如:base64(aes_encrypt(‘ABC’, ‘1234567890123456’)) =’ y6Ss+zCYObpCbgfWfyNWTw==’。
crc32(STRING|BINARY a)
为字符串或二进制参数计算循环冗余校验值并返回bigint值(从Hive 1.3.0开始)。例如:crc32(‘ABC’) = 2743272264。
current_database()
返回当前数据库名
current_user()
返回当前用户名
get_json_object(STRING json, STRING jsonPath)
支持JSONPath的有限版本($:Root object,。:子操作符,[]:下标操作符为数组,*:通配符为[]
hash(a1[, a2…])
返回参数的哈希值
md5(STRING|BINARY a)
计算字符串或二进制文件的MD5 128位校验和(从Hive 1.3.0开始)。该值以32个十六进制数字的字符串形式返回,如果参数为NULL,则返回NULL。示例:md5(‘ABC’) = ‘902fbdd2b1df0c4f70b4a5d23525e9
String(字符串函数)
ascii(STRING str)
返回str的第一个字符的数值
base64(BINARY bin)
将参数从二进制转换为以64为基数的字符串
concat(STRING|BINARY a, STRING|BINARY b…)
按顺序将作为参数传入的字符串或字节连接起来,从而返回字符串或字节。例如,concat(‘foo’, ‘bar’)的结果是’foobar’。注意,这个函数可以接受任意数量的输入字符串
substr(STRING|BINARY A, INT start [, INT len])
返回从起始位置到字符串结束的字节数组的子字符串或片段,或使用可选长度len。例如,substr(‘foobar’, 4)会返回’bar’
substring(STRING|BINARY a, INT start [, INT len])
返回从起始位置到字符串结束的字节数组的子字符串或片段,或使用可选长度len。例如,substr(‘foobar’, 4)会返回’bar’
upper(STRING a)
返回将a的所有字符转换为大写字母后得到的字符串。例如,upper(‘fOoBaR’)会导致’fOoBaR’
Data Masking(数据屏蔽函数)
mask(STRING str [, STRING upper [, STRING lower [, STRING number]]])
返回一个隐藏的str版本(从Hive 2.1.0开始)。默认情况下,大写字母转换为“X”,小写字母转换为“X”,数字转换为“n”。例如,mask(“abcd-EFGH-8765-4321”)的结果是xx- xx- nnnn-nnnn。您可以通过提供额外的参数来覆盖掩码中使用的字符:第二个参数控制大写字母的掩码字符,第三个参数控制小写字母,第四个参数控制数字。例如,mask(“abcd – efgh – 8765 – 4321”,“U”、“l”、“#”)返回llll-UUUU – # # # # # # # #
mask_first_n(STRING str [, INT n])
返回一个掩蔽版本的str与前n个值掩蔽(如Hive 2.1.0)。将大写字母转换为“X”,将小写字母转换为“X”,将数字转换为“n”。例如,mask_first_n(“1234-5678-8765-4321”,4)的结果是nnnn-5678-8765-4321
mask_last_n(STRING str [, INT n])
返回一个隐藏的str版本,最后n个值被隐藏(从Hive 2.1.0开始)。将大写字母转换为“X”,将小写字母转换为“X”,将数字转换为“n”。例如,mask_last_n(“1234-5678-8765-4321”,4)的结果是1234-5678-8765-nnnn
mask_show_first_n(STRING str [, INT n])
返回一个掩码版本的str,显示前n个未掩码的字符(从Hive 2.1.0开始)。将大写字母转换为“X”,将小写字母转换为“X”,将数字转换为“n”。例如,mask_show_first_n(“1234-5678-8765-4321”,4)的结果是1234-nnnn-nnnn-nnnn
mask_show_last_n(STRING str [, INT n])
返回一个掩码版本的str,显示最后n个未掩码的字符(从Hive 2.1.0开始)。将大写字母转换为“X”,将小写字母转换为“X”,将数字转换为“n”。例如,mask_show_last_n(“1234-5678-8765-4321”,4)的结果是nnnn-nnnn-nnnn-4321
mask_hash(STRING|CHAR|VARCHAR str)
返回一个基于str的散列值(从Hive 2.1.0开始)。散列是一致的,可用于跨表连接带屏蔽的值。这个函数对于非字符串类型返回null
原创文章首发于 软件测试微课堂 公众号
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13739.html