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

这篇具有很好参考价值的文章主要介绍了Hive中的复杂数据类型 - array、map、struct。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

官方数据类型详情页

数据类型 描述 范围
tinyint 1byte有符号整数 from -128 to 127
smallint 2byte有符号整数 from -32,768 to 32,767
int 4byte有符号整数 from -2,147,483,648 to 2,147,483,647
bigint 8byte有符号整数 from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float 4byte单精度浮点数 \
double 8byte双精度浮点数 \
decimal 高精度数值类型 decimal(10,0)默认值,表示最多有10位数,其中0位小数
boolean 布尔类型 true或者false
string 字符串 用的最多
date 日期类型 YYYY-­MM-­DD
timestamp 时间戳类型 \

二、复杂数据类型

array(数组)

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

map(集合)

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

struct(结构体)

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


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

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

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

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

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

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

hive array<struct<x:decimal(15,12),y:decimal(15,13)>>,hive,hive,hadoop,数据仓库,复杂数据类型,struct,map,array


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

insert into table 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()括号里面写上数组内元素就行了,各个元素之间用逗号隔开

hive array<struct<x:decimal(15,12),y:decimal(15,13)>>,hive,hive,hadoop,数据仓库,复杂数据类型,struct,map,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的数据时要.属性名这样子访问

hive array<struct<x:decimal(15,12),y:decimal(15,13)>>,hive,hive,hadoop,数据仓库,复杂数据类型,struct,map,array

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

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

hive array<struct<x:decimal(15,12),y:decimal(15,13)>>,hive,hive,hadoop,数据仓库,复杂数据类型,struct,map,array文章来源地址https://www.toymoban.com/news/detail-838909.html

到了这里,关于Hive中的复杂数据类型 - array、map、struct的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据HIVE篇--控制hive任务中的map数和reduce数

    一、 控制hive任务中的map数: 通常情况下,作业会通过input的目录产生一个或者多个map任务。 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改); 举例: a) 假设input目

    2024年02月05日
    浏览(36)
  • [hive]中的字段的数据类型有哪些

    Hive中提供了多种数据类型用于定义表的字段。以下是Hive中常见的数据类型: 布尔类型(Boolean):用于表示true或false。 字符串类型(String):用于表示文本字符串。 整数类型(Integers):包括TINYINT(1字节整数)、SMALLINT(2字节整数)、INT或INTEGER(4字节整数)、BIGINT(8字节

    2024年02月05日
    浏览(36)
  • Rust 数据类型 之 结构体(Struct)

    目录 结构体(Struct) 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体(Unit Struct) 元组结构体(Tuple Struct) 具名结构体(Named Struct) 结构体嵌套 结构体方法 例1:结构体转换为字符串描述 例2:矩形的周长和面积 例3:结构体字段的更新与输出 关联函数 结构体

    2024年02月16日
    浏览(47)
  • 前端js 数据结构:对象 object、数组Array 、Map 的创建、增删改 / 遍历数据

    对象:由一组键值对组成的无序集合,可以通过键来获取对应的值。 每个键值对中的键是唯一的,值可以是任意类型的数据。 对象通常用来表示实体的属性和方法。 1.1.1 对象字面量(最常用): {} 对象字面量:通过在大括号 {} 中定义对象的属性和方法来创建对象。 这是最简单

    2024年01月21日
    浏览(51)
  • List中的元素类型为Map,如何更新map中的内容

    假设List 包含一个 Map,形式如下: 现在,你想从 myList 中取出这个 Map,然后追加一个新的键值对,再将修改后的 Map 放回 myList。 最终,myList 中的 Map 将会被修改,新的键值对被追加进去。 需要注意的是,如果你的 List 中仅有一个元素,直接使用 myList.get(0) 可以取出该元素。

    2024年02月10日
    浏览(38)
  • 深入探讨 Go 语言中的 Map 类型

    Go 语言中的 map 类型是一种非常强大且常用的数据结构,它提供了一种键值对的映射关系。本篇博客将深入讨论 Go 中的 map 类型,包括其基本用法、特性、以及一些最佳实践。 1. 声明和初始化 在 Go 中,你可以使用 make 函数来创建一个空的 map 。 map 的键和值可以是任意数据类

    2024年01月17日
    浏览(42)
  • 由 Array.includes 函数引发对引用数据类型的思考

    `` 数组的includes方法在日常的编程中比较常用到,其作用就是判断某一数据是否在数组中,通常来说,数组中的数据如果是数字,布尔值,或者字符串的话,都是能够进行判断的 例如: 如果是对象的话,那么会有一个有趣的现象发生 arr.includes({ age: 11, name: \\\'bob\\\'}) 这行,inclu

    2024年02月09日
    浏览(61)
  • golang 结构体struct转map实践

      1、反射 type sign struct {     Name string `json:\\\"name,omitempty\\\"`     Age  int    `json:\\\"age,omitempty\\\"` }   var s sign s.Name = \\\"csdn\\\" s.Age = 18     //方式1 反射 var data = make(map[string]interface{})   t := reflect.TypeOf(s) v := reflect.ValueOf(s) for i := 0; i t.NumField(); i++ {     data[t.Field(i).Name] = v.Field(i).Interfa

    2024年02月12日
    浏览(39)
  • nlohmann json:实现map和struct的互转

    可以借助json实现map和struct的互转:

    2024年02月11日
    浏览(42)
  • 【python基础】复杂数据类型-列表类型(元组)

    列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。 然而,有时候需要创建一系列不可修改的元素,元组可以满足这种需求 python将不能修改的值称为不可变的,而不可变的列表被称为元组。 元组看起来犹如列表,但使用圆括号而不是方括号来标识

    2024年02月07日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包