0


hive中复杂数据类型(array,map,struct)讲解

一、array数组类型

1、建表语句:

create table t1(f1 类型,...arrs array<类型>)

row format delimited

fields terminated by '\t' ----列之间的分隔符

collection items terminated by ','; ----数组arrs内元素分隔符(一般为逗号)

在limux下创建文件:

vim array

输入一些内容:

张三,男,12|13|14|15

李四,男,21|22|23|24

王五,女,31|32|33|34

建表语句:

create table t1(
    name string,
    sex string,
    score array<int>)
    row format delimited fields terminated by ','
    collection items terminated by '|';

这里可以看到创建成功了

2、导入数据

load data local inpath '本地文件路径' overwrite into table t1;

load data local inpath '/root/aaa/array' overwrite into table t1;

3、显示数据

select * from t1;

这里可以看到,导入后的array类型变成了以逗号分割的类型

4、操作数组列arrs

(1)获取值 ---列名[下标] eg:arrs[1]

select score,score[0],score[1],score[2],score[3] from t1;

(2)查询元素个数 ---size(列名)

select *,size(arrs) from t1;

二、map集合类型

1、建表语句:

create table t2(f1 类型,...maps map<类型,类型>)

row format delimited

fields terminated by '\t' ----列之间的分隔符

collection items terminated by ',' ----键值对之间的分隔符(即键值对之间的分隔符,一般为逗号)

map keys terminated by '#' ----键值对内部的分隔符(即键与值之间的分隔符,一般为冒号)

在limux下创建文件:

vim map

输入一些内容:

张三,男,语文:90|数学:88|英语:91

李四,男,语文:94|数学:74|英语:77

王五,女,语文:81|数学:99|英语:85

创建表:

create table t2(

    name string,

    sex string,

    score map<string,int>)

    row format delimited fields terminated by ','

    ollection items terminated by '|'

    map keys terminated by ':';

2、导入数据

load data local inpath '本地文件路径' overwrite into table t2;

load data local inpath '/root/aaa/map' overwrite into table t2;

3、显示数据

select * from t2;

4、操作集合列maps

(1)获取值value ---列名['键名'] eg:maps['zhangsan'];

select score['语文'] from t2;

  1. 获取全部键名keys ---map_keys(列名) eg:select map_keys(maps) from t2;
select map_keys(score) from t2;

  1. 获取全部键名values ---map_values(列名) eg:select map_values(maps) from t2;
select map_values(score) from t2;

三、struct结构类型

1、建表语句:

create table t3(f1 类型,...structs struct<子列名1:类型,子列名2:类型,...>)

row format delimited

fields terminated by '\t' ----列之间的分隔符

collection items terminated by ':'; ----结构体内列名与类型之间的分隔符(一般为冒号)

在limux下创建文件:

vim struct

输入一些内容:

张三,男,88|91

李四,男,74|77

王五,女,99|85

创建表:

create table t3(

    name string,

    sex string,

    score struct<math:int,english:int>)

    row format delimited fields terminated by ','

  collection items terminated by '|';

2、导入数据

load data local inpath '本地文件路径' overwrite into table t3;

load data local inpath '/root/aaa/struct' overwrite into table t3;

3、显示数据

select * from t3;

4、操作结构列structs

(1)获取值value ---列名.子列名 eg:structs.name;

select score.chinese from t3;

标签: hive hadoop

本文转载自: https://blog.csdn.net/m0_65095185/article/details/138580123
版权归原作者 Anagend 所有, 如有侵权,请联系我们删除。

“hive中复杂数据类型(array,map,struct)讲解”的评论:

还没有评论