我是新来的Hive,也在网上看到了它。但仍然有疑问,这是没有清除。
- 对于配置单元外部表,配置单元
keep table's metadata within HDFS, but not in its warehouse which is also in HDFS
。正确吗? - 无论是内部表还是外部表,在这两种情况下,
data of table
都只能在HDFS中使用,而NOWHERE
只能在其他情况下使用。也就是说,数据可以从任何地方获取,但必须加载到HDFS中,因为HIVE使用Hadoop的处理引擎来处理数据。对吗? - 内部表
table's metadata and table's data
都将在HIVE数据仓库中可用,且此数据仓库将只在HDFS中,而不在其他位置。对吗? - 在外部表中,
table's metadata and table's data
和NOT
在HIVE的数据仓库中可用,但在HDFS中可用。但hive必须保留一些信息,即表的元数据位于何处,其数据位于HDFS中的何处,对吗?
任何人都可以分享对上述理解的反馈吗?
谢谢
2条答案
按热度按时间gblwokeq1#
配置单元使用
MySQL
、MariaDB
、PostgreSQL
、Oracle
、DerbyDB
等关系数据库(仅适用于嵌入式部署)来存储元数据(数据库、表定义、统计信息、赠款等)。请参阅部署模式和database requirements。无论是内部表还是外部表,元数据都存储在关系数据库中。是的,数据存储在HDFS中,但Hive也支持使用JDBC storage handler与外部数据库集成。此类表看起来像普通Hive表,但数据存储在某个数据库中,您的查询在数据库中执行, predicate 下推工作正常,您可以在单个查询中使用hive原生表和存储处理程序表。此外,HBase storage handler、Kafka storage handler等也可用。您可以编写自己存储处理程序。
取决于您的配置单元版本/供应商It is possible to create many tables (both managed and external at the same time) on top of the same location in HDFS。虽然Cloudera更喜欢将托管表放在专用的HDFS位置,但请参阅https://stackoverflow.com/a/67073849/2700344,并且默认情况下不允许为仓库根目录之外的托管表指定位置。阅读托管表和外部表here之间的区别。
mccptt672#
除了最后一个,其他的一切都是正确的。当你创建外部表时,表元数据将存储在配置单元中,否则你无法通过配置单元进行查询。当你创建外部表时,HDFS本身会控制你的数据。而当你创建内部表时,配置单元将负责。删除内部表会删除你的数据和元数据,但删除外部表只会删除配置单元中的元数据。但是您的数据将保留在您的文件系统中。这就是为什么当我们的一些外部连接与我们的hive版本不兼容时,我们会改变很多表类型作为一种变通办法。