0


Hive中的复杂数据类型 - array、map、struct

水善利万物而不争,处众人之所恶,故几于道💦

文章目录

一、简单数据类型(复习)

官方数据类型详情页
数据类型描述范围tinyint1byte有符号整数from -128 to 127smallint2byte有符号整数from -32,768 to 32,767int4byte有符号整数from -2,147,483,648 to 2,147,483,647bigint8byte有符号整数 from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807float4byte单精度浮点数\double8byte双精度浮点数\decimal高精度数值类型decimal(10,0)默认值,表示最多有10位数,其中0位小数boolean布尔类型true或者falsestring字符串用的最多date日期类型YYYY-­MM-­DDtimestamp时间戳类型\

二、复杂数据类型

array(数组)

定义数组:array<int>
构建数组:array(1,3,5,6)
访问数组:字段名[0]

map(集合)

定义集合:map<string,int>
构建集合:map(“age”,11,“weight”,99)
访问集合:字段名[“weight”]

struct(结构体)

定义结构体:structname:string,age:int
构建结构体:named_struct(“name”,“Asrid”,“age”,99)
访问结构体:字段名.name


看完上面可能一脸懵,有点懂,又有点迷,下面用一个例子解释下。

数据类型无非就是创建表的时候指定数据类型,然后向表中插入数据的时候要按照相应的数据类型构建出相应格式类型的数据才能插入,最终在查询的时候如何访问到数据。

上面说的分别就对应数据类型的定义、构建、访问。

比如,想创建一张data_type表,字段的数据类型分别用array、map、struct,那如何写呢?

createtable data_type(
    name string,
    age int,
    address map<string,string>,
    friend struct<name:string,age:int>,
    phone array<bigint>)

表中最后三个字段的类型就是复杂数据类型的定义,也就是如何声明一个复杂的数据类型。

在这里插入图片描述


表创建好了以后,如何向表中插入数据呢?这就涉及到如何构建一个map、array、struct 了

insertintotable data_type
(name,age,address,friend,phone)values("Bersd",32,
map("山西","太原","陕西","西安"),
named_struct("name","aaa","age",33),
array(12345678888,18234567777,19243219998))

构建map的时候,直接map()括号里面写上key value 中间用逗号分割开就行
构建struct的时候,使用named_struct()括号里面写属性名,属性值,之间用逗号隔开
构建array的时候,直接array()括号里面写上数组内元素就行了,各个元素之间用逗号隔开

在这里插入图片描述


向表中插入数据之后,那怎样访问到struct、map、array 里面的数据呢?

select name,
         address["山西"] shanxi,
         friend.name friend_name,
         friend.age friend_age,
         phone[0] phone_first
from data_type;

可以看到,访问array和map的时候都是方括号,然后里面写数组下标或者map的key,而访问struct的数据时要

.属性名

这样子访问

在这里插入图片描述

扩展:以上复杂数据类型之间支持嵌套,也就是说struct里面的数据类型可以写map、array,array里面也可以放map、struct…

构建struct还可以直接struct(“name”,“张三”,“age”,89)这样他就会给四个默认的列名,这个一般不用

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_45796486/article/details/136106751
版权归原作者 阿年、嗯啊 所有, 如有侵权,请联系我们删除。

“Hive中的复杂数据类型 - array、map、struct”的评论:

还没有评论