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

面试提问:如何判断 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博客 


http://www.kler.cn/a/592697.html

相关文章:

  • 【Go每日一练】猜数字游戏
  • 2025年图生视频模型技术全景解析
  • 通过浏览器扩展获取本机 MAC 地址
  • 设计模式之代理模式:原理、实现与应用
  • python中测试数据管理整理
  • linux sh脚本关于返回字符串调试问题(adb shell)
  • Winform优化控件布局性能 SuspendLayout 和 ResumeLayout 方法详解
  • 游戏引擎学习第164天
  • openEuler24.03 LTS下安装Hadoop3完全分布式
  • Java并发(知识整理)
  • JS做贪吃蛇小游戏(源码)
  • uni-app——计时器和界面交互API
  • 【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇
  • 人工智能中神经网络是如何进行预测的
  • 涨薪技术|Kubernetes(k8s)之yaml语法大全
  • AI实干家:HK深度体验-【第3篇-香港、新加坡、深圳、上海、首尔五座城市在金融数据维度的对比分析】
  • 31天Python入门——第5天:循环那些事儿
  • 【Go每日一练】随机密码生成器
  • 大语言模型黑盒越狱攻击之模板补全
  • Android retrofit 接口请求,提示CLEARTEXT communication处理