使用函数查询(二)
4.其他内置函数
以下这些函数用于处理字符串、Map、数组和时间戳
返回值类型 | 样式 | 描述 |
---|---|---|
STRING | ascii(STRING s) | 返回字符串s中首个ASCII字符串的整数值 |
STRING | base64(BINARY bin) | 将二进制bin转换成基于64位的字符串 |
BINARY | binary(STRING s)binary(BINARY b) | 将输入的值转换成二进制值 |
返回类型就是type定义的类型 | cast(<expr> as <type>) | 将expr转换成type 类型的。例如cast('1' as BIGINT)将会将字符串'1'转换成BIGINT数值类型。如果转换过程失败,则返回NULL |
STRING | concat(BINARY s1,BINARY s2,...) | 将二进制字节码按次序拼接成一个字符串 |
STRING | concat(STRING s1,STRING s2,...) | 将字符串s1,s2等拼接成一个字符串。例如,concat('ab','cd')的结果是'abcd' |
STRING | concat_ws(STRING separator,STRING s1,STRING s2,...) | 和concat类似,不过是使用指定分隔符进行拼接的 |
STRING | concat_ws(BINARY separator,BINARY s1,STRING s2,...) | 和concat类似,不过是使用指定分隔符进行拼接的 |
ARRAY<STRUCT<STRING,DOUBLE>> | context_ngrams(array<array<string>>,array<string>,int k,int pf) | 和ngrams类似,但是从每个外层数组的第二个单词数组来查找前k个字尾 |
INT | find_in_set(STRING s,STRING commaSepa-rateString) | 返回在以逗号分隔的字符串中s出现的位置,如果没有找到则返回NULL |
STRING | format_number(NUMBER x,INT d) | 将数值x转化成'# ,###,###,##'格式字符串,并保留d位小数。如果d为0,那么输出值就没有小数点后面的值 |
BOOLEAN | in | 例如,test in(val1,val2,...),其表示如果test值等于后面列表中的任一值的话,则返回true |
BOOLEAN | in_file(STRING s,STRING filename) | 如果文件名为filename的文件中有完整一行数据和字符串s完全匹配的话,则返回true |
INT | instr(STRING str,STRING substr) | 查找字符串str中子字符串substr第一次出现的位置 |
INT | length(STRING s) | 计算字符串s的长度 |
INT | locate(STRING substr,STRING str[,INT pos]) | 查找在字符串str中的pos位置后字符串substr第一次出现的位置 |
STRING | lower(STRING s) | 将字符串中所有字母转换成小写字母。例如,lower('hIvE')的结果是'hive' |
STRING | lcase(STRING s) | 和lower( )一样 |
STRING | lpad(STRING s,INT len,STRING pad) | 从左边开始对字符串s使用字符串pad进行填充,最终达到len长度为止。如果字符串s本身长度比len大的话,那么多余的部分会被去除掉 |
STRING | ltrim(STRING s) | 将字符串s前面出现的空格全部去除掉。例如,trim(' hive')的结果是'hive' |
STRING | printf(STRING format,Obj ... args) | 按照printf风格格式化输出输入的字符串 |
STRING | regexp_extract(STRING subject,STRING regex_pattern,STRING index) | 抽取字符串subject 中符合正则表达式regex_pattern 的第一个index个部分的子字符串 |
STRING | regexp_replace(STRING s,STRING regex,STRING replacement) | 按照Java正则表达式regex将字符串s中符合条件的部分替换成replacement所指定的字符串,如果replacement部分是空的话,那么符合正则的部分就会被去除掉。例如regexp_replace('hive','[ie]','z')的结果是'hzvz' |
STRING | repeat(STRING s,INT n) | 重复输出n次字符串s |
STRING | reverse(STRING s) | 反转字符串 |
STRING | rpad(STRING s,INT len,STRING pad) | 从右边开始对字符串s使用字符串pad进行填充,最终达到len长度为止。如果字符串s本身长度比len大的话,那么多余的部分会被去除掉 |
STRING | rtrim(STRING s) | 将字符串s后面出现的空格全部去除掉。例如rtrim('hive ')的结果是'hive' |
ARRAY<ARRAY<STRING>> | sentences(STRING s,STRING lang,STRING locale) | 将输入字符串s转换成句子数组,每个句子又由一个单词数组构成。参数lang和locale是可选的,如果没有使用的,则使用默认的本地化信息 |
INT | size(MAP<K,V>) | 返回MAP中元素的个数 |
INT | size(ARRAY<T>) | 返回数组ARRAY的元素个数 |
STRING | space(INT n) | 返回n个空格 |
ARRAY<STRING> | split(STRING s,STRING pattern) | 按照正则表达式pattern分割字符串s,并将分割后的部分以字符串数组的方式返回 |
MAP<STRING,STRING> | str_to_map(STRING s,STRING delim1,STRING delim2) | 将字符串s按照指定分隔符转换成Map,第一个参数是输入的字符串,第二个参数是键值对之间的分隔符,第三个分隔符是键和值之间的分隔符 |
STRING | substr(STRING s,STRING start_index)substring(STRING s,STRING start_index) | 对于字符串s,从start位置开始截取length长度的字符串,作为子字符串。例如substr('abcdefgh',3,2)的结果是'cd' |
STRING | substr(BINARY s,STRING start_index)substring(BINARY s,STRING start_index) | 对于二进制字节值s,从start位置开始截取length长度的字符串,作为子字符串 |
STRING | translate(STRING input,STRING from,STRING to) | |
STRING | trim(STRING A) | 将字符串s前后出现的空格全部去除掉。例如trim(' hive ')的结果是'hive' |
STRING | upper(STRING A)ucase(STRING A) | 将字符串中所有字母转换成大写字母。例如,upper('hIvE')的结果是'HIVE' |
STRING | from_unixtime(BIGINT unixtime[,STRING format]) | 将时间戳秒数转换成UTC时间,并用字符串表示,可以通过format规定的时间格式,指定输出的时间格式 |
BIGINT | unix_timestamp( ) | 获取当前本地时区下的当前时间戳 |
BIGINT | unix_timestamp(STRING date ) | 输入的时间字符串格式必须是yyyy-MM-dd HH:mm:ss,如果不符合则返回0,如果符合则将此时间字符串转换成Unix时间戳。例如:unix_timestamp('2009-03-20 11:30:01')=1237573801 |
BIGINT | unix_timestamp(STRING date, STRING pattern) | 将指定时间字符串格式字符串转换成Unix时间戳,如果格式不对则返回0.例如:unix_timestamp('2009-03-20','yyyy-MM-dd')=1237532400 |
STRING | to_date(STRING timestamp) | 返回时间字符串的日期部分,例如:to_date("1970-01-01 00:00:00")="1970-01-01" |
INT | year(STRING date) | 返回时间字符串中的年份并使用INT类型表示。例如:year("1970-01-01 00:00:00")=1970,year("1970-01-01")=1970 |
INT | month(STRING date) | 返回时间字符串中的月份并使用INT类型表示。例如:month("1970-11-01 00:00:00")=11,month("1970-11-01")=11 |
INT | day(STRING date)dayyofmonth(STRING date) | 返回时间字符串中的天并使用INT类型表示。例如:day("1970-11-01 00:00:00")=1,day("1970-11-01")=1 |
INT | hour(STRING date) | 返回时间戳字符串中的小时并使用INT类型表示。例如: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 | datediff(STRING enddate,STRING startdate) | 计算开始时间startdate到结束时间enddate相差的天数。例如:datediff('2009-03-01','2009-02-27')=2 |
STRING | date_add(STRING startdate,INT days) | 为开始时间startdate增加days天。例如:date_add('2008-12-31',1)='2009-01-01' |
STRING | date_sub(STRING startdate,INT days) | 从开始时间startdate中减去days天。例如:date_sub('2008-12-31',1)='2008-12-30' |
TIMESTAMP | from_utc_timestamp(TIMESTAMP timestamp,STRING timezone) | 如果给定的时间戳并非UTC,则将其转化成指定的时区下的时间戳 |
TIMESTAMP | to_utc_timestamp(TIMESTAMP timestamp,STRING timezone) | 如果给定的时间戳是指定的时区下的时间戳,则将其转化成UTC下的时间戳 |
需要注意的是,和时间相关的函数输入的是整型或者字符串类型参数。对于Hive v0.8.0版本,这些函数同样接受TIMESTAMP类型参数,同时为了向后兼容,他们还将继续支持之前的整型和字符串类型参数。
爱看书也爱远行
心情在路上
FIND YOURSELF
读很多的随记也写下很多的文字/浅浅淡淡
似乎还能感受到那是的安稳自由惬意和
一种特殊的安静的力量
如果还能出发去遇见更多的未知的人和事
那我一定不辜负世界的温柔