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事务处理:原理、应用与优化引言...
- 第 14 章:集合运算 (UNION, INTERSECT, EXCEPT) - PostgreSQL入门
-
在之前的章节里,我们所有的操作(JOIN...
- PostgreSQL 安装指南及日常使用_postgresql 11安装
-
PostgreSQL安装与日常使用PostgreSQL是一款功能强大、开源的对象关系型数据库,支持高级SQL标准、扩展功能、事务完整性和高并发。本指南涵盖安装、配置、日常使用、性能优化、常见...
- 第 23 章:函数与存储过程 (PL/pgSQL) - PostgreSQL入门
-
到目前为止,我们与数据库的交互方式都是从外部客户端(如psql...
- PostgreSQL是不是你的下一个JSON数据库?
-
根据Betteridge定律(任何头条的设问句可以用一个词来回答:不是),除非你的JSON数据很少修改,并且查询很多。最新版的PostgreSQL添加更多对JSON的支持,我们曾经问过PostgreS...
- "揭秘PostgreSQL:你必须掌握的数据类型全解析!"
-
揭秘PostgreSQL:你必须掌握的数据类型全解析!在数据库管理系统中,PostgreSQL以其强大的功能和稳定性而著称。为了充分发挥其性能,理解并熟练掌握其数据类型是至关重要的。本文将深入探讨Po...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
redission YYDS spring boot redission 使用
-
SparkSQL——DataFrame的创建与使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
-
- 第 28 章:核心功能 SQL 查询 - PostgreSQL入门
- postgresql的6种索引介绍_postgresql默认用户名和密码
- 第 20 章:索引与性能优化 - PostgreSQL入门
- PostgreSQL 主从复制 完整指南_主从复制mysql
- PostgreSQL监控神器,千万注意这5大关键指标!
- Retool 如何升级主应用 4TB 的 PostgreSQL 数据库
- PostgreSQL查询计划_postgresql查询计划中的cost组成
- 第 27 章:数据库与表结构实现 - PostgreSQL入门
- 谁帮我看看,为啥我的PostgreSQL查询速度这么慢???
- PostgreSQL事务处理_postgresql时区问题
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)