十、复杂类型访问操作 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(\ 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
十一、复杂类型长度统计函数 1. Map类型长度函数: size(Map
语法: size(Map
说明: 返回map类型的长度
举例:
hive> select size(map('100','tom','101','mary')) from lxw_dual;
2. array类型长度函数: size(Array
语法: size(Array
说明: 返回array类型的长度 举例:
hive> select size(array('100','101','102','103')) from lxw_dual;
3. 类型转换函数
类型转换函数: cast
语法: cast(expr as
返回值: Expected \ 说明: 返回array类型的长度 举例:
hive> select cast(1 as bigint) from lxw_dual;
4. case when解释
select 课程,
sum(case when 姓名='李四' then 成绩end)as '李四', sum(case when 姓名='张三' then 成绩end)as '张三' from table_2 group by 课程 --意思是:
查询结果按照“课程”、“李四的成绩”、“张三的成绩”显示出来, 其中“李四的成绩”计算方法是:
当姓名=李四,那么就计算将该行的成绩按照课程进行分类加总 “张三的成绩”计算方法是:
当姓名=张三,那么就计算将该行的成绩按照课程进行分类加总 select 姓名,
sum(case when 课程='语文' then 成绩end)as '语文', sum(case when 课程='数学' then 成绩 end)as '数学', sum(case when 课程='英语' then 成绩 end)as '英语' from table_2 group by 姓名 --类似的意思是:
查询结果按照“姓名”、“语文”、“数学”、“英语”按照姓名进行加总各科成绩显示出来, 其中“语文”成绩计算方法是:
当科目=语文,那么就计算将该行的成绩按照姓名进行分类加总
“数学”成绩计算方法是:
当科目=数学,那么就计算将该行的成绩按照姓名进行分类加总 “英语”成绩计算方法是:
当科目=英语,那么就计算将该行的成绩按照姓名进行分类加总 case when 条件 then 表达式1 else 表达式2 end 表示:当条件成立,则返回表达式1,否则返回表达式2.
因此:sum(case when 姓名='李四' then 成绩 end)as '李四', 表示如果姓名为李四,则加总计算成绩,列名为?李四?