hive lateral view 实践记录(Array和Map数据类型)

这篇具有很好参考价值的文章主要介绍了hive lateral view 实践记录(Array和Map数据类型)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Array

1.建表并插入数据

 2.lateral view explode

二、Map

1、建表并插入数据

2、lateral view explode()

3、查询数据


一、Array

1.建表并插入数据

正确插入数据:

create table tmp.test_lateral_view_movie_230829(movie string,category array<string>);

insert into tmp.test_lateral_view_movie_230829 select '《战狼3》',array('战争','动作','剧情');
insert into tmp.test_lateral_view_movie_230829 select '《疑犯追踪》',array('悬疑','动作','科幻','剧情');

select * from tmp.test_lateral_view_movie_230829;

原数据

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

 2.lateral view explode

select 
	movie
	,cate_name 
from tmp.test_lateral_view_movie_230829 
lateral view explode(category) tmp_view as cate_name

结果:

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

 --------最开始错误的插入数据法-------

 原数据

create table tmp.test_lateral_view_movie_230828(movie string,category array<string>);

select * from tmp.test_lateral_view_movie_230828;

insert into tmp.test_lateral_view_movie_230828 select '《疑犯追踪》',array('悬疑,动作,科幻,剧情');
insert into tmp.test_lateral_view_movie_230828 select '《疑犯追踪2》',array('悬疑,动作,科幻,剧情');
insert into tmp.test_lateral_view_movie_230828 select '《战狼》',array('战争,动作,剧情');
insert into tmp.test_lateral_view_movie_230828 select '《战狼2》',array('战争,动作,剧情');
insert into tmp.test_lateral_view_movie_230828 select '《战狼3》',array('战争,动作,剧情');

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

 step1:

select 
movie
,category_detail
from tmp.test_lateral_view_movie_230828 lateral view explode(category) tmp as category_detail

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

step2:

select 
	movie
	,category_detail_name
from 
(
	select 
		movie
		,category_detail
	from tmp.test_lateral_view_movie_230828 lateral view explode(category) tmp as category_detail 
) a
lateral view explode(split(category_detail,',')) tmp as category_detail_name

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

备注:

select 
	a.movie
	,split(a.category_detail,',') aaa
	,b.category bbb 
from 
(
	select 
		movie
		,category_detail
	from tmp.test_lateral_view_movie_230828 lateral view explode(category) tmp as category_detail 
) a
left join 
(
select * from tmp.test_lateral_view_movie_230828
) b 
on a.movie = b.movie

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

比原表数据少了 双引号

综上,以上的插入数据是不对的!!!

-----------

注意:

1.array类型数据,建表时怎么插入?

array('悬疑','动作','科幻','剧情')

2.array类型的数据,怎么根据下标获取里面的值?

select 
	movie
	,category[0] 
	,category[1] 
	,category[2] 
from tmp.test_lateral_view_movie_230829 

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

二、Map

1、建表并插入数据

--map类型测试
create table tmp.test_lateral_view_movie_230830_map(movie string,category map<string,string>);

insert into tmp.test_lateral_view_movie_230830_map select '《战狼3》',str_to_map('1:战争,2:动作,3:剧情');
insert into tmp.test_lateral_view_movie_230830_map select '《疑犯追踪》',str_to_map('a:悬疑,b:动作,c:科幻,d:剧情');

select * from tmp.test_lateral_view_movie_230830_map;

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

注:通过str_to_map()函数实现插入数据

2、lateral view explode()

select
	movie
	,category_id
	,category_name
from tmp.test_lateral_view_movie_230830_map
lateral view explode(category) tmp_view as category_id,category_name 
;

注:as 后是两个参数

结果

hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql

3、查询数据

select movie,category['1'] from tmp.test_lateral_view_movie_230830_map where movie = '《战狼3》';

 hive lateral view 实践记录(Array和Map数据类型),sql,hive,hadoop,数据仓库,sql文章来源地址https://www.toymoban.com/news/detail-681688.html

到了这里,关于hive lateral view 实践记录(Array和Map数据类型)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 6. Hive中的 explode / posexplode 和 lateral view

    Hive中的 explode / posexplode 和 lateral view 1. explode() 将 arrary 或 map 结构数据拆分成多行,并返回拆分后的每个元素。 1.1 用于 array 的语法如下 explode ():函数中的参数传入的是 arrary 数据类型的列名 newcol:给转换后的列起一个新的名字,用于代表转换之后默认的列名 tablename:原表

    2024年02月13日
    浏览(41)
  • Hive 中的爆炸函数( lateral view 与 explode 用法)

    explode就是将hive一行中复杂的array或者map结构拆分成多行。 lateral view用于和split, explode等函数一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合

    2024年02月12日
    浏览(37)
  • Hive中的explode函数、posexplode函数与later view函数

      在离线数仓处理通过HQL业务数据时,经常会遇到行转列或者列转行之类的操作,就像concat_ws之类的函数被广泛使用,今天这个也是经常要使用的拓展方法。 2.1 函数语法 2.2 函数说明 explode 函数是UDTF 函数,将hive一列中复杂的array或者map结构拆分成多行。 Explode函数是不允

    2024年04月09日
    浏览(28)
  • 【hive】行转列—explode()/posexplode()/lateral view 函数使用场景

    功能: 用于和UDTF函数(explode,split)结合使用,把某一行数据拆分成多行数据,再将多行结果组合成一个支持别名的虚拟表。 主要解决select使用UDTF做查询的过程中查询只能包含单个UDTF,不能包含其它字段以及多个UDTF的情况。 语法:LATERAL VIEW udtf(expression) tableAlias AS columnAlia

    2024年04月09日
    浏览(30)
  • explode与lateral view使用详解(spark及hive环境对比)

    定义: explode函数能够将array及map类型的数据炸开,实现一行变多行 格式: select explode(array/map) from table 示例 原始数据tmp表 name id goods a 1 book_a,food_a b 2 book_b,food_b c 3 null  输出结果 goods_col book_a food_a book_b food_b 定义: Lateral 也是用来对数组进行列转行的,Lateral View主要解决在

    2024年02月03日
    浏览(25)
  • 前端如何传递Array、Map类型数据到后端

    针对前后端分离的项目,避免不了前端需要传递Array、Map类型的数据到后端,那么要怎么实现这种情况的参数传递呢?请看下文分说。 前端有Map类型数据如下: 将Map类型数据转化成String,再进行传递 将前端传过来的String数据,解析为JSON对象,再强制转为java的Map 以上。本文

    2024年02月02日
    浏览(35)
  • SQL Server对象类型(3)——视图(View)

    4.3.1. 视图概念 与Oracle中的视图类似,SQL Server中的视图也是一种虚的、通过一个查询定义的逻辑对象,主要用于集中、简化、定制用户需求,控住其底层表安全,以及应用系统提供向后兼容等方面。 -- 注:       1)上述内容中的“虚的”,表示视图本身并不实际包含和存储

    2024年02月09日
    浏览(27)
  • Hive执行计划之只有map阶段SQL性能分析和解读

    目录 目录 概述 1.不带函数操作的select-from-where型简单SQL 1.1执行示例 1.2 运行逻辑分析 1.3 伪代码解释 2.带普通函数和运行操作符的普通型SQL执行计划解读 2.1 执行计划解读 2.2 伪代码解释逻辑 可能所有的SQLboy刚接触SQL语句的时候都是select xxx from xxx where xxx。在hive中,我们把这

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

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

    2024年01月21日
    浏览(38)
  • Hive SQL 迁移 Flink SQL 在快手的实践

    摘要:本文整理自快手数据架构工程师张芒,阿里云工程师刘大龙,在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分: Flink 流批一体引擎 Flink Batch 生产实践 核心优化解读 未来规划 点击查看原文视频 演讲PPT 首先,介绍一下我们选择 Flink 作为流批一体

    2024年02月16日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包