HiveQL 开发语法知识

一、数据类型

hive 的数据类型有原始数据类型和复杂类型,原始类型包括 TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CHAR,VARCHAR,DATE。复杂类型包括 ARRAY,MAP,STRUCT,UNION,这些复杂类型是由基础类型组成的。

二、基础运算

聚合函数 Hive 支持 count(),max(),min(),avg()等常用的聚合函数。 关系函数 =, !=, <>, < , >, <= , >, >= 空值判断:is null, is not null. 数学运算:支持所有的数值类型: + , - , * , /, % ,& , | , ^, ~等。 逻辑运算:逻辑与:and;逻辑或:or;逻辑非:not。

三、字符串函数

1、字符串长度函数: length()

length(string a): 返回字符串 a 的长度 。

2、字符串反转函数:reverse

reverse(string a) :返回字符串 a 的反转结果

3、字符串连接函数

(1)不带分隔符的字符串连接函数

concat() 语法:concat(string A, string B,........):返回输入字符串连接后的结果,支持任意个输入字符串 concat(string|binary A, string|binary B…) 将传入的字符串 A,B 合并为新的字符串,concat(‘foo’, ‘bar’)结果为’foobar’

(2)带分隔符字符串连接函数

concat_ws() concat_ws(String SEP, string a, string b):返回输入字符串连接后的结果,sep 表示各个字符串之间的分隔符。 concat_ws(string SEP, string A, string B…)或 concat_ws(string SEP, array) 与 concat 作用类似,但是支持自定义的分隔符 SEP

4、字符串截取函数

(1)substr(string a, int start, int len) 返回字符串 a 从 start 位置开始,长度为 len 的字符串。

(2)substring(string a, int start, int len) 返回字符串 a 从 start 位置开始,长度为 len 的字符串。

5、字符串分割函数:split

功能:split(string str, string pat)

用法:按照正则表达式 pat 拆分字符串 str。例如:split(‘a,b,c,d’,’,’)返回[“a”,“b”,“c”,“d”]

6、字符串查找函数

功能:instr(string str, string substr)

用法:返回 str 中第一个 substr 的位置。如果其中 str 为 null,则返回 null;如果在 str 中找不到 substr,则返回 0 。

7、ascii

用法:ascii(string str)。

功能:返回字符串的第一个字符的 ascii 数字。

8、base64

用法:base64(binary bin)。

功能:将二进制格式转成 base64 位的字符串,返回值是字符串。

9、character_length

用法:character_length(string str)。

功能:返回 str 中包含的 UTF-8 字符数,返回值为 int。

10、chr

用法:chr(bigint 或 double num)。

功能:返回指定数字对应的 ASCII 字符,如果指定的数字大于 256,将对该数字对 256 取模。

11、decode

用法:decode(binary bin, string charset)

功能:使用 charset 方式,将二进制 bin 解码为字符串。支持的字符集有:‘US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’ 。

12、encode

用法:encode(str1,str2)

功能:将 str1 用 str2 设置的编码格式进行编码。

13、sentences

用法:sentences(string str, string lang, string locale)

功能:将 str 拆分成句子数组,其中每个句子都是一个单词数组。‘lang’和’locale’参数是可选的,如果省略,则使用默认语言环境。

14、ngrams

用法:ngrams(array> arr,int n,int k)。

功能:按 n 个单词出现频次,倒序取 top k。

15、context_ngrams

用法:context_ngrams(array, array, int K, int pf)

功能:从一组标记化的句子中返回前 k 个文本。例如 select context_ngrams(sentences(‘hello word!hello hive,hi hive,hello hive’),array(‘hello’,null),4) from A,会返回[{“ngram”:[“hive”],“estfrequency”:7141046.0},{“ngram”:[“word”],“estfrequency”:3570523.0}],即最经常在"hello"后出现的单词,并统计其频次,有统计聚合作用。

16、elt

用法:elt(N int,str1 string,str2 string,str3 string,…)

功能:返回给定字符串集中的第 N 个,若不存在则返回 null。例如 elt(2,‘hello’,‘world’) 返回’world’ 。

17、field

用法:field(val T,val1 T,val2 T,val3 T,…)

功能:返回 val 在 val1,val2…的位置。若不存在则返回 0。例如 field(‘world’,‘say’,‘hello’,‘world’),返回值为 3 。

18、soundex

用法:soundex(string A)

功能:返回字符串的 soundex 代码。例如:soundex(‘Miller’)返回 M460

19、find_in_set

用法:find_in_set(string str, string strList)

功能:返回 str 在 strList 中的位置。若不存在或 str 中存在",",则返回 0;若 str 为 null,则返回 null。

20、format_number

用法:format_number(number x, int d)

功能:将数字精确到 d 位小数,例如 format_number(5.123456, 4),返回值为 5.1234。

21、in_file

用法:in_file(string str, string filename)

功能:如果 str 以整行的方式出现在 filename 中,则返回 True。必须存在 filename 文件,否则会报错 。

22、locate

用法:locate(string substr, string str, int pos)

功能:返回 substr 在 str 的 pos 位置后,第一次出现的位置,pos 非必传。例如 locate(‘a’, ‘abcabc’),返回 1;locate(‘a’, ‘abcabc’,1),返回 1;locate(‘a’, ‘abcabc’,2),返回 4。

23、lpad

用法:lpad(string str, int len, string pad)

功能:将 str 截取长度 len 位,若 str 长度不足 len 则,左侧用 pad 补充。例如 lpad(‘abcdef’, 5, ‘a’)返回’abcde’;lpad(‘abc’, 5, ‘a’)返回’aaabc’。

24、rpad

用法:rpad(string str, int len, string pad)

功能:与 lpad 对应,将 str 截取长度 len 位,若 str 长度不足 len 则,右用 pad 补充。例如 rpad(‘abcdef’, 5, ‘a’)返回’abcde’;rpad(‘abc’, 5, ‘a’)返回’abcaa’。

25、ltrim

用法:ltrim(string A)

功能:删除字符串 A 左边的空格

26、trim

用法:trim(string A)

功能:返回出现在字符串 A 两端的空格。例如 trim(’ foo bar ‘),返回’foo bar’。

27、rtrim

用法:rtrim(string A)

功能:与 ltrim 对应,删除字符串 A 右边的空格。

28、octet_length

用法:octet_length(string str)

功能:返回以 UTF-8 编码保存字符串 str 所需的八位字节数。

29、parse_url

用法:parse_url(string urlString, string partToExtract [, string keyToExtract])

功能:解析 url,并返回需要抽取的部分,(可能抽取的部分 partToExtract 为 HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE)。 例如:parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1’, ‘HOST’) 返回 ‘facebook.com’

30、printf

用法:printf(String format, Obj… args)

功能:按照指定的 format 进行输出。例如 printf(“Hello World %d %s”, 100, “days”),返回值为"Hello World 100 days”

31、repeat

用法:repeat(string str, int n)

功能:将字符串 str 重复 n 次。

32、replace

用法:replace(string A, string OLD, string NEW) 。

功能:将字符串 str 中的 OLD 子串替换为 NEW 。

33、reverse

用法:reverse(string A)

功能:对字符串 A 进行翻转

34、space

用法:space(int n)

功能:返回 n 个空格的字符串

35、split

用法:split(string str, string pat)

功能:按照正则表达式 pat 拆分字符串 str。例如:split(‘a,b,c,d’,’,’)返回[“a”,“b”,“c”,“d”]

36、str_to_map

用法:str_to_map(text, delimiter1, delimiter2)

功能:将 text 分割为数个键值对。其中 delimiter1 和 delimiter2 为可选参数。delimiter1(默认为’:’)代表键 k 与值 v 的分隔符。delimiter2(默认为’,’)代表键值对 k-v 之间的分隔符。例如 str_to_map({“column1:1,column2:2”)返回值为{“column1”:“1”,“column2”:“2”}

37、sustring_index

用法:substring_index(string A, string delim, int count)

功能:delim 为分隔符,返回 delim 将 A 分割后的前 count 部分。若 count 为负,则返回分割的最后一部分。例如:substring_index(‘www.apache.org’, ‘.’, 2) 返回 ‘www.apache’。

38、translate

用法:translate(string|char|varchar input, string|char|varchar from, string|char|varchar to)

功能:将 input 字符串中出现在 from 中的每个字符替换为 to 中的相应字符以后的字符串。 若 from 比 to 字符串长,那么在 from 中比 to 中多出的字符将会被删除。与 PostgreSQL 中对应函数等价。例如 translate(‘abcdefga’,‘abc’,‘wo’)返回’wodefgw’。

39、unbase64

用法:unbase64(string str)

功能:将 64 位的字符串转换二进制值

40、initcap

用法:initcap(string A)

功能:返回字符串,每个单词的第一个字母为大写,所有其他字母为小写。单词由空格分隔。

41、levenshtein

用法:levenshtein(string A, string B)

功能:返回两个字符串之间的 Levenshtein 距离。例如 levenshtein(‘kitten’, ‘sitting’)返回值为 3。 (Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符)

四、数学函数

1、round()

用法:round(double a)。

功能:返回值 bigint,返回 double 类型的整数值部分(遵循四舍五入)。

用法:round(double a, int d)。 功能:返回值 double,返回指定指定精度 d 的 double 类型。

2、floor()

用法:floor(double a ),向下取整函数。

功能:返回等于或者小于该 double 变量的最小的整数。

3、ceil()

用法:ceil(double a),向上取整函数。

功能:返回等于或者大于该 double 变量的最小的整数。同 ceiling。

4、rand()

用法:取随机函数,rand(int seed)。

功能:返回一个 0 到 1 范围内的随机数。

5、exp()

用法:自然指数函数,exp(double a)。

功能:返回自然对数 e 的 a 次方。

6、pow()

用法:幂运算函数,pow(double a, double p)。同 power()。

功能:返回 a 的 p 次幂。

7、sqrt()

用法:开平方函数,sqrt(double a)。

功能:返回 a 的平方根。

8、abs()

用法:绝对值函数,abs(x)。

功能:返回 x 绝对值。

9、acos()

用法:反余弦值,acos(X),X 是数值型字符。

功能:如果-1<=X<=1,返回 X 的反余弦值。否则返回 NaN。

10、asin()

用法:反余弦值,asin(X),X 是数值型字符。

功能:如果-1<=X<=1,返回 X 的反正弦值。否则返回 NaN。

11、atan()

用法:反正切值,atan(X),X 是数值型字符。

功能:返回 X 的反正切值。

12、bin()

用法:bin(X),X 是整型。

功能:返回 X 的二进制表示。

13、ceiling()

用法:ceiling(X),X 是数值型字符。

功能:向上取整,返回大于或等于 X 最小整数。

14、conv()

用法:conv(X,from,to),X 是整型,from、to 也是整型。

功能:进制转换函数,将 X 从 from 进制转换成 to 进制。

15、cbrt()

用法:cbrt(DOUBLE a)。

功能:返回类型 DOUBLE,返回 a 的立方根。

16、degrees()

用法:degrees(double/decimal a)。

功能:将弧度 a 转化为角度。

17、radians()

用法:radians(double/decimal a)

功能:将角度 a 转化为弧度。

18、factorial()

用法:factorial(INT a)。

功能:返回类型是 BIGINT,返回 a 的阶乘(n!=1×2×3×...×(n-1)×n) 19、greatest() 语法:greatest(T v1, T v2, …)。 功能:返回 N 个数的最大值。

20、hex()

用法:hex(X),X 可以是整型,也可以是 string 型。

功能:返回 X 的十六进制表示。

21、least()

用法:least(T v1, T v2, …)。

功能:返回 N 个数的最小值。

22、ln()

用法: ln(double a)。

功能: double 说明: 返回 a 的自然对数。

23、bround()

用法:bround(double a)。

功能:银行家舍入法,四舍六入五成双。返回数字 a 高斯舍入后的值高斯舍入也称银行家舍入。简单的说就是四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一。 银行家舍入法(1~4:舍,6~9:进,5->前位数是偶:舍,5->前位数是奇:进) bround(DOUBLE a)

24、log2()

用法:log2(X),X 是数值型字符。

功能:返回以 2 为底的 X 的对数。

25、log10()

用法:log10(X),X 是数值型字符。

功能:返回以 10 为底的 X 的对数。

26、log()

用法:log(X,Y),X、Y 是数值型字符。

功能:返回以 X 为底的 Y 的对数。

27、negative()

用法:negative(X),X 是数值型字符。

功能:返回 X 的相反数。

28、pi()

用法法: pi(),数学常数 π。

功能:返回值是 double 类型。

29、pmod()

用法:pmod(X,Y),X,Y 是数值型字符。

功能:返回 X 除以 Y 的余数。

30、positive()

用法:positive(X),X 是任意字符。

功能:返回 X 本身。

31、rand()

用法:rand(X),X 是整型。

功能:返回 0 到 1 之间的随机数。

32、round()

用法:round(X,Y),X 是数值型字符,Y 是整型。

功能:对 X 进行四舍五入,Y 是要保留的小数位数,Y 如果省略则表示对 X 进行四舍五入取整。

33、shiftleft()

用法:shiftleft(BIGINT a, INT b)。

功能:返回类型:INT or BIGINT,按位左移。

34、shiftright()

用法:shiftright(BIGINT a, INT b)。

功能:返回类型 INT or BIGINT,按位右移。

35、shiftrightunsigned()

用法:shiftrightunsigned(BIGINT a, INT b)。

功能:返回类型 DOUBLE,按位无符号右移。

36、sign()

用法:SIGN(number)。

功能:SIGN 函数用于返回数字的符号。当数字大于 0 时返回 1,等于 0 时返回 0,小于 0 时返回 -1。

37、sin()

用法:sin(X),X 是数值型字符。

功能:返回 X 的正弦值,X 是弧度制。

38、cos()

用法:cos(X),X 是数值型字符。

功能:返回 X 的余弦值,X 是弧度制。

39、tan()

用法:tan(X),X 是数值型字符。

功能:返回 X 的正切值,X 是弧度制。

40、unhex()

用法:unhex(X),X 是 string 型。

功能:X 代表十六进制的字串,返回此十六进制的二进制表示。

41、width_bucket()

用法:width_bucket(NUMERIC expr, NUMERIC min_value, NUMERIC max_value, INT num_buckets)。

功能:分桶值,按 min_value/max_value 创建 num_buckets+1 个相同大小的桶,返回当前值所在的桶编号。

五、条件判断函数

1、if 函数

if(boolean testCondition,T valueTrue, T valueFalseOrNull) 当条件 testCondition 为 True 时候,返回 valueTrue,否则返回 valueFalseOrNull

2、非空查找函数

coalesce coalesce(T v1, T v2,.....),返回参数中第一个非空值,如果所有值都为 null,那么返回 Null。

3、条件判断函数

case when case when 写法一: case sex when ‘1’ then ‘男’ when ‘2’ then ‘女’ else ‘其他’ end

case when 写法二: case when sex = ‘1’ then ‘男’ when sex = ‘2’ then ‘女’ else ‘其他’ end

4、nvl(a,b)

判空函数,若 a 为空,则返回 b,否则为 a

5、nullif(a,b)

若 a=b 时,返回 null,否则为 a

6、isnotnull

isnull 判断输入参数是否不为空,不为空返回 ture;反之,返回 false

7、isnull

isnull 判断输入参数是否为空,为空返回 ture;反之,返回 false

8、assert_true

assert_true(BOOLEAN condition) 如果 condition 不为 true,则抛出异常,否则返回 null。

六、正则表达式及解析函数

1、regexp_replace(str, regexp, rep)

将字符串 str 中符合正则表达式 regexp 的部分替换成字符串 rep.

样例:select regexp_replace(‘fooball’, ‘oo|al’ , ‘’) from table_Name; regexp_extract(string subject, string pattern, int index) 返回字符串 subject 与正则表达式 pattern 匹配后的 index 部分。

例如 regexp_extract(‘100-300’, ‘(d+)-(d+)’, 2) 的返回值为 300

2、regexp_extract(str, regexp[, idx])

将字符串 str 按照正则表达式 regexp 的规则拆分,返回 idx 指定位置的字符。

样例:select regexp_extract(‘foothebar’, ‘foo(.*?(bar)’, 1) from tableName; regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT) 将字符串 subject 与正则表达式 pattern 匹配上部分用 REPLACEMENT 进行替换并返回。

例如 regexp_replace(‘100-200’, ‘(d+)’, ‘num’)返回值为‘num-num’

3、parse_url。

url 解析函数,返回 url 中指定的部分。

样例:parse_url(string urlString, string partToExtract [, string keyToExtract] )

4、get_json_object()。

json 解析,get_json_object(string json_string, string path) 样例:select get_json_object(‘{......}’, ‘$.owner’) from tableName;

5、rlike /regexp

(A)str rlike (B),能否用 B 去正则匹配 A 的内容。

6、like

(A)str like (B)pattern,能否用 B 去完全匹配 A 的内容。 7、regexp 功能语法同 rlike 一样,只是名字不同。

七、日期函数

1.unix_timestamp()。

用法:unix_timestamp(); 返回值:bigint ,获得当前时区的 unix 时间戳

2、unix_timestamp(String date)

用法:unix_timestamp(String date)

功能:将格式为”yyyy-MM-dd HH:ss”的日期转换到 unix 时间戳,返回 bigint 如果转换失败,则返回 0.

3、unix_timestamp(string date, string pattern)

用法:unix_timestamp(string date, string pattern)

功能:转换 pattern 格式日期到 unix 时间戳。如果转化失败,则返回 0. 样例:select unix_timestamp(‘2021-03-08 14:21:11’,’yyyy-MM-dd HH:mm:ss’) from table

4、from_unixtime

用法:from_unixtime(bigint unixtime,string pattern)

功能:unix 时间戳转日期函数,返回值 string,把具体的秒转化为时间日期。

5、current_timestamp

用法:current_timestamp()

功能:获取当前的时间精确到毫秒,样例:select current_timestamp() -- 2011-09-02 10:11:09.234212000

6、to_date

用法:to_date(string timestamp)

功能:日期时间转日期函数,年月日时分秒只取其中的年月日部分。

7、日期转年/月/日/小时/分钟/秒/周函数

(1)日期转年函数 year()

用法:year(String date)

功能:返回值为 int,返回日期中的年。样例:select year(‘2021-03-21 10:11:02’) from table

(2)日期转月函数 month(STRING date)

用法:unix 时间戳转日期函数

功能:返回日期中的月

(3)日期转天函数 day(STRING date)

用法:返回日期中的天。

功能:返回类型 int。

(4)日期转小时函数:hour(STRING date)

用法:返回日期中小时函数。

功能:返回类型 int。

(5)日期转分钟函数 minute(STRING date)

用法:返回日期中的分钟。

功能:返回类型 int。

(6)日期转秒函数 second(STRING date)

用法:返回日期中的秒。

功能:返回类型 int。

(7)日期转周函数 weekofyear,weekofyear(string date)

用法:返回日期在当前的周数。

功能:返回值为 int。

8、datediff

用法:datediff(string enddate, string startdate)

功能:返回值 int,返回结束日期减去开始日期。

9、date_add

用法:date_add(string startdate, int days)

功能:返回值 string,日期增加函数,返回开始日期 startdate 增加 days 天的日期。

10、date_sub

用法:date_sub(string startdate, int days)

功能:返回值 string. 日期减少函数,返回开始日期 startdate 减少 days 天后的日期。

11、extract

用法:extract(date,integer)

功能:EXTRACT(year from '2015-01-15'),抽取日期类型中的年/月/日。

12、from_utc_timestamp

用法:from_utc_timestamp(timestamp, timezone)

功能:把 UTC 时间转换成 timezone 时间。

13、to_utc_timestamp

用法:to_utc_timestamp(timestamp, timezone)

功能:将 timestamp 转换成 UTC 时间。

14、current_date

用法:current_date()

功能:当前日期 。

15、add_months

用法:add_months(date,integer)

功能:返回 date 加上 integer 个月后的日期。

16、last_day

用法:last_day(date)。

功能:返回某个月的最后一天。

17、next_day

用法:next_day(start_date,day_of_week)。

功能:求当前日期的下一个周几。 next_day(current_date(),'mo')。

18、trunc

用法:trunc(date,fmt)

功能:date:日期时间类型 fmt:MONTH/MON/MM OR YEAR/YYYY/YY 截断指定格式,后补初始时间,如果为 YEAR 则返回 year(date)-01-01,如果为 MM 则返回 year(date)+month(date)-01

19、months_between

用法:months_between(‘date1’,‘date2’)。

功能:返回两个日期之间的月份差。

20、date_format

用法:date_format(date, format)

功能:date 参数是合法的日期,format 参数是规定日期输出的格式。

八、UDAF 函数(用户自定义聚合函数,user defined aggregation function.多对一的输入输出)

分析函数名(参数) OVER (PARTITION BY 子句 ORDER BY 子句 ROWS/RANGE 子句)。 即由以下三部分组成:

分析函数名: 如 sum、max、min、count、avg 等聚集函数以及 lead、lag 行比较函数等;

over: 关键字,表示前面的函数是分析函数,不是普通的集合函数;

分析子句: over 关键字后面挂号内的内容; 分析子句又由下面三部分组成: partition by :分组子句,表示分析函数的计算范围,不同的组互不相干; ORDER BY: 排序子句,表示分组后,组内的排序方式; ROWS/RANGE:窗口子句,是在分组(PARTITION BY)后,组内的子分组(也称窗口),此时分析函数的计算范围窗口,而不是 PARTITON。窗口有两种,ROWS 和 RANGE;

1、dense_rank()

用法:dense_rank()。

功能:有并列,相同名次不空位,总数会变。122345

2、rank()

用法:rank()

功能:有并列,相同名次空位,总数不会变。12245

3、row_number()

用法:row_number()

功能:没有并列,相同名次按顺序排(同分不同名)

4、sum()

用法:sum(column) 。

功能:用于计算指定列的总和。

5、avg()

用法:avg(column)

功能:用于计算指定列的平均值。

6、max()

用法:max(column)。

功能:用于计算指定列的最大值。

7、min()

用法:min(column) 。

功能:用于计算指定列的最大值。

8、count()

用法:count(column)

功能:用于计算指定列的最大值。

9、ntile()

用法:NTILE(n)。

功能:用于将分组数据按照顺序切分成 n 片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布

10、lag()

用法:lag(exp_str,offset,defval) over(partion by ..order by …)

功能:可以在 Hive 中轻松地查找前一行或前 N 行的数据,如果没有行,则返回 null。

11、lead()

用法:lead(exp_str,offset,defval) over(partion by ..order by …)

功能:可以在 Hive 中轻松地查找后一行或后 N 行的数据,如果没有行,则返回 null。

12、first_value()

用法:first_value() over(partion by ..order by …)

功能:取分组内排序后,截止到当前行,第一个值。

13、last_value

用法:last_value() over(partion by ..order by …)

功能:取分组内排序后,截止到当前行,最后一个值。

14、variance

用法:variance(col)

功能:返回组内查询列的方差(也可称为总体方差),也可写成 var_pop(col)。

15、var_samp

用法:var_samp(col)

功能:返回组内查询列方差的无偏估计(方差无偏估计中,因为估计期望损失了一个自由度,估计的分母为 n-1,也可称为样本方差)。

16、stddev_pop

用法:stddev_pop(col)

功能:返回组内查询列的标准差

17、stddev_samp

用法:stddev_samp(col)

功能:返回组内查询列标准差的无偏估计方差(无偏估计中,因为估计期望损失了一个自由度,估计的分母为 n-1)

18、covar_pop

用法:covar_pop(col1, col2)

功能:返回组内查询列 col1 和 col2 的总体协方差。

19、covar_samp

用法:covar_samp(col1, col2)

功能:返回组内查询列 col1 和 col2 的样本协方差

20、corr

用法:corr(col1, col2)

功能:返回组内查询列 col1 和 col2 的相关系数 。

21、perccentile

用法:percentile(BIGINT col, p)

功能:返回组内查询整数列 col 所在的分位数,p 可以为浮点数或数组,且其中元素大小必须在 0-1 之间。若 col 不是整数,需使用 percentile_approx 。

22、percentile_approx

用法:percentile_approx(DOUBLE col, array(p1[, p2]…) [, B])

功能:返回组内查询列 col 所在的分位数,p 可以为浮点数或数组,且其中元素大小必须在 0-1 之间。B 为可选参数,为精度控制参数

23、regr_avgx

用法:regr_avgx(independent, dependent)

功能:计算自变量的平均值。该函数将任意一对数字类型作为参数,并返回一个 double。任何具有 null 的对都将被忽略。如果应用于空集:返回 null。否则,它计算以下内容:avg(dependent)

24、regr_avgy

用法:regr_avgy(independent, dependent) 。

功能:计算因变量的平均值。该函数将任意一对数字类型作为参数,并返回一个 double。任何具有 null 的对都将被忽略。如果应用于空集:返回 null。否则,它计算以下内容:avg(independent)。

25、regr_count

用法:regr_count(independent, dependent)

功能:返回 independent 和 dependent 都非空的对数 。

26、regr_intercept

用法:regr_intercept(independent, dependent)

功能:返回线性回归的截距项 。

27、regr_r2

用法:regr_r2(independent, dependent)

功能:返回线性回归的判决系数(R 方,coefficient of determination)

28、regr_slope

用法:regr_slope(independent, dependent)

功能:返回线性回归的斜率系数 。

29、regr_sxy

用法:regr_sxy( [ALL | DISTINCT] yExpr, xExpr) [FILTER ( WHERE cond ) ]

参数说明:yExpr:一个数值表达式,因变量。

xExpr:一个数值表达式,自变量。

cond:一个可选的布尔表达式,可筛选用于函数的行。

功能:返回根据 xExpr 和 yExpr 不为 NULL 的组的值计算出的 yExpr 和 xExpr 乘积的和。

30、regr_syy

用法:regr_syy( [ALL | DISTINCT] yExpr, xExpr) [FILTER ( WHERE cond ) ]

参数说明:yExpr:一个数值表达式,因变量。

xExpr:一个数值表达式,自变量。

cond:一个可选的布尔表达式,可筛选用于函数的行。

功能:返回 xExpr 和 yExpr 不为 NULL 的组中 yExpr 值的平方和。

31、regr_sxx

用法:regr_sxx( [ALL | DISTINCT] yExpr, xExpr) [FILTER ( WHERE cond ) ]

参数说明:yExpr:一个数值表达式,因变量。

xExpr:一个数值表达式,自变量。

cond:一个可选的布尔表达式,可筛选用于函数的行。

功能:返回 xExpr 和 yExpr 不为 NULL 的组中 xExpr 值的平方和。

32、histogram_numeric

用法:histogram_numeric(col, b)

功能:用于画直方图。返回一个长度为 b 的数组,数组中元素为(x,y)形式的键值对,x 代表了直方图中该柱形的中心,y 代表可其高度。

33、collect_set

用法:collect_set(col)

功能:返回查询列 col 去重后的集合,与 distinct 不同,distinct 查询结果为一列数据,collect_set 查询后结果为一个集合形式的元素

34、collect_list

用法:collect_list(col)

功能:返回查询列 col 的列表

九、UDTF(User-Defined Table-Generating Functions)表生成函数

1、explode()

用法:explode(col)。

功能:explode()函数可以将数组(array 类型)的元素分隔成多行,或将映射(map 类型)的元素分隔为多行和多列。

2、posexploed()

用法:posexplode(col)。

功能:posexplode 只能用于 array。

3、inline()

用法:inline(ARRAY)

功能:inline 一般结合 lateral view 使用

4、stack()

用法:stack(int r,T1 V1,...,Tn/r Vn)

功能:即分解 n 个值 V1…Vn 转化成 r 行。每一行将有 n/r 列(向上取整)。

5、json_tuple()

用法:json_tuple(string jsonStr, string key1, string key2, …)

功能:返回 key1,key2 键对应的值。

6、parse_url()

用法:parse_url(URL,parts[HOST/PATH/QUERY])

功能:parse_url 函数是 Hive 中提供的最基本的 url 解析函数,可以根据指定的参数,从 url 解析出对应的参数值进行返回,函数为普通的一对一函数类型。

十、集合类函数

1、grouping sets

用法:group by k1,k2,k3 grouping sets((组合 1),(组合 2),(组合 3)) 对于 grouping sets 后的组合,应该是 group by 后的子集,没有使用到的 group by 字段,会自动使用 null 值填充 功能:根据不同的维度组合进行聚合,等价于将不同维度的 GROUP BY 结果集进行 UNION ALL 对于多个维度聚合问题,grouping sets 不用像 cube 方式将分组字段排列组合列出全部维度的结果,能够实现更灵活的组合。

2、grouping_id

用法:grouping sets 中的每一种粒度,都对应唯一的 groupingid 值,其计算公式与 group by 的顺序、当前粒度的字段有关。

功能:它是根据 group by 后面声明的顺序字段是否存在于当前 group by 中的一个二进制位组合数据,若组合中出现即为 1,反正则为 0,group by 后字段先出现的放在最低位,依次排开:比如 group by class,sex,course,则二进制的顺序为:course sex class ,grouping sets 字段出现则为 1,反之则为 0, 比如(class, course), 二进制为 101,十进制则为 5,则 groupingid 为 5,同理 grouping__id 为 6,则组合为(sex,course),二进制为 110。

3、cube

用法:为指定表达式集的每个可能组合创建分组集。首先会对(A、B、C)进行 group by,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行 group by 操作。

功能:cube 简称数据魔方,可以实现 hive 多个任意维度的查询,cube(a,b,c)则首先会对(a,b,c)进行 group by,然后依次是(a,b),(a,c),(a),(b,c),(b),(c),最后在对全表进行 group by,cube 会统计所选列中值的所有组合的聚合。

4、rollup

用法:rollup 的含义是卷曲的意思,顾名思义,就是会从右向左的组合字段,得到聚合结果。 group by A,B,C with rollup 首先会对(A、B、C)进行 group by,然后对(A、B)进行 group by,然后是(A)进行 group by,最后对全表进行 group by 操作。可以看出 group by A,B,C with rollup;是上述几种 group by 的并集。 功能: rollup 可以实现从右到做递减多级的统计,显示统计某一层次结构的聚合。

5、size

用法:size(Map/ARRAY)

功能:返回数组类型中的元素数。

6、map_keys

用法:map_values(Map)

功能:返回一个无序数组,该数组包含输入映射的键。

7、map_values

用法:返回一个无序数组,该数组包含输入映射的值。

功能:map_values(Map)。

8、array_contains

用法:array_contains(Array, value)。

功能:如果数组包含值,则返回 TRUE。

9、sort_array

用法:sort_array(array, [asc|desc])

功能:它可以根据指定的排序规则对数组进行排序,并返回一个排好序的新数组。

十一、类型转换函数

1、cast()

用法:cast (字段名 as 转换的类型)

功能:基础类型之间强制转换。

2、binary()

用法:binary(string|binary)。

功能:binary,将 string 类型转换为二进制。

未完,待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值