Hive复杂数据类型:array、map、struct
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive复杂数据类型:array、map、struct相关的知识,希望对你有一定的参考价值。
参考技术A 目前所学的复杂数据类型有三种 array , map , struct 。用这种数据类型的特点就是集合里的每一个字段都是一个具体的信息,不会是那种 key 与 values 的关系
load数据如上所示,一共两个字段, ruoze 和他们工作的城市
也就是字段与字段之间的分割用table array字段之间的分割用“ , ”。
array_contains 这个函数是array_contains(array字段,‘字段包含的内容’)
比如以上就是array字段包含 tianjin 的数据。
以上数据一共有3个字段,分别为id,name,member。其中member里的内容都是以 key:values 的形式出现的,若是这种形式一般用 map 这种复杂数据类型
struct('a',1,2,3,4) (这个数据类型的特点就是可以包含各种各样的数据类型。但是 struct 可以是任意数据类型,在写struct数据类型时,在 <> 中要写清楚struct字段中的字段名称跟数据类型)
hive 复杂类型
hive提供一种复合类型的数据
struct:可以使用“.”来存取数据
map:可以使用键值对来存取数据
array:array中存取的数据为相同类型,其中的数据可以通过下表获取数据
创建 struct类型
create table student_struct(id INT, info struct<name:STRING, age:INT>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ //指定表在加载数据时候的列分割符 COLLECTION ITEMS TERMINATED BY ‘:‘; //指定每个字段之间的item的分隔符
导入测试数据
1,zhang:24 2,wang:23 3,feng:22 4,li:22 5,zhou:21 6,xing:20 7,cai:19 8,yi:18 9,lan:17
查询表中数据
使用struct的"."来查询数据
hive> select*from student_struct where info.age>20; OK 1 {"name":"zhang","age":24} 2 {"name":"wang","age":23} 3 {"name":"feng","age":22} 4 {"name":"li","age":22} 5 {"name":"zhou","age":21} Time taken: 2.31 seconds, Fetched: 5 row(s)
创建array
create table student_array(id INT, stuArray array<String>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,‘ COLLECTION ITEMS TERMINATED BY ‘:‘;
加载测试数据(stuArray里面存储的是相同的数据类型,可以有多个值)
同 struct 数据
查询表中数据(array类型,可以通过你创建表时定义列的别名,通过下标来获取数据)
hive> select*from student_array where stuArray[1]>20; OK 1 ["zhang","24"] 2 ["wang","23"] 3 ["feng","22"] 4 ["li","22"] 5 ["zhou","21"] Time taken: 2.63 seconds, Fetched: 5 row(s)
创建Map(stuMap可以有多个,我这里写了两个)
create table student_map(id string, stuMap map<string, int>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t‘ COLLECTION ITEMS TERMINATED BY ‘,‘ MAP KEYS TERMINATED BY ‘:‘;
导入测试数据
1 zhang:24,shangHai:100 2 wang:23,shangHai:200 3 feng:22,shangHai:1900 4 li:22,shangHai:2900 5 zhou:21,shangHai:1200 6 xing:20,shangHai:1200 7 cai:19,shangHai:600 8 yi:18,shangHai:7600 9 lan:17,shangHai:8000
查询数据
hive> select * from student_map where stuMap[‘shangHai‘]=100; OK 1 {"zhang":24,"shangHai":100} Time taken: 0.944 seconds, Fetched: 1 row(s) hive>
以上是关于Hive复杂数据类型:array、map、struct的主要内容,如果未能解决你的问题,请参考以下文章