当前位置: 首页 > news >正文

面试提问:如何判断 Hive 表是内部表还是外部表?

此问题原本属于基础问题,但是偶尔被问到,求职者如果没有去准备,会很懵逼,在 Hive 中,可以通过以下方法判断表是内部表(Managed Table)还是外部表(External Table)


内部表(Managed Table):Hive 完全管理表的数据及元数据。当删除内部表时,Hive 会删除元数据和存储在 Hive 仓库中的数据文件。

外部表(External Table):Hive 仅管理表的元数据,数据文件由用户自行管理。当删除外部表时,Hive 只删除元数据,不会删除数据文件。

了解表的类型对于数据的生命周期管理非常重要,特别是在删除表时,可能会影响到数据的存储。

方法 1:使用 SHOW CREATE TABLE 命令

直接查看表的创建语句,若包含 EXTERNAL 关键字则为外部表,否则为内部表。

SHOW CREATE TABLE employee;

• 内部表示例输出:

  CREATE TABLE `employee`(...)

• 外部表示例输出:

  CREATE EXTERNAL TABLE `employee`(...)

方法 2:使用 DESCRIBE EXTENDED 或 DESCRIBE FORMATTED

通过查看表的元数据中的 Table Type 字段:

DESCRIBE FORMATTED your_table_name;
-- 或
DESCRIBE EXTENDED your_table_name;

在输出结果中查找以下字段:• 内部表Table Type: MANAGED_TABLE• 外部表Table Type: EXTERNAL_TABLE

输出示例

# Detailed Table Information
Database:               example_db
Owner:                  user_name
CreateTime:             Tue Oct 10 10:00:00 CST 2023
Table Type:             MANAGED_TABLE
...

方法 3:直接查询 Hive 元数据库

如果熟悉 Hive 元数据库(如 MySQL),可以直接查询 TBLS 表和 TABLE_PARAMS 表:

SELECT
  t.TBL_NAME,
  p.PARAM_KEY,
  p.PARAM_VALUE
FROM
  TBLS t
LEFT JOIN TABLE_PARAMS p ON t.TBL_ID = p.TBL_ID
WHERE
  t.TBL_NAME = 'your_table_name'
  AND p.PARAM_KEY = 'EXTERNAL';

• 如果 PARAM_VALUE 为 TRUE,则是外部表。• 如果不存在该记录或值为 FALSE,则是内部表。

查询结果示例

+------------+------------+-------------+
| TBL_NAME   | PARAM_KEY  | PARAM_VALUE |
+------------+------------+-------------+
| sales      | EXTERNAL   | TRUE        |  <-- 外部表
+------------+------------+-------------+

或内部表结果

+------------+------------+-------------+
| TBL_NAME   | PARAM_KEY  | PARAM_VALUE |
+------------+------------+-------------+
| employee   | EXTERNAL   | FALSE       |  <-- 内部表
+------------+------------+-------------+

注意:如果查询结果为 NULL 或无记录,默认视为内部表。


方法 4:查看表的属性 (TBLPROPERTIES)

某些情况下,表的属性中会明确标记是否为外部表:

DESCRIBE EXTENDED ages;

1.查看 Table Parameters

  • 查找输出中的 table parameters 部分。

  • 如果存在 'EXTERNAL'='TRUE',则为外部表

  • 如果不存在该参数或为 'EXTERNAL'='FALSE',则为内部表

#,col_name,data_type
4,Detailed Table Information,"Table(tableName:ages, dbName:16_test, owner:root, createTime:1735192899, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:tens, type:int, comment:null), FieldSchema(name:ones, type:int, comment:null)], location:hdfs://hcss-ecs-537b:9000/user/hive/warehouse/16_test.db/ages, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1735192899, bucketing_version=2}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE, rewriteEnabled:false, catName:hive, ownerType:USER)"

2.查看 Location 信息:

内部表:数据通常存储在 Hive 的默认仓库目录,例如:

hdfs://namenode:8020/user/hive/warehouse/test.db/test_table

外部表:数据存储在用户指定的 HDFS 路径,可能不在默认仓库目录下,例如:

hdfs://namenode:8020/data/external/test_table

关键区别总结

特征内部表 (Managed Table)外部表 (External Table)
数据生命周期删除表时,数据会被删除删除表时,数据保留在 HDFS
创建语法CREATE TABLE ...CREATE EXTERNAL TABLE ...
元数据标记Table Type: MANAGED_TABLETable Type: EXTERNAL_TABLE

注意事项

  1. 如果表是通过早期 Hive 版本创建的,可能需要手动检查元数据。

  2. 确保对表有足够的权限执行元数据查询操作。

通过这些方法,可以快速确定 Hive 表的类型,避免误删数据或混淆存储位置。


会飞的一十六

一个专注大于大数据、数据库、数据分析、相关领域的公众号,分享技术干货、学习资料、面试、职场经验和个人思考感悟,更重要的是让SQLBOY的SQL有质的飞越。

面试提问:数仓设计不分层可以吗?

从O(n²)到O(n):基于累计求和模型的线性递归模式优化与多场景实战

基于增量滚动计算策略的数仓累计计算指标的优化实战

Hive正则表达式基础用法与应用

千亿级表中收入中位数如何利用Hive SQL优化?

宽表指标合并踩坑:UNION ALL和LEFT JOIN到底怎么选?

如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。

专栏 原价99,现在活动价59.9,按照阶梯式增长,还差5个人上升到69.9,最终恢复到原价。

专栏优势:
(1)一次收费持续更新。

(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特】

SQL很简单,可你却写不好?每天一点点,收获不止一点点-CSDN博客

(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的)

(4)数字化建设当中遇到难题解决思路及问题思考。

我的专栏具体链接如下:

 数字化建设通关指南_莫叫石榴姐的博客-CSDN博客 

相关文章:

  • MySQL 入门大全:运算符
  • 基于Selenium Grid的分布式测试架构设计与深度实践
  • springboot444-基于Vue的网络小说交流平台(源码+数据库+纯前后端分离+部署讲解等)
  • 【初学者】请介绍一下线性与非线性的区别?
  • Unity—从入门到精通(第一天)
  • 详细解析格式化消息框的代码
  • defineAsyncComponent和一般的import有什么区别
  • 微前端 qiankun vite vue3
  • cmake 之 CMakeLists.txt 中的函数是从哪里来的
  • C#基于MVC模式实现TCP三次握手,附带简易日志管理模块
  • Spring配置文件-Bean实例化三种方式
  • 神经网络中层与层之间的关联
  • Kafka-QA
  • FPGA——实现LED流水灯
  • 【二分查找】搜索插入位置 x的平方根
  • 正则表达式引擎深入探讨
  • Windows:安装Imagemagick进行Cityscapes的图像压缩
  • Python:新式类写法,多继承
  • Mac:JMeter 下载+安装+环境配置(图文详细讲解)
  • Spring学习
  • 独家 |《苏州河》上海上演,编剧海飞:上海的风能吹透我
  • 会谈时间迟迟未定、核心议题存在分歧,俄乌“土耳其谈判”一波三折
  • 鄂州交警通报致1死2伤车祸:女子操作不当引发,已被刑拘
  • 被前男友泼汽油致残后,一个女孩经历的双重灼烧
  • 首次采用“顶置主星+侧挂从星”布局,长二丁“1箭12星”发射成功
  • 上海杨浦:鼓励龙头企业与高校共建创新联合体,最高支持200万元