大数据分析组件Hive-集合数据结构

这篇具有很好参考价值的文章主要介绍了大数据分析组件Hive-集合数据结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

Hive是一个基于Hadoop的数据仓库基础设施,用于处理大规模分布式数据集。它提供了一个类似于SQL的查询语言(称为HiveQL),允许用户以类似于关系型数据库的方式查询和分析存储在Hadoop集群中的数据。

Hive常作为离线数仓的分析工具,当面临Json数据时,Hive需要用到其数据结构构建出一张Json表才得以操作Json数据;(Hive4.0推出了Json解析)

一、array数组类型

数组是一组具有相同类型的变量的集合。 这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。

数组类型的创建:

drop table if exists test_datatype;
create external table test_datatype(
    ids array<int>,
) comment '数据结构测试表'
location 'test/test_datatype';

创建表字段时,使用Array类型需要声明其泛型,如果在后续的操作中,向该表字段插入了一个包含string类型的array,Hive 在数据加载过程中会根据目标表的声明进行数据类型推断和转换。如果插入的数组元素与目标表声明的数据类型不匹配,Hive 会尝试进行隐式类型转换。在这种情况下,Hive 会尝试将字符串转换为整数类型。

Tip:隐式类型转换可能导致数据丢失或错误。如果类型转换失败Hive 可能会将其转换为 NULL 值。

以下构建一个简单的array数组对象:

====查询语句====
select
       ids,
       `array`(ids[0],ids[6]),
        array_contains(ids,'milet')
from (
     select `array`("aimyon","aimer","vaundy","Ado",1,3.6) as ids
         )t1
         
====执行结果====
ids>>>["aimyon","aimer","vaundy","Ado","1","3.6"]
`array`(ids[0],ids[5])>>>["aimyon",null]
array_contains(ids,'milet')>>> false
  1. Array 类型可以存储具有相同数据类型的元素。这意味着数组中的每个元素都应该是相同的数据类型。上述的Hql中使用了string和int类型,但是查询结果显示的都是string类型。
  2. Array类型通过下标取出元素,如果下标越界,取出的元素为null
  3. array_contains()能够检索数组是否包含该元素,该函数返回布尔类型。

二、map键值对集合类型

Map 类型是一种键值对的集合,其中的键和值可以是任何 Hive 支持的数据类型。Map 类型用于表示一种关联关系,类似于其他编程语言中的字典或哈希表。

Map类型的创建:

drop table if exists test_datatype;
create external table test_datatype(
    dat map<string,string>
) comment '数据结构测试表'
location 'test/test_datatype';

创建Map类型时,需要声明其键值对泛型,Map 类型的语法为 MAP<key_type, value_type>,其中 key_type 和 value_type 分别表示键和值的数据类型。

以下构建一个简单的map对象:

====查询语句====
select
    dat,
    dat['a'],
    map_keys(dat),
    `if`(array_contains(map_keys(dat),"a"),"true","false")
from (
     select `map`('a','b',1,'d') dat
         )t;
         
====执行结果====
dat>>>{"a":"b","1":"d"}
dat['a']>>>b
map_keys(dat)>>>["a","1"]
`if`(array_contains(map_keys(dat),"a"),"true","false")>>>true

map类型使用map[‘key_name’]的方式取出值,并且hive提供了map_keys,map_values获取所用的key和value,这在一些判断场景下非常好使。

Tip:map的key的类型可以不统一,但是value类型必须统一。

三、struct结构体类型

在 Hive 中,结构体(Struct)类型是一种用于组合多个字段的复合数据类型。结构体类型允许你在一个列中存储多个相关的值,并将它们作为一个单元进行处理。

结构体类型由多个字段组成,每个字段都有一个名称和一个数据类型。你可以将结构体类型用作表的列类型,或者作为其他复合数据类型(如数组或映射)的元素类型。

struct类型的创建:

drop table if exists test_datatype;
create external table test_datatype(
    obj struct<id:int,name:string>
) comment '数据结构测试表'
location 'test/test_datatype';

创建struct结构体时,需要声明所有使用到的类型,结构体创建之后,其属性不能再做更改。

以下构建一个简单的struct对象:

====查询语句====
select struct('a','b','c','d') >>>{"col1":"a","col2":"b","col3":"c"}
select name_struct('a','b','c',1) >>>{"a":"b","c":1}
 
select obj,
       obj.a
from (
         select named_struct('a', 'b', 'c', 1) obj
     ) t1;
====执行结果====
obj>>> {"a":"b","c":1}
obj.a>>> b
  1. 结构体通过点的方式访问元素
  2. 结构体与map不同,一旦创建属性个数就不能更改。
  3. 结构体定义后,其类型不能做更改< name:string,age:int >;map类型定义后其每个元素的值类型就需要确定了map< string:stiring >

总结:

遇到Json属性为 {key1:value1,key2:value2 …}

  1. value类型都统一的,并且个数不确定的可以使用map类型。
  2. value类型不统一,并且个数确定的可以使用struct类型。

遇到类似数组的json数据:

  "actions": [{                   -- 动作(事件)
    "action_id": "favor_add",   -- 动作id
    "item": "3",                -- 目标id
    "item_type": "sku_id",      -- 目标类型
    "ts": 1585744376605         -- 动作时间戳
  }
  1. 数据结构可以嵌套使用:array< struct < key1:string,key2:int > >
  2. 上述json中actions为数组,元素个数不确定并且元素都能够用struct

array<泛型> map<string:string> struct<name:string,age:int>

具体问题具体分析,根据数据情况选择合适的数据结构。文章来源地址https://www.toymoban.com/news/detail-824356.html

到了这里,关于大数据分析组件Hive-集合数据结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • HNU数据结构与算法分析-作业1-算法分析

      1. (简答题) 1.(教材3.4)(a)假设某一个算法的时间代价为 ,对于输入规模n,在某台计算机上实现并完成该算法的时间为t秒。现在另有一台计算机,运行速度为第一台的64倍,那么t秒内新机器上能完成的输入规模为多大? 2.(教材3.12) 写出下列程序段平均情况下时间代

    2024年02月05日
    浏览(46)
  • HNU数据结构与算法分析-作业2-线性结构

      1. (简答题) 4.1 假设一个线性表包含下列元素: |2,23,15,5,9 使用Shaffer编写的教材《数据结构与算法分析》的List ADT编写一些C++语句,删除值为15的元素。 (要求:采用C或C++语言描述算法) 4.6 使用Shaffer编写的教材《数据结构与算法分析》的LList类,给LList类的实现添加一个成

    2024年02月05日
    浏览(54)
  • 数据结构课设——成绩分析问题

    一、实验 题目 【问题描述】 录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。 【基本要求】 (1)通过键盘输入各学生的多门课程的成绩,建立相应的文件 input.dat。 (2)对文件 input.dat 中的数据进行处理,要求具有如下功能:         1) 按各门课程成绩排

    2024年02月07日
    浏览(44)
  • 数据结构基本概念及算法分析

    数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科 1.1.1 数据 数据: 描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合. 数据不仅包括整型,实型等数据类型,还包括字符及

    2024年02月15日
    浏览(44)
  • CAN数据帧结构图解分析

      CAN数据帧的数据位结构主要包括以下几个部分: 起始位 (Start of Frame,SOF): 1位 ,用于标识一个CAN数据帧的开始,其值为低电平(0)。 标识符 (Identifier,ID): 11位或29位 ,用于标识CAN数据帧的类型和发送者与接收者等信息。 标准标识符(11位):用于标识网络中的设

    2024年02月12日
    浏览(39)
  • Pandas 数据分析系列1--Series&DataFrame数据结构详解

       P andas 是一个开源的数据分析和数据处理库,是基于 NumPy 开发的。它提供了灵活且高效的数据结构,使得处理和分析结构化、缺失和时间序列数据变得更加容易。其在数据分析和数据处理领域广泛应用,在金融、社交媒体、科学研究等领域都有很高的使用率和广泛的应用

    2024年02月08日
    浏览(41)
  • AAC 音频数据结构实例分析:

    AAC 音频数据结构实例分析: AAC 有两种数据交换格式:ADTS 和 ADIF ADIF: Audio Data Interchange Format, 一个文件只有一个头,可类比dvd中使用的ps流。 ADTS:Audio Data Transport Stream, 每个frame中都有这个同步头, 可类比dvb中的ts流. 本博客只介绍 ADTS 格式AAC 基本构成是7bytes 头部+原始数据. 循

    2024年02月02日
    浏览(36)
  • 算法与数据结构-复杂度分析

      算法的执行效率,粗略地讲,就是算法代码执行的时间。但是,如何在不运行代码的情况下,用“肉眼”得到一段代码的执行时间呢?   这里有段非常简单的代码,求 1,2,3…n 的累加和。现在,我就带你一块来估算一下这段代码的执行时间。   从 CPU 的角度来看,这

    2024年02月08日
    浏览(55)
  • 《数据结构》八大排序(详细图文分析讲解)

    目录 排序 排序的应用       排序简介 排序的分类 排序算法的好坏评判 冒泡排序法  思路分析 代码实现   选择排序法 思路分析 代码实现   插入排序 思路分析 代码实现  希尔排序 思路分析 代码演示  归并排序法  思路分析 代码演示  快速排序  思路分析 代码实现 

    2024年02月03日
    浏览(49)
  • TCP数据报结构分析(面试重点)

    在传输层中有UDP和TCP两个重要的协议,下面将针对TCP数据报的结构进行分析 关于UDP数据报的结构分析推荐看UDP数据报结构分析(面试重点)         源端口表示发送数据时,发送方的端口号,由于占16位2个字节,所以取值范围是0-65535,所以一个合法的端口号,有效范围就是

    2024年02月10日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包