HIVE中关于collect_set与explode函数妙用

2023-11-06

hive的复合数据类型

hive中的列支持使用三类复杂的集合数据类型,即:array,map及struct,这些类型的名称是保留字,具体用法可参见该篇博文,里面有关于三类基本集合数据类型的操作实例,注:map中可嵌套array类型。
例如,定义表:

create table example (
    device_id string,
    login_ip array<string>,
    user_info map<string,array<string>>
    address struct<street:string,city:string,state:string>
)
row format delimited
fields terminated by '\001'
collection items terminated by '\002'
map keys terminated by '\003'
lines terminated by '\n'
stored as RCFile; 

在hive环境下运行,即可创建该管理表(区分外部表),如果有必要,可以直接使用load data加载数据。

collect_set函数

collect_set(col)函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。例如,如下数据记录,要统计每种no下的score,这里就可以配合group by 产生奇效。

no  score
1   2
1   3
1   3
2   2
2   4
2   4
......

直接对no分组后对score进行collect_set操作,如下:

select no,collect_set(score) from tablss group by no;

这样,就实现了将列转行的功效,但是注意只限同列基本数据类型,函数只能接受一列参数。

explode函数

explode(array)函数接受array类型的参数,其作用恰好与collect_set相反,实现将array类型数据行转列,例如,上述记录列转行后的形式如下:

no   score_set
1    [2,3]
2    [2,4]

假设这样的数据类型以分区表存储,你要统计一段时间类no=1下的去重score,那么该怎么办了?这里可配合使用lateral view首先实现列转行的功能,如下所示:

select no,score from tablaa lateral view explode(score_set) xxx as score;

注:xxx代表虚表名称,不能缺少。

进一步深化上述代码解决统计一段时间的去重值,可写为:

select no,collect_set(score) from tablaa lateral view explode(score_set) xxx as score group by no;

这样,将两个函数结合实现了行转列或列转行的妙用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HIVE中关于collect_set与explode函数妙用 的相关文章

随机推荐

  • antd4.x 使用setfieldsvalue动态修改表单值

    表单的默认值可以用 Form 里的 initialValues 来设置 但是 initialValues 不能被 setState 动态更新 因此需要用 setFieldsValue 来更新 1 创建ref实例 创建ref实例 export
  • 技术支持岗位面试问题汇总,绝对有你遇到的面试题!!

    交换机与路由器的区别 1 路由器能拨号 交换机不能 2 无线路由器能使无线设备WIFI上网 交换机不行 3 外形上 从外形上我们区分两者 交换机通常端口比较多看起来比较笨重 而路由器的端口就少得多体积也小得多 4 工作层次不同 最初的交换机
  • 2019最新计算机毕业设计-题目汇总大全-系列1

    课设题目 备注 基于NLP ASR及TTS技术的智能语音分析工具 负责语义分析部分 论文替代 基于SpringBoot的用户音乐平台 家装设计公司客户关系系统 基于机器学习的文本语义分析工具 基于微信小程序的私教预约系统 标准化轮胎仓库管理
  • (转)读源码品Caffe - 结构流程篇

    原文链接 https blog csdn net jinzhuojun article details 79834697 背景 本文主要介绍深度学习框架Caffe的工作原理和实现 时至今日 各种深度学习框架百花齐放 百家争鸣 从流行程度来说
  • R软件的rattle安装指南

    rattle安装问题 1 正常安装情况 2 无法正常安装情况 2 1版本号不对应 2 2网络不稳定 2 3文字乱码问题 1 正常安装情况 这是先基于R4 0 0 这个在3 6的版本都成功过 看到有人说4 0 0不能安装 因此特地去安装尝试下
  • maven环境变量配置(超详细!)

    下载地址 官网地址 建议不要下载在C盘 配置过程 1 解压下载好的压缩包 2 此电脑 右键 属性 高级系统设置 环境变量 3 新建一个系统变量 点击系统变量的新建 变量名 MAVEN HOME 变量值 maven解压的目录 通过浏览目录选择
  • pyspark访问hive数据实战

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 之前我们部门在数据分析这边每天的日报都是直接使用hive脚本进行调用 随着APP用户行为和日志数据量的逐渐累积 跑每天的脚本运行需要花的时间越来越长 虽然进行了sql优化
  • 理解内连接中的隐式内连接、显式内连接和外连接中的左外连接、右外连接

    一 多表查询 二 在 MySQL 中创建 book 和 actor 两张表 1 创建 book 表及添加数据 CREATE TABLE book id INT PRIMARY KEY NOT NULL AUTO INCREMEN bookN
  • 容器技术之Docker&K8S

    1 Docker K8S区别 区别 1 k8s是一种开放源码的容器集群管理系统 而Docker是一种开放源码的应用容器引擎 2 k8s是一套自动化部署工具 可以管理docker容器是容器编排层面的 docker是容器化技术 是容器层面的 2
  • Axure RP9笔记--页面自适应

    笔记2 页面自适应 大三的时候曾经对猫耳FM进行重构 使用HTML 现在看看真是一塌糊涂 只做出了静态页面 当时还遇到了个问题 浏览器变成小窗后 里面的内容并不会改变大小 但是现在大部分网站都做了页面自适应 当时还对前端一无所知 今天的学习
  • 如何在macOS中编译LLVM

    第一步 在App Store中搜索并安装Xcode 如果不想安装整个Xcode 可以在terminal中运行以下命令来只安装命令行工具 xcode select install 第二步 安装LLVM的依赖库 首先运行以下命令 以官网为准 来
  • sql尚硅谷day1

    mysql基础 1 通过mysql自带服务端 只限root用户 2 cmd进入mysql命令 mysql h localhost P 3306 u 用户名 p 停止exit 显示数据库 show databases 打开一个库 use 库名
  • 五大板块(5)——字符串

    参考 五大板块 5 字符串 作者 丶PURSUING 发布时间 2021 03 18 16 03 48 网址 https blog csdn net weixin 44742824 article details 114982019 目录
  • 华为OD机试真题-士兵过河II【2023Q2】【JAVA、Python、C++】

    题目描述 一支N个士兵的军队正在趁夜色逃亡 途中遇到一条湍急的大河 敌军在T的时长后达河面 没到过对岸的士兵都会被消灭 现在军队只找到了1只小船 这船最多能同时坐上2个士兵 1 当1个士兵划船过河 用时为 a i 0 lt i lt N 2
  • java: framework from BLL、DAL、IDAL、MODEL、Factory, using MySql 8.0

    sql drop table BookKindList 书目录 create table BookKindList BookKindID INT NOT NULL AUTO INCREMENT 自动增加 BookKindName nvarc
  • G - LR Constraints(AtCoder - arc124_a )

    题目链接 题意 N个卡片 上面的数字为1 k 然后有k个限制条件 每个限制条件有1个字母 ci 和一个数字 ki 如果ci是 L 表示i能够输入的最左边的位置是ki 如果ci是 R 表示i能够输入的最右边的位置是ki 如果能理解题意 这个题
  • simulink的工具箱开发stm32步骤

    1 打开stm32cubeMx 配置芯片信息 记得配置时钟 之前就是因为没有配置time 出现灯不亮的问题 2 打开Matlab 将当前工作目录切换到配置文件的目录IOC配置文件 stm32cubeMx 然后开始调用simulink模块 3
  • linux tcpdump rpm,linux命令——tcpdump

    这样tcpdump就顺利地安装到你的linux系统中 怎么样 很简单吧 二 Tcpdump的使用 tcpdump采用命令行方式 它的命令格式为 tcpdump adeflnNOpqStvx c 数量 F 文件名 i 网络接口 r 文件名 s
  • 在CentOS7中安装JDK1.8并配置环境变量

    在CentOS7中安装JDK1 8并配置环境变量 准备工作 首先下载jdk的压缩包 64位 链接 http pan baidu com s 1o7B1PXK 密码 el7b 1 新建 usr java文件夹 将jdk 8u45 linux
  • HIVE中关于collect_set与explode函数妙用

    hive的复合数据类型 hive中的列支持使用三类复杂的集合数据类型 即 array map及struct 这些类型的名称是保留字 具体用法可参见该篇博文 里面有关于三类基本集合数据类型的操作实例 注 map中可嵌套array类型 例如 定