2023.11.16-hive sql高阶函数lateral view,与行转列,列转行

目录

0.lateral view简介

1.行转列

 需求1:

需求2:

2.列转行

解题思路:


0.lateral view简介

  hive函数 lateral view 主要功能是将原本汇总在一条(行)的数据拆分成多条(行)成虚拟表,再与原表进行笛卡尔积,从而得到明细表。配合UDTF函数使用,一般情况下经常与explode函数搭配,explode的操作对象(列值)是 ARRAY 或者 MAP ,可以通过 split 函数将 String 类型的列值转成 ARRAY 来处理。

炸裂函数配合侧视图使用如下
格式:select 原表别名.字段名,侧视图名.字段名 from 原表 原表别名 lateral view explode(要炸开的字段) 侧视图名 as 字段名 ;

1.行转列

-- 数据准备

--建表

create table row2col2(col1 string,col2 string,col3 int)row format delimited fields terminated by '\t';

--加载数据到表中

load data inpath '/input/r2c2.txt' into table row2col2;

-- 验证数据

select * from row2col2;

 需求1:


需求1: 把原表数据变成以下格式
a b [1,2,3]
c d [4,5,6]


思路:使用collect_list()函数有序不去重


selectcol1,col2,collect_list(col3) -- 先将col3收集
from row2col2
group bycol1, col2;

需求2:


需求2: 把原表数据变成以下格式
a b '1-2-3'
c d '4-5-6'

思路:1,2,3已经知道怎么收集了,可以用concat来将这几个数字与符号-拼接起来
concat_ws():函数在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL。concat_ws():函数需要指定分隔符。
但concat_ws只支持拼接字符串,所以需要先用cast强转成字符串

  • cast(内容 as  类型)
  • concat_ws的格式:  select concat_ws('要拼接的分隔符','字符串1','字符串2');
select col1,col2,concat_ws('-',(collect_list(cast(col3 as string))))
from row2col2
group by col1, col2
;

2.列转行

1.准备数据

--创建表
create table col2row2(col1 string,col2 string,col3 string
)row format delimited fields terminated by '\t';

2.加载数据

--加载数据
load data  inpath '/source/c2r2.txt' into table col2row2;

3.验证数据

select * from col2row2;

解题思路:

-- 单列数据先切割再炸开
-- explode只能炸一个参数,只能接收数组或映射作为参数
select explode(col3)from col2row2; --报错
--无法直接炸col3字段,因为是字符串类型,并且题中的1,2,3并不是'一个'参数select split(col3,',') from col2row2;
--用split切割后,会将切割完的数据放进数组里 [""1"",""2"",""3""][""4"",""5"",""6""]select explode(split(col3,',')) from col2row2;
--得到了数组后,可以用explode来炸了

使用lateral view生成最终的表

格式:select 原表别名.字段名,侧视图名.字段名 from 原表 原表别名 lateral view explode(要炸开的字段) 侧视图名 as 字段名 ;

select col2row2.col1 , col2row2.col2 ,c2r.col3_explode
from col2row2
lateral view
explode(split(col3,',')) c2r as col3_explode  --用lv函数造出虚拟表c2r,col3_explode是字段名
;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在远程协同视频会议中确保安全性?

随着远程工作的普及,远程协同视频会议已成为企业和团队之间进行交流和协作的重要工具。与此同时,会议中的安全性问题也日益凸显。本文将介绍如何在远程协同视频会议中确保安全性,主要包括以下方面: 1、内网部署 将会议服务器部署…

Nginx(六) Nginx location 匹配顺序及优先级深究(亲测有效)

Nginx配置文件详解请参考另一篇文章 Nginx(三) 配置文件详解 本篇文章主要是探讨Nginx location的匹配顺序,依照惯例,我们还是先贴结论再看测试结果。 匹配顺序 匹配location的过程,其实可以理解成一个在众多选项中寻找最佳答案的过程。当然…

关于Vue3和Vue-rounter的几个理解

router-link对应的router-view能分开在不同的vue模块中吗&#xff1f; <router-link>和<router-view>可以分别在不同的Vue模块中使用。<router-link>是用于生成路由链接的组件&#xff0c;它可以在任何Vue模块中使用&#xff0c;例如在导航栏组件、侧边栏组…

LeetCode:342. 数位和相等数对的最大和(C++)

目录 342. 数位和相等数对的最大和 题目描述&#xff1a; 实现代码与解析&#xff1a; 暴力模拟&#xff08;超时&#xff0c;考虑优化&#xff09; 如何优化&#xff1f; hash 342. 数位和相等数对的最大和 题目描述&#xff1a; 给你一个下标从 0 开始的数组 nums &am…

ubuntu20中安装cmake-gui

参考&#xff1a;ubuntu20 安装cmake-gui 基本上是先下载&#xff0c;后解压&#xff0c;再添加软链接--使系统识别该程序的路径。 我因为通过其他方式安装了&#xff0c;这里只是记录下这种安装方式。

Swift开发中:非逃逸闭包、逃逸闭包、自动闭包的区别

1. 非逃逸闭包&#xff08;Non-Escaping Closure&#xff09; 定义&#xff1a;默认情况下&#xff0c;在 Swift 中闭包是非逃逸的。这意味着闭包在函数结束之前被调用并完成&#xff0c;它不会“逃逸”出函数的范围。内存管理&#xff1a;由于闭包在函数返回前被调用&#xf…

【原创】java+swing+mysql鲜花购物商城设计与实现

前言&#xff1a; 本文主要介绍了鲜花购物商城的设计与实现。首先&#xff0c;通过市场需求&#xff0c;我们确定了鲜花商场的功能&#xff0c;通常的商城一般都是B/S架构&#xff0c;然而我们今天要用javaswing去开发一个C/S架构的鲜花商城&#xff0c;利用开发技术和工具&am…

解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具

在当今数字化时代&#xff0c;网络已经成为了人们生活和工作中不可或缺的一部分。然而&#xff0c;对于网络安全和性能的监控和分析却是一项重要而又复杂的任务。为了帮助用户更好地理解和解决网络中的问题&#xff0c;Wireshark作为一款强大的网络抓包工具&#xff0c;应运而生…

回溯算法(3)--n皇后问题及回溯法相关习题

一、n皇后问题 1、概述 n皇后要求在一个nn的棋盘上放置n个皇后&#xff0c;使得他们彼此不受攻击&#xff0c;皇后可以攻击同一行、同一列、同一斜线上的敌人&#xff0c;所以n皇后问题要求寻找在棋盘上放置这n个皇后的方案&#xff0c;使得任意两个皇后都不在同一行、同一列或…

基于STC12C5A60S2系列1T 8051单片机的模数芯片ADC0832实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0832实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0832介绍通过模数芯片ADC0832把电压模…

kafka入门(一):kafka消息消费

安装kafka&#xff0c;创建 topic&#xff1a; Windows安装kafka, 详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133067851 Linux 安装kafka&#xff0c;详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133080353 添…

一键云端,AList 整合多网盘,轻松管理文件多元共享

hello&#xff0c;我是小索奇&#xff0c;本篇教大家如何使用AList实现网盘挂载 可能还是有小伙伴不懂&#xff0c;所以简单介绍一下哈 AList 是一款强大的文件管理工具&#xff0c;为用户提供了将多种云存储服务和文件共享协议集成在一个平台上的便利性。它的独特之处在于&am…

Mendix 创客访谈录|低代码赋能IoT应用开发

本期创客 郑锴 舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部 毕业于浙江大学&#xff0c;三年软件设计开发经验。目前任职于舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部&#xff0c;担任软件开发工程师&#xff0c;主要负责工业互联网相关软件…

【Python 千题 —— 基础篇】输出列表方差

题目描述 题目描述 输出列表的方差。题中有一个包含数字的列表 [10, 39, 13, 48, 32, 10, 9]&#xff0c;使用 for 循环获得这个列表中所有项的方差。 输入描述 无输入。 输出描述 输出列表的方差。 示例 示例 ① 输出&#xff1a; 列表的方差是&#xff1a;228.0代码…

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中&#xff0c;dfs2是一个一个小格格的网格面的时间序列文件&#xff0c;dfs1是一条由多个点组成的线的时间序列文件。 如下两图&#xff1a; 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …

ctfshow 文件上传 151-161

文件上传也好久没做了。。 手很生了 151 前端绕过 只能上传png文件 使用bp抓包&#xff0c;修改文件名后缀为php 上传成功&#xff0c;发现文件上传路径 使用蚁剑连接 找到flag 152 152 后端校验 跟上一关一样 表示后面即使执行错误&#xff0c;也不报错 抓包修改文件…

数智竞技何以成为“科技+体育”新样本?

文 | 智能相对论 作者 | 青月 “欢迎来到&#xff0c;钢铁突袭。” 三人一组&#xff0c;头戴VR设备&#xff0c;中国香港队和泰国队在数实融合的空间里捉对厮杀&#xff0c;通过互相射击对方能量铠甲获取积分。 虽然双方都展现出了极强的机动性&#xff0c;但显然中国香港队…

解决:微软在登录时总是弹出需要家长或监护人同意才能使用该账户并且不断循环?

目录 问题来源&#xff1a; 解决办法&#xff1a; 问题来源&#xff1a; 我的edge浏览器账号登录&#xff0c;一直弹出来需要家长或监护人同意才能使用&#xff0c;然后按照提示操作&#xff0c;会一直循环&#xff0c;是个无穷循环。 解决办法&#xff1a; 参考&#xff1…

表格型方法

表格型方法 概念 强化学习是一个与时间相关的序列决策的问题。 概率函数与奖励函数 概率函数定量地表达状态转移的概率&#xff0c;其可以表现环境的随机性。但是实际上&#xff0c;我们经常处于一个未知的环境中&#xff0c;即概率函数和奖励函数是未知的。 时序差分法 …

Vue.js正式环境中配置多个请求的URL

在Vue.js中&#xff0c;你可以在正式环境中配置多个请求的URL&#xff0c;通常使用一些配置文件或者环境变量的方式。下面是一种常见的配置方式&#xff1a; 1. 创建配置文件&#xff1a;在项目的根目录下&#xff0c;创建一个配置文件&#xff0c;比如可以是config.js&#x…