zoukankan      html  css  js  c++  java
  • hive常用函数五

    复合类型构建操作

    1. Map类型构建: map

    语法: map (key1, value1, key2, value2, …)

    说明:根据输入的key和value对构建map类型

    举例:

    hive> Create table lxw_test as select map('100','tom','200','mary') as t from lxw_dual;

    hive> describe lxw_test;

    t       map<string,string>

    hive> select t from lxw_test;

    {"100":"tom","200":"mary"}

    2. Struct类型构建: struct

    语法: struct(val1, val2, val3, …)

    说明:根据输入的参数构建结构体struct类型

    举例:

    hive> create table lxw_test as select struct('tom','mary','tim') as t from lxw_dual;

    hive> describe lxw_test;

    t       struct<col1:string,col2:string,col3:string>

    hive> select t from lxw_test;

    {"col1":"tom","col2":"mary","col3":"tim"}

    3. array类型构建: array

    语法: array(val1, val2, …)

    说明:根据输入的参数构建数组array类型

    举例:

    hive> create table lxw_test as select array("tom","mary","tim") as t from lxw_dual;

    hive> describe lxw_test;

    t       array<string>

    hive> select t from lxw_test;

    ["tom","mary","tim"]

    十、复杂类型访问操作

    1. array类型访问: A[n]

    语法: A[n]

    操作类型: A为array类型,n为int类型

    说明:返回数组A中的第n个变量值。数组的起始下标为0。比如,A是个值为['foo', 'bar']的数组类型,那么A[0]将返回'foo',而A[1]将返回'bar'

    举例:

    hive> create table lxw_test as select array("tom","mary","tim") as t from lxw_dual;

    hive> select t[0],t[1],t[2] from lxw_test;

    tom     mary    tim

    2. map类型访问: M[key]

    语法: M[key]

    操作类型: M为map类型,key为map中的key值

    说明:返回map类型M中,key值为指定值的value值。比如,M是值为{'f' -> 'foo', 'b' -> 'bar', 'all' -> 'foobar'}的map类型,那么M['all']将会返回'foobar'

    举例:

    hive> Create table lxw_test as select map('100','tom','200','mary') as t from lxw_dual;

    hive> select t['200'],t['100'] from lxw_test;

    mary    tom

    3. struct类型访问: S.x

    语法: S.x

    操作类型: S为struct类型

    说明:返回结构体S中的x字段。比如,对于结构体struct foobar {int foo, int bar},foobar.foo返回结构体中的foo字段

    举例:

    hive> create table lxw_test as select struct('tom','mary','tim') as t from lxw_dual;

    hive> describe lxw_test;

    t       struct<col1:string,col2:string,col3:string>

    hive> select t.col1,t.col3 from lxw_test;

    tom     tim

    十一、复杂类型长度统计函数

    1.    Map类型长度函数: size(Map<K.V>)

    语法: size(Map<K.V>)

    返回值: int

    说明: 返回map类型的长度

    举例:

    hive> select size(map('100','tom','101','mary')) from lxw_dual;

    2

    2.    array类型长度函数: size(Array<T>)

    语法: size(Array<T>)

    返回值: int

    说明: 返回array类型的长度

    举例:

    hive> select size(array('100','101','102','103')) from lxw_dual;

    4

    3.    类型转换函数

    类型转换函数: cast

    语法: cast(expr as <type>)

    返回值: Expected "=" to follow "type"

    说明: 返回array类型的长度

    举例:

    hive> select cast(1 as bigint) from lxw_dual;

    1

    4. 其他

    cast 函数:
    类型转换函数,cast(kbcount as int);

    case when:
    条件判断,case when kbcount is not null and cast(kbcount as int) >= cast(patch_count as int) then '1' else '0' end as isinstalled ;
    语法:方法1
    (
    case sex
    when '1' then '男'
    when '2' then '女'
    else '未知'
    end
    ) as 性别

    方法2
    case
    when sex='1' then '男'
    when sex='2' then '女'
    else '未知'
    end as 性别

    from_unixtime:将unix时间戳转化为制定格式的时间
    from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as xdsp_last_update_time

    lcase() :将字段的值转换为小写
    lcase(t.info_iot_name)


    hive collect_set: 可以得到分组后,其他合并元素的制定位置的值作为去重后的值。

    表明:user
    id , name, url
    1 shao www
    1 shao1 www1
    2 zhi www
    2 zhi1 www.ee
    2 zhi2 www.2323
    3 qi www.eere
    3 qi2 www.urr

    想要得到:
    id , name, url
    1 shao www
    2 zhi www
    3 qi www.eere

    sql实现:方法1
    select id ,collect_set(name)[0],collect_set(url)[0]
    from user
    group by id;

    方法2:
    select id ,max(name),max(url)
    from user
    group by id;

    字符串max:字符串按照字母A-Z,越往后值越大
    汉字按照全拼字母排,第一个字母相同则看第二个
    concat() : 将两个或者多个字符串连接起来,如果有任何一个参数为null,则返回值为null
    a.os_version like concat('%','2012r2','%')
    concat_ws(): 以第一个参数为分隔符,将其他参数连起来
    concat_ws('.',os_version_main,os_version_sp,os_version_bit,os_version_sub)

  • 相关阅读:
    log4net 配置 一站式解决
    设计模式-职责链模式(ChainOfResponsibility)
    springboot+Kafka(生产者和消费者)
    springboot启动过程分析
    Eureka注册中心原理
    JDK8常量池整理
    第2章 Java内存区域与内存溢出异常
    第5章 数据库分库分表实例
    物理分页和内存分页-引用
    spring4体系架构
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/11534478.html
Copyright © 2011-2022 走看看