• hive函数篇一


    hive 查看函数:

    show  functions;

    desc functions 函数名

    1. 时间函数

    1.1 时间戳函数
    --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数
    select unix_timestamp(); --获得当前时区的UNIX时间戳
    select unix_timestamp('2017-09-15 14:23:00'); 
    select unix_timestamp('2017-09-15 14:23:00','yyyy-MM-dd HH:mm:ss');
    select unix_timestamp('20170915 14:23:00','yyyyMMdd HH:mm:ss'); 

    --时间戳转日期
    select from_unixtime(1505456567); 
    select from_unixtime(1505456567,'yyyyMMdd'); 
    select from_unixtime(1505456567,'yyyy-MM-dd HH:mm:ss'); 
    select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss'); --获取系统当前时间

    1.2 获取当前日期: current_date
    hive> select current_date from dual
    2017-09-15

    1.3 日期时间转日期:to_date(string timestamp) 
    hive> select to_date('2017-09-15 11:12:00') from dual;
    2017-09-15

    1.4 获取日期中的年/月/日/时/分/秒/周
    with dtime as(select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as dt)
    select year(dt),month(dt),day(dt),hour(dt),minute(dt),second(dt),weekofyear(dt)
      from dtime
      
    1.5 计算两个日期之间的天数: datediff
    hive> select datediff('2017-09-15','2017-09-01') from dual;  
    14

    1.6 日期增加和减少: date_add/date_sub(string startdate,int days)
    hive> select date_add('2017-09-15',1) from dual;    
    2017-09-16
    hive> select date_sub('2017-09-15',1) from dual;    
    2017-09-14

    --其他日期函数
    查询当前系统时间(包括毫秒数): current_timestamp;  
    查询当月第几天: dayofmonth(current_date);
    月末: last_day(current_date)
    当月第1天: date_sub(current_date,dayofmonth(current_date)-1)
    下个月第1天: add_months(date_sub(current_date,dayofmonth(current_date)-1),1)

    2.字符串函数

    --正则表达式替换函数:regexp_replace
    语法: regexp_replace(string A, string B, string C) 
    返回值: string
    说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符
    举例:
    hive> select regexp_replace(‘foobar’, ‘oo|ar’, ”) from dual;
    fb


    正则表达式解析函数:regexp_extract
    语法: regexp_extract(string subject, string pattern, int index) 
    返回值: string
    说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。注意,在有些情况下要使用转义字符
    举例:
    hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from dual;
    the
    hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) from dual;
    bar
    hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;
    foothebar

    0表示把整个正则表达式对应的结果全部返回

    1表示返回正则表达式中第一个() 对应的结果 以此类推 


    URL解析函数:parse_url
    语法: parse_url(string urlString, string partToExtract [, string keyToExtract]) 
    返回值: string
    说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.

    举例:
    * parse_url('http://facebook.com/path/p1.php?query=1', 'HOST')返回'facebook.com' 
    * parse_url('http://facebook.com/path/p1.php?query=1', 'PATH')返回'/path/p1.php' 
    * parse_url('http://facebook.com/path/p1.php?query=1', 'QUERY')返回'query=1',
    可以指定key来返回特定参数,例如
    * parse_url('http://facebook.com/path/p1.php?query=1', 'QUERY','query')返回'1',

    * parse_url('http://facebook.com/path/p1.php?query=1#Ref', 'REF')返回'Ref' 
    * parse_url('http://facebook.com/path/p1.php?query=1#Ref', 'PROTOCOL')返回'http'

    json解析函数:get_json_object
    语法: get_json_object(string json_string, string path) 
    返回值: string

    说明:解析json的字符串json_string,返回path指定的内容。

    第一个参数(string json_string)填写json对象变量,第二个参数(string path)使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;

    如果输入的json字符串无效,那么返回NULL。 
    每次只能返回一个数据项。
    举例:

    1. data =
    2. {
    3. "store":
    4. {
    5. "fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],
    6. "bicycle":{"price":19.95,"color":"red"}
    7. },
    8. "email":"amy@only_for_json_udf_test.net",
    9. "owner":"amy"
    10. }

    get单层值

    hive> select get_json_object(data, '$.owner') from test;
    结果:amy
    get多层值.

    hive> select get_json_object(data, '$.store.bicycle.price') from test;
    结果:19.95
    get数组值[]

    hive> select get_json_object(data, '$.store.fruit[0]') from test;
    结果:{"weight":8,"type":"apple"}

    如request ={“store”: {“fruit”:[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],  “bicycle”:{“price”:19.95,”color”:”red”}  }

    >get_json_object(request,'$.weight')

    8

    空格字符串函数:space
    语法: space(int n) 
    返回值: string
    说明:返回长度为n的字符串
    举例:
    hive> select space(10) from dual;
    hive> select length(space(10)) from dual;
    10


    重复字符串函数:repeat
    语法: repeat(string str, int n) 
    返回值: string
    说明:返回重复n次后的str字符串
    举例:
    hive> select repeat(‘abc’,5) from dual;
    abcabcabcabcabc


    首字符ascii函数:ascii
    语法: ascii(string str) 
    返回值: int
    说明:返回字符串str第一个字符的ascii码
    举例:
    hive> select ascii(‘abcde’) from dual;
    97


    左补足函数:lpad
    语法: lpad(string str, int len, string pad) 
    返回值: string
    说明:将str进行用pad进行左补足到len位
    举例:
    hive> select lpad(‘abc’,10,’td’) from dual;
    tdtdtdtabc
    与GP,ORACLE不同,pad 不能默认


    右补足函数:rpad
    语法: rpad(string str, int len, string pad) 
    返回值: string
    说明:将str进行用pad进行右补足到len位
    举例:
    hive> select rpad(‘abc’,10,’td’) from dual;
    abctdtdtdt


    分割字符串函数: split
    语法:  split(string str, string pat) 
    返回值:  array
    说明: 按照pat字符串分割str,会返回分割后的字符串数组
    举例:
    hive> select split(‘abtcdtef’,'t’) from dual;
    ["ab","cd","ef"]


    集合查找函数: find_in_set
    语法: find_in_set(string str, string strList) 
    返回值: int
    说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0
    举例:
    hive> select find_in_set(‘ab’,'ef,ab,de’) from dual;
    2
    hive> select find_in_set(‘at’,'ef,ab,de’) from dual;
    0

  • 相关阅读:
    解决异常:“The last packet sent successfully to the server was 0 milliseconds ago. ”的办法
    关于时间复杂度
    关于如何在MyEclipse下修改项目名包名,以及类
    Error filterStart
    类A是公共的,应在名为A.java的文件中声明错误
    Eclipse快捷键大全
    JVM 是用什么语言写的?
    退出cmd命令
    Java 如何对文件进行多个Object对象流的读写操作
    SublimeText2 快捷键一览表
  • 原文地址:https://www.cnblogs.com/perfectdata/p/10038201.html
Copyright © 2020-2023  润新知