5Hive函数
1.内置函数
1.创建表
create table t_student(id int,name string)
row format delimited
fields terminated by ','
stored as textfile;
2.上传数据
load data local inpath '/home/hdfs/data_student' into table t_student;
文件内容如下:
1,terry
2,kiven
3,larry
4,renee
3.函数测试
-
数学函数
*返回类型* *姓名(签名)* *描述* DOUBLE round(DOUBLE a) 返回的舍入 BIGINT
值a
。DOUBLE round(DOUBLE a, INT d) 返回 a
四舍五入到d
小数位。DOUBLE bround(DOUBLE a) 返回 a
使用HALF_EVEN舍入模式的舍入后的BIGINT值(从Hive 1.3.0,2.0.0开始)。也称为高斯舍入或银行家舍入。例如:bround(2.5)= 2,bround(3.5)= 4。DOUBLE bround(DOUBLE a, INT d) 使用HALF_EVEN舍入模式返回 a
舍入到d
小数位(从Hive 1.3.0,2.0.0开始)。例如:bround(8.25,1)= 8.2,bround(8.35,1)= 8.4。BIGINT floor(DOUBLE a) 返回 BIGINT
等于或小于的最大值a
。BIGINT ceil(DOUBLE a), ceiling(DOUBLE a) 返回等于或大于的最小BIGINT值 a
。DOUBLE rand(), rand(INT seed) 返回从0到1均匀分布的随机数(逐行变化)。指定种子将确保所生成的随机数序列具有确定性。 DOUBLE exp(DOUBLE a), exp(DECIMAL a) 返回这里是自然对数的底数。Hive 0.13.0中添加了十进制版本。 ea``e
DOUBLE ln(DOUBLE a), ln(DECIMAL a) 返回参数的自然对数 a
。Hive 0.13.0中添加了十进制版本。DOUBLE log10(DOUBLE a), log10(DECIMAL a) 返回参数的以10为底的对数 a
。Hive 0.13.0中添加了十进制版本。DOUBLE log2(DOUBLE a), log2(DECIMAL a) 返回参数的以2为底的对数 a
。Hive 0.13.0中添加了十进制版本。DOUBLE log(DOUBLE base, DOUBLE a)log(DECIMAL base, DECIMAL a) 返回 base
参数的底数对数a
。Hive 0.13.0中添加了十进制版本。DOUBLE pow(DOUBLE a, DOUBLE p), power(DOUBLE a, DOUBLE p) 返回 ap
DOUBLE sqrt(DOUBLE a), sqrt(DECIMAL a) 返回的平方根 a
。Hive 0.13.0中添加了十进制版本。STRING bin(BIGINT a) 以二进制格式返回数字(请参见http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_bin)。 STRING hex(BIGINT a) hex(STRING a) hex(BINARY a) 如果参数是 INT
orbinary
,hex
则以STRING
十六进制格式返回数字。否则,如果数字为aSTRING
,它将每个字符转换为十六进制表示形式并返回结果STRING
。(见http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex,BINARY
版本蜂巢0.12.0)。BINARY unhex(STRING a) 十六进制的倒数。将每对字符解释为十六进制数字,并转换为数字的字节表示形式。( BINARY
Hive 0.12.0以后的版本,用于返回字符串。)DOUBLE pi() 返回的值 pi
。DOUBLE abs(DOUBLE a) 返回绝对值。 INT or DOUBLE pmod(INT a, INT b), pmod(DOUBLE a, DOUBLE b) 返回的正值 a mod b
。DOUBLE sin(DOUBLE a), sin(DECIMAL a) 返回 a
(a
以弧度为单位)的正弦值。Hive 0.13.0中添加了十进制版本。DOUBLE asin(DOUBLE a), asin(DECIMAL a) 返回 a
-1 <= a <= 1的反正弦值,否则返回NULL 。Hive 0.13.0中添加了十进制版本。DOUBLE cos(DOUBLE a), cos(DECIMAL a) 返回 a
(a
以弧度为单位)的余弦值。Hive 0.13.0中添加了十进制版本。DOUBLE acos(DOUBLE a), acos(DECIMAL a) 返回 a
-1 <= a <= 1 的反余弦值,否则返回NULL 。Hive 0.13.0中添加了十进制版本。DOUBLE tan(DOUBLE a), tan(DECIMAL a) 返回 a
(a
以弧度为单位)的切线。Hive 0.13.0中添加了十进制版本。DOUBLE atan(DOUBLE a), atan(DECIMAL a) 返回的反正切值 a
。Hive 0.13.0中添加了十进制版本。DOUBLE degrees(DOUBLE a), degrees(DECIMAL a) 将的值 a
从弧度转换为度。Hive 0.13.0中添加了十进制版本。DOUBLE radians(DOUBLE a), radians(DOUBLE a) 将值 a
从度转换为弧度。Hive 0.13.0中添加了十进制版本。INT or DOUBLE positive(INT a), positive(DOUBLE a) 返回 a
。INT or DOUBLE negative(INT a), negative(DOUBLE a) 返回 -a
。DOUBLE or INT sign(DOUBLE a), sign(DECIMAL a) 返回符号 a
“ 1.0”(如果a
为正)或“ -1.0”(如果a
为负),否则返回“ 0.0”。十进制版本返回INT而不是DOUBLE。Hive 0.13.0中添加了十进制版本。DOUBLE e() 返回的值 e
。 -
集合函数
*返回类型* *姓名(签名)* *描述* int size(Map<K.V>) 返回Map类型中的元素数。 int size(Array) 返回数组类型中的元素数。 array map_keys(Map<K.V>) 返回包含输入映射键的无序数组。 array map_values(Map<K.V>) 返回包含输入映射值的无序数组。 boolean array_contains(Array, value) 如果数组包含值,则返回TRUE。 array sort_array(Array) 根据数组元素的自然顺序对输入数组进行升序排序并返回(从0.9.0版本开始)。 -
类型转换函数
返回类型 姓名(签名) 描述 binary binary(string|binary) 将参数转换为二进制。 Expected “=” to follow “type” cast(expr as ) 将表达式expr的结果转换为。例如,cast('1’as BIGINT)会将字符串’1’转换为其整数表示。如果转换不成功,则返回null。如果cast(expr为boolean),则Hive对于非空字符串返回true。 -
日期函数
*返回类型* *姓名(签名)* *描述* string from_unixtime(bigint unixtime[, string format]) 将unix纪元(1970-01-01 00:00:00 UTC)的秒数转换为一个字符串,该字符串表示当前系统时区中该时刻的时间戳,格式为“ 1970-01-01 00:00: 00”。 bigint unix_timestamp() 以秒为单位获取当前的Unix时间戳。此函数不是确定性的,其值在查询执行范围内也不是固定的,因此会阻止对查询的适当优化-自2.0版以来已弃用此函数,而推荐使用CURRENT_TIMESTAMP常量。 bigint unix_timestamp(string date) yyyy-MM-dd HH:mm:ss
使用默认时区和默认语言环境将时间字符串格式转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp(‘2009-03-20 11:30:01’)= 1237573801bigint unix_timestamp(string date, string pattern) 将具有给定模式的时间字符串(请参阅[ http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html])转换为Unix时间戳(以秒为单位),如果失败,则返回0:unix_timestamp(‘2009 -03-20’,‘yyyy-MM-dd’)= 1237532400。 pre 2.1.0: string2.1.0 on: date to_date(string timestamp) 返回时间戳字符串(Hive 2.1.0之前)的日期部分:to_date(“ 1970-01-01 00:00:00”)=“ 1970-01-01”。从Hive 2.1.0开始,返回日期对象。在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。 int year(string date) 返回日期或时间戳字符串的年份部分:year(“ 1970-01-01 00:00:00”)= 1970,year(“ 1970-01-01”)= 1970。 int quarter(date/timestamp/string) 返回日期,时间戳或范围在1到4之间的字符串的一年的四分之一(从Hive 1.3.0开始)。示例:quarter(‘2015-04-08’)= 2。 int month(string date) 返回日期或时间戳字符串的月份部分:month(“ 1970-11-01 00:00:00”)= 11,month(“ 1970-11-01”)= 11。 int day(string date) dayofmonth(date) 返回日期或时间戳字符串的日期部分:day(“ 1970-11-01 00:00:00”)= 1,day(“ 1970-11-01”)= 1。 int hour(string date) 返回时间戳的小时:hour(‘2009-07-30 12:58:59’)= 12,hour(‘12:58:59’)= 12。 int minute(string date) 返回时间戳的分钟。 int second(string date) 返回时间戳的秒数。 int weekofyear(string date) 返回时间戳字符串的星期数:weekofyear(“ 1970-11-01 00:00:00”)= 44,weekofyear(“ 1970-11-01”)= 44。 int extract(field FROM source) 从源中检索字段,例如天或小时(从Hive 2.2.0开始)。源必须是日期,时间戳,时间间隔或可以转换为日期或时间戳的字符串。支持的字段包括:日,星期几,小时,分钟,月,季度,秒,周和年。例子:选择摘录(“ 2016-10-20”中的月份)得出10。选择提取(从“ 2016-10-20 05:06:07”开始的小时数),结果为5。选择摘录(dayofweek,来自“ 2016-10-20 05:06:07”),结果为5。选择摘录(从“ 1-3”年到月的月份中的月份)结果为3。选择摘录(从间隔“ 3 12:20:30”天到第二分钟)到20。 int datediff(string enddate, string startdate) 返回从开始日期到结束日期的天数:datediff(‘2009-03-01’,‘2009-02-27’)= 2。 pre 2.1.0: string2.1.0 on: date date_add(date/timestamp/string startdate, tinyint/smallint/int days) 添加开始日期的天数:date_add(‘2008-12-31’,1)=‘2009-01-01’。在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。 pre 2.1.0: string2.1.0 on: date date_sub(date/timestamp/string startdate, tinyint/smallint/int days) 减去开始日期的天数:date_sub(‘2008-12-31’,1)=‘2008-12-30’。在Hive 2.1.0(HIVE-13248)之前,返回类型为String,因为创建方法时不存在Date类型。 timestamp from_utc_timestamp({any primitive type} ts, string timezone) 将UTC中的timestamp 转换为给定的时区(从Hive 0.8.0开始)。 时间戳是一种原始类型,包括时间戳/日期,tinyint / smallint / int / bigint,float / double和十进制。 小数部分被视为秒。整数值以毫秒为单位。例如,from_utc_timestamp (2592000.0,‘PST’),from_utc_timestamp (2592000000,‘PST’)和from_utc_timestamp (timestamp’1970-01-30 16:00:00’,‘PST’)都返回时间戳1970-01-30 08:00:00。 timestamp to_utc_timestamp({any primitive type} ts, string timezone) 将给定时区中的时间戳转换为UTC(从Hive 0.8.0开始)。 时间戳是一种原始类型,包括时间戳/日期,tinyint / smallint / int / bigint,float / double和十进制。 小数部分被视为秒。整数值以毫秒为单位。例如,to_utc_timestamp(2592000.0,‘PST’),to_utc_timestamp(2592000000,‘PST’)和to_utc_timestamp(timestamp’1970-01-30 16:00:00’,‘PST’)都返回时间戳1970-01-31 00:00:00。 date current_date 返回查询评估开始时的当前日期(从Hive 1.2.0开始)。同一查询中对current_date的所有调用均返回相同的值。 timestamp current_timestamp 返回查询评估开始时的当前时间戳(从Hive 1.2.0开始)。同一查询中对current_timestamp的所有调用均返回相同的值。 string add_months(string start_date, int num_months, output_date_format) 返回起始日期之后num_months的日期(从Hive 1.1.0开始)。start_date是字符串,日期或时间戳。num_months是一个整数。如果start_date是该月的最后一天,或者如果结果月份的天数少于start_date的天部分,则结果是结果月份的最后一天。否则,结果与start_date具有相同的日组成部分。默认输出格式为“ yyyy-MM-dd”。在Hive 4.0.0之前,日期的时间部分将被忽略。从Hive 4.0.0开始,add_months支持可选参数output_date_format,该参数接受一个String,该String表示输出的有效日期格式。这样可以在输出中保留时间格式。例如 :add_months(‘2009-08-31’,1)返回’2009-09-30’。 add_months(‘2017-12-31 14:15:16’,2,‘YYYY-MM-dd HH:mm:ss’)返回’2018-02-28 14:15:16’。 string last_day(string date) 返回日期所属月份的最后一天(从Hive 1.1.0开始)。date是格式为“ yyyy-MM-dd HH:mm:ss”或“ yyyy-MM-dd”的字符串。日期的时间部分将被忽略。 string 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(‘2015-01-14’,‘TU’)= 2015-01-20。 string trunc(string date, string format) 返回截断为格式指定单位的日期(从Hive 1.2.0开始)。支持的格式:MONTH / MON / MM,YEAR / YYYY / YY。示例:trunc(‘2015-03-17’,‘MM’)= 2015-03-01。 double months_between(date1, 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”。结果四舍五入到小数点后8位。例如:months_between(‘1997-02-28 10:30:00’,‘1996-10-30’)= 3.94959677 string date_format(date/timestamp/string ts, string fmt) 将日期/时间戳记/字符串转换为日期格式fmt指定的格式的字符串值(从Hive 1.2.0开始)。支持的格式是Java SimpleDateFormat格式– https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 。第二个参数fmt应该是常量。示例:date_format(‘2015-04-08’,‘y’)=‘2015’。 date_format可用于实现其他UDF,例如:dayname(date)是date_format(date,‘EEEE’)dayofyear(date)是date_format(date,‘D’) -
条件函数
*返回类型* *姓名(签名)* *描述* 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,则返回默认值,否则返回值(从HIve 0.11开始)。 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 当a = true时,返回b; 当c = true时,返回d; 否则返回e。 T nullif( a, b ) 如果a = b,则返回NULL。否则返回a (从Hive 2.3.0开始)。简写:CASE,当a = b时为NULL,否则为a void assert_true(boolean condition) 如果’condition’不为true,则引发异常,否则返回null(从Hive 0.8.0开始)。例如,选择assert_true(2 <1)。 -
字符函数
*返回类型* *姓名(签名)* *描述* int ascii(string str) 返回str的第一个字符的数值。 string base64(binary bin) 将参数从二进制转换为基本64字符串(从Hive 0.12.0开始)。 int character_length(string str) 返回str中包含的UTF-8字符数(从Hive 2.2.0开始)。函数char_length是该函数的简写。 string chr(bigint|double A) 返回具有与A等效的二进制值的ASCII字符(从Hive 1.3.0和2.1.0开始)。如果A大于256,则结果等于chr(A%256)。示例:选择chr(88); 返回“ X”。 string concat(string|binary A, string|binary B…) 返回按顺序串联作为参数传入的字符串或字节所得到的字符串或字节。例如,concat(‘foo’,‘bar’)的结果为’foobar’。请注意,此函数可以接受任意数量的输入字符串。 string decode(binary bin, string charset) 使用提供的字符集(“ US-ASCII”,“ ISO-8859-1”,“ UTF-8”,“ UTF-16BE”,“ UTF-16LE”,“ UTF- 16’)。如果任一参数为null,则结果也将为null。(从Hive 0.12.0开始。) binary encode(string src, string charset) 使用提供的字符集(“ US-ASCII”,“ ISO-8859-1”,“ UTF-8”,“ UTF-16BE”,“ UTF-16LE”,“ UTF- 16’)。如果任一参数为null,则结果也将为null。(从Hive 0.12.0开始。) int find_in_set(string str, string strList) 返回str在strList中的第一次出现,其中strList是一个逗号分隔的字符串。如果任一参数为null,则返回null。如果第一个参数包含逗号,则返回0。例如,find_in_set(‘ab’,‘abc,b,ab,c,def’)返回3。 string format_number(number x, int d) 将数字X格式化为’#,###,###。##'之类的格式,四舍五入到D小数位,然后将结果作为字符串返回。如果D为0,则结果没有小数点或小数部分。(由于蜂房的0.10.0 ;臭虫以固定在浮子类型蜂房0.14.0,在加入十进制型支撑蜂巢0.14.0) string get_json_object(string json_string, string path) 根据指定的json路径从json字符串中提取json对象,并返回提取的json对象的json字符串。如果输入的json字符串无效,它将返回null。**注意:json路径只能包含字符[0-9a-z_],即不能包含大写或特殊字符。另外,键*不能以数字开头。***这是由于对Hive列名的限制。 boolean in_file(string str, string filename) 如果字符串str在文件名中显示为整行,则返回true。 int instr(string str, string substr) 返回 substr
in 中第一次出现的位置str
。返回null
的如果任一参数是null
返回0
,如果substr
不能在找到str
。请注意,这不是基于零的。中的第一个字符的str
索引为1。int length(string A) 返回字符串的长度。 int locate(string substr, string str[, int pos]) 返回在位置pos之后的str中第一次出现substr的位置。 string lower(string A) lcase(string A) 返回将B的所有字符都转换为小写形式的字符串。例如,lower(‘fOoBaR’)会导致’foobar’。 string lpad(string str, int len, string pad) 返回str,在其左边填充pad,长度为len。如果str大于len,则返回值缩短为len个字符。如果填充字符串为空,则返回值为null。 string ltrim(string A) 返回从A的开头(左侧)起修剪空格所得的字符串。例如,ltrim(‘foobar’)的结果为’foobar’。 string printf(String format, Obj… args) 返回根据do printf样式格式字符串格式化的输入(从Hive 0.9.0开始)。 string quote(String text) 返回带引号的字符串(包括任何单引号HIVE-4.0.0的转义字符)输入项输出量空值空值谁的’谁的’别’别’ string repeat(string str, int n) 重复str n次。 string replace(string A, string OLD, string NEW) 返回字符串A,其中所有不重叠的OLD都替换为NEW(从Hive 1.3.0和2.1.0开始)。示例:选择replace(“ ababab”,“ abab”,“ Z”); 返回“ Zab”。 string reverse(string A) 返回反转的字符串。 string rpad(string str, int len, string pad) 返回str,右用pad填充到len的长度。如果str大于len,则返回值缩短为len个字符。如果填充字符串为空,则返回值为null。 string rtrim(string A) 返回从A的结尾(右侧)修剪空格所得到的字符串。例如,rtrim(‘foobar’)结果为’foobar’。 string space(int n) 返回n个空格的字符串。 array split(string str, string pat) 在pat周围拆分str(pat是一个正则表达式)。 map<string,string> str_to_map(text[, delimiter1, delimiter2]) 使用两个定界符将文本拆分为键/值对。Delimiter1将文本分成KV对,Delimiter2将每个KV对分开。默认的定界符是’,‘代表定界符1,’:'代表定界符2。 string substr(string|binary A, int start) substring(string|binary A, int start) 返回A的字节数组的子字符串或切片,从字符串的起始位置开始到字符串A的结尾。例如,substr(‘foobar’,4)的结果为’bar’(请参见[ http://dev.mysql.com /doc/refman/5.0/zh-CN/string-functions.html#function_substr ])。 string substr(string|binary A, int start, int len) substring(string|binary A, int start, int len) 从长度为len的起始位置返回A的字节数组的子字符串或切片。例如,substr(‘foobar’,4,1)的结果为’b’(请参阅[ http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr ])。 string trim(string A) 返回由A两端的空格修剪产生的字符串。例如,trim(‘foobar’)结果为’foobar’ binary unbase64(string str) 将参数从基数为64的字符串转换为BINARY。(从Hive 0.12.0开始。) string upper(string A) ucase(string A) 返回将A的所有字符都转换为大写形式的字符串。例如,upper(‘fOoBaR’)的结果为’FOOBAR’。 string initcap(string A) 返回字符串,每个单词的首字母大写,所有其他字母小写。单词由空格分隔。(从Hive 1.1.0开始。) -
聚合函数
*返回类型* *姓名(签名)* *描述* BIGINT count(*), count(expr), count(DISTINCT expr[, expr…]) count(*)-返回检索到的行总数,包括包含NULL值的行。count(expr)-返回为其提供的表达式为非NULL的行数。count(DISTINCT expr [,expr])-返回为其提供的表达式唯一且非NULL的行数。可以使用hive.optimize.distinct.rewrite优化执行。 DOUBLE sum(col), sum(DISTINCT col) 返回组中元素的总和或组中列的不同值的总和。 DOUBLE avg(col), avg(DISTINCT col) 返回组中元素的平均值或组中列的不同值的平均值。 DOUBLE min(col) 返回组中列的最小值。 DOUBLE max(col) 返回组中列的最大值。 DOUBLE variance(col), var_pop(col) 返回组中数字列的方差。 DOUBLE var_samp(col) 返回组中数字列的无偏样本方差。 DOUBLE stddev_pop(col) 返回组中数字列的标准偏差。 DOUBLE stddev_samp(col) 返回组中数字列的无偏样本标准差。 DOUBLE covar_pop(col1, col2) 返回组中一对数字列的总体协方差。 DOUBLE covar_samp(col1, col2) 返回组中一对数字列的样本协方差。 DOUBLE corr(col1, col2) 返回组中一对数字列的皮尔逊相关系数。 array collect_set(col) 返回消除了重复元素的一组对象。 array collect_list(col) 返回具有重复项的对象列表。(从Hive 0.13.0开始。) INTEGER ntile(INTEGER x) 将有序分区划分为 x
多个桶,并为分区中的每一行分配一个桶号。这样可以轻松计算三分位数,四分位数,十分位数,百分位数和其他常见的汇总统计信息。(从Hive 0.11.0开始。) -
表生成函数
普通的用户定义函数(例如concat())接受单个输入行并输出单个输出行。相反,表生成函数将单个输入行转换为多个输出行。
*行集列类型* *姓名(签名)* *描述* T explode(ARRAY a) 将数组分解为多行。返回带有单列(col)的行集,该数组代表数组中每个元素的一行。 Tkey,Tvalue explode(MAP<Tkey,Tvalue> m) 将地图分解为多行。返回一个行集合与两列(键,值),一个行从输入图中的每个键-值对。(从Hive 0.8.0开始。)。 int,T posexplode(ARRAY a) 使用附加的int类型位置列将数组分解为多行(原始数组中项的位置,从0开始)。返回具有两列(pos,val)的行集,该数组中的每个元素一行。 T1,…,Tn inline(ARRAY<STRUCTf1:T1,...,fn:Tn> a) 将结构数组分解为多行。返回具有N列的行集(N =结构中顶级元素的数量),数组中每个结构一行一行。(从Hive0.10开始。) T1,…,Tn/r stack(int r,T1 V1,…,Tn/r Vn) 将n个值V 1,…,V n分解为r行。每行将有n / r列。r必须是常数。 string1,…,stringn json_tuple(string jsonStr,string k1,…,string kn) 接收JSON字符串和一组n个键,并返回n个值的元组。这是 get_json_object
UDF的一种更有效的版本,因为它只需一次调用就可以获取多个密钥。string 1,…,stringn parse_url_tuple(string urlStr,string p1,…,string pn) 接受URL字符串和一组n个URL部分,并返回n个值的元组。这类似于 parse_url()
UDF,但可以一次从URL中提取多个部分。有效的部件名称是:主机,路径,查询,参考,协议,授权,文件,用户信息,查询:<密钥>。
#取随机数rand()
select rand() from t_student;
#求a的阶乘
factorial(INT a)
select factorial(10) from t_student;
#求最大值 max()
greatest(T v1, T v2, ...)
select greatest(10,123,53,34,1,23,502,120) from t_student;
#求最小值
least(T v1, T v2, ...)
select least(10,123,53,34,1,23,502,120) from t_student;
#数学常量e
select e() from t_student;
#数学常量pi
select pi() from t_student;
#返回当前时间
select current_date from t_student;
#如果列中有null值,则返回默认值
NULL
nvl(T value, T default_value)
select id,nvl(name, '无名氏') from t_student;
#对于值的不同判断,取不同的值
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
如果a=b就返回c,a=d就返回e,否则返回f
如CASE 4 WHEN 5 THEN 5 WHEN 4 THEN 4 ELSE 3 END 将返回4
select id,name,CASE id WHEN 3 THEN '老板' ELSE '员工' END,name from t_student;
#判断某个文件中是否包含某个字符串
in_file(string str, string filename)
select in_file('2,vivo,4000.0','/home/hdfs/phone_data') from t_student;
#通过某个符号切割字符串
split(string str, string pat)
select split('hello,world,briup', ',') from t_student;
#截取字符串
substr(string|binary A, int start, int len)
select substr('ceo-larry', 0, 3) from t_student;
#在某字符串中查找某个子串第一次出现的位置,位置从1开始 indexof
instr(string str, string substr)
select instr('ceo-larry', 'la') from t_student;
#将第一个字符串中的,符合第二个字符串的部分,替换成第三个字符串
translate(string|char|varchar input, string|char|varchar from, string|char|varchar to)
select translate('hello briup', 'briup', 'imut') from t_student;
#比较两个字符串,不同的字符个数
levenshtein(string A, string B)
select levenshtein('testptest', 'briup') from t_student;
#把array中的字符用某个符号拼接起来
stream.collect(Collector.join)
concat_ws(string SEP, array<string>)
select concat_ws('#', split('hello,world,briup', ',')) from t_student;
#先按照班级Id排列,每个班级再按照成绩排序,并给出排名
create table students(id int,name string,score double,classId id)
row format delimited
fields terminated by ','
stored as textfile;
load data local inpath '/Users/angelia/hive/students.txt' into table students;
#窗口函数 row_number() over (partition by 列 order by 列 desc/asc)
select
classId,
name,
score,
row_number() over (partition by classId order by score desc) as rn
from students;