百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

HIVE内外部表与HQL 行列转换 hive内外部表的区别

wptr33 2024-11-11 16:08 39 浏览

Hive内部表与外部表的区别

内部表 (managed table) : 未被external修饰

外部表 (external table) :被external修饰

区别:

存储位置: 内部表的数据存储在Hive的默认文件系统中,而外部表的数据存储在外部文件系统中。外部文件系统可以是本地文件系统、HDFS等,这使得外部表可以方便地与其他系统进行数据共享和交互。

数据管理: 当删除内部表时,Hive会自动删除该表及其数据。而删除外部表时,只会删除表的元数据,而不会删除表的数据。这是因为内部表数据由Hive自身管理,外部表的数据并不是由Hive管理的(由HDFS管理),因此在删除外部表时需要手动清理数据。

表的创建方式:内部表可以通过CREATE TABLE语句进行创建,也可通过Hive自动将HDFS上的目录映射为表的方式进行创建。而外部表只能通过CREATE EXTERNAL TABLE语句进行创建。

数据导入:对于内部表,可以通过INSERT语句将数据导入到表中。而对于外部表,需要先将数据存储在外部文件系统中,然后通过LOAD DATA语句将数据加载到表中。

应用场景:

1)内部表适合存储对数据的修改和删除操作,因为删除内部表时可以直接删除相关的数据文件。一般内部表在数仓中的DW(细节层) 中使用;

2)外部表适合存储对数据的只读操作,比如将已经存在的数据文件导入到Hive中进行分析。一般外部表在数仓中的ODS层(贴源层) 中使用。


HQL 行列转换

1、行转列: UDF聚合函数

1) 相关函数

concat: 返回输入字符串连接后的结果,支持任意个输入字符串;

concat ws(separator, str1,str2,..: 它是一个特殊形式的 concat0;第一个参数传入参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;

collect set(col): 函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

2) 数据准备

name

constellation

blood_type

小孙

白羊座

A

大海

射手座

A

小宋

白羊座

B

小八

白羊座

A

小风

射手座

A

3) 创建hive表并导入数据

create table person info(
  name string,
  constellation string,
  blood type string)
row format delimited fields terminated by "t";
load data local inpath "/opt/module/datas/constellation.txt" into table person info;

注:该表采用的是文本格式的数据文件,字段之间使用制表符 \t 进行分隔,因此在 create table 语句中使用了 row format delimited fields terminated by "\t" 来指定字段分隔符为制表符。其中 row format delimited 表示指定行的格式,fields terminated by "\t" 表示指定字段之间的分隔符为制表符。

接下来,使用 load data 语句将文本文件 /opt/module/datas/constellation.txt 中的数据导入到 person_info 表中。load data 语句用于将数据从外部存储器(如本地文件系统或 HDFS)导入到 Hive 表中。其中 local inpath 表示指定本地文件路径,/opt/module/datas/constellation.txt 是需要导入的文本文件的路径,into table 表示将数据导入到指定的表名 person_info 中。

需要注意的是,如果该表已经存在,则可以使用 insert into 语句将新数据插入到表中,或者使用 truncate table 语句清空表中的数据并重新导入数据。另外,在导入数据之前,需要确保表结构的定义与数据文件的格式相匹配,否则可能会导致数据导入失败或数据丢失等问题。

4)需求

把星座和血型一样的人归类到一起。结果如下:

射手座,A

大海|小风

白羊座,A

小孙|小八

白羊座,B

小宋

select name,concat(constellation, " ",blood type) as base from person_info;

select
	t1.base concat_ws ('|',collect_set ( t1.name )) name 
from
	( select name, concat( constellation, ",", blood type )  as  base from person_info; ) t1 
group by t1.base;

2、列转行: UDTF爆炸函数

1)相关函数

explode(col): 将hive一列中复杂的array或者map结构拆分成多行

lateral view

用法: lateral view udtf(expression) tableAlias AS columnAlias

解释: 用于和split,explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

2)数据准备

movie

category

《战狼》

战争、灾难、动作

《疑犯》

动作、悬疑、剧情、科幻

《Life》

悬疑、警匪、心理、动作、剧情

3) 创建hive表并导入数据

create table movie_info(

movie string,

category array<string>)

row format delimited fields terminated by "t"
collection items terminated by ",";

load data local inpath "/opt/module/datas/movie.txt" into table movie_info

4) 需求

将电影分类中的数组数据展开

select movie,category name from movie_info
lateral view explode(category) table_category as category_name

相关推荐

第 28 章:核心功能 SQL 查询 - PostgreSQL入门

欢迎来到我们史诗级教程的最终章!在上一章,我们成功地构建了博客系统的数据库骨架。现在,这个结构精良的数据库正静静地等待着我们去使用它。...

postgresql的6种索引介绍_postgresql默认用户名和密码

postgresql几种索引PostgreSQL支持多种索引类型,每种索引的设计原理、适用场景和优缺点各有不同。以下是对主要索引类型的详细介绍:...

第 20 章:索引与性能优化 - PostgreSQL入门

到目前为止,我们已经学习了如何设计表、保证数据完整性、以及如何用各种方式查询数据。但当我们的表从几十行增长到几百万、甚至上亿行时,一个之前只需要0.1秒的查询,可能会变成需要几分钟甚至几小时的“灾...

PostgreSQL 主从复制 完整指南_主从复制mysql

PostgreSQL主从复制(StreamingReplication)完整指南PostgreSQL主从复制是一种实时同步数据的机制,可以实现高可用性(HA)、读写分离和负载均衡。其...

PostgreSQL监控神器,千万注意这5大关键指标!

PostgreSQL监控神器,千万注意这5大关键指标!在当今数据驱动的业务环境中,数据库的性能和稳定性直接关系到企业的运营效率与用户体验。PostgreSQL作为一款功能强大的开源关系型数据库,被广泛...

Retool 如何升级主应用 4TB 的 PostgreSQL 数据库

本文最初发布于Retool官方博客。...

PostgreSQL查询计划_postgresql查询计划中的cost组成

深入解析PostgreSQL查询计划:优化性能的关键在数据库管理系统中,查询计划是执行SQL查询时的关键组成部分。PostgreSQL作为一款功能强大的开源关系型数据库,其查询计划的生成与优化对于提升...

第 27 章:数据库与表结构实现 - PostgreSQL入门

在上一章,我们已经绘制好了博客系统的宏伟蓝图。现在,是时候戴上安全帽,化身“建筑工程师”,将图纸上的设计一砖一瓦地搭建成真实的数据库结构了。...

谁帮我看看,为啥我的PostgreSQL查询速度这么慢???

...

PostgreSQL事务处理_postgresql时区问题

PostgreSQL事务处理:原理、应用与优化引言...

第 14 章:集合运算 (UNION, INTERSECT, EXCEPT) - PostgreSQL入门

在之前的章节里,我们所有的操作(JOIN...

PostgreSQL 安装指南及日常使用_postgresql 11安装

PostgreSQL安装与日常使用PostgreSQL是一款功能强大、开源的对象关系型数据库,支持高级SQL标准、扩展功能、事务完整性和高并发。本指南涵盖安装、配置、日常使用、性能优化、常见...

第 23 章:函数与存储过程 (PL/pgSQL) - PostgreSQL入门

到目前为止,我们与数据库的交互方式都是从外部客户端(如psql...

PostgreSQL是不是你的下一个JSON数据库?

根据Betteridge定律(任何头条的设问句可以用一个词来回答:不是),除非你的JSON数据很少修改,并且查询很多。最新版的PostgreSQL添加更多对JSON的支持,我们曾经问过PostgreS...

&quot;揭秘PostgreSQL:你必须掌握的数据类型全解析!&quot;

揭秘PostgreSQL:你必须掌握的数据类型全解析!在数据库管理系统中,PostgreSQL以其强大的功能和稳定性而著称。为了充分发挥其性能,理解并熟练掌握其数据类型是至关重要的。本文将深入探讨Po...