hadoop - 无法理解蜂巢中外部关键字的意义
问题描述
我有几个疑问需要澄清:
- 如果我创建一个没有“外部”关键字的表,但指定了“位置”,它将是配置单元中的外部表还是内部表?
- 如果我使用带有表名的“external”关键字但未指定“位置”,它将被保存到默认存储的配置单元/仓库位置。在这种情况下,它会是一个外部表吗?
总的来说,我想了解是什么使表格成为外部的,关键字“外部”或指定“位置”。任何帮助将不胜感激。
解决方案
如果我创建一个没有“外部”关键字的表,但指定了“位置”,它将是配置单元中的外部表还是内部表?
它将是 MANAGED 表(EXTERNAL=False)。您可以使用DESCRIBE FORMATTED tablename;
如果我使用带有表名的“external”关键字但未指定“位置”,它将被保存到默认存储的配置单元/仓库位置。在这种情况下,它会是一个外部表吗?
是的,它将是 EXTERNAL 表。
是什么使表格成为外部的,关键字“外部”或指定“位置”
只有 CREATE TABLE 中的 EXTERNAL 属性/关键字才能生成 EXTERNAL TABLE,而不是位置。EXTERNAL 表属性最初与位置无关。EXTERNAL 与否 EXTERNAL(MANAGED) 定义了 DROP TABLE 的行为方式:对于 EXTERNAL 表 DROP TABLE 不会删除表位置,只会删除表元数据。对于托管表 DROP TABLE 将删除它的位置以及所有数据文件和元数据。托管表和外部表支持的功能也存在差异
在早期版本的 Hive 中,托管表或外部表的位置没有限制,并且可以在 hive.metastore.warehouse.dir 之外创建 MANAGED 表。如果未指定 LOCATION,hive 将为托管表和外部表使用 hive.metastore.warehouse.dir 的值。您可以在同一位置创建托管表和外部表:https ://stackoverflow.com/a/54038932/2700344 。
另请参阅https://stackoverflow.com/a/56957960/2700344和https://stackoverflow.com/a/67073849/2700344
推荐阅读
- spring-boot - nodeBuilder() 已被 Elasticsearch 删除,但 spring-data-elasticsearch 文档仍然包含使用 nodeBuilder() 的配置
- python - 如何在 Python 中使用 cv::RotatedRect
- c++ - 如何从另一个类按钮更改 CurrentIndex
- python - 如何在 AngularJS 应用程序中定位元素?
- java - 每当我调用“InsertionSort”方法时,输出文件显示为空?我应该在哪里调用这个方法?
- sql - 如何在此代码中正确使用 Export-Csv
- mysql - 地址簿:将“至少一个列表就够了”查询转换为“所有列表都需要存在”
- azure-devops - Azure DevOps:如何维护多个租户
- ios - 所需的请求部分“有效负载”不存在 Swift
- angular7 - 如何解决“不推荐使用宽度属性,使用样式定义对话框的宽度。” 警告