Hadoop 为什么需要将外部表移动到托管配置单元表?
我是Hadoop和学习Hive的新手 Hadoop定义指南第3版第428页最后一段 我不明白下面关于蜂箱中外部表的段落 常见的模式是使用外部表访问存储在HDFS(由另一个进程创建)中的初始数据集,然后使用配置单元转换将数据移动到托管配置单元表中Hadoop 为什么需要将外部表移动到托管配置单元表?,hadoop,hive,Hadoop,Hive,我是Hadoop和学习Hive的新手 Hadoop定义指南第3版第428页最后一段 我不明白下面关于蜂箱中外部表的段落 常见的模式是使用外部表访问存储在HDFS(由另一个进程创建)中的初始数据集,然后使用配置单元转换将数据移动到托管配置单元表中 有人能简单地解释一下上面这句话是怎么说的吗?书中也提到了这句话 当您的表是外部表时 you can use other technologies like PIG,Cascading or Mapreduce to process it . 您还可以
有人能简单地解释一下上面这句话是怎么说的吗?书中也提到了这句话 当您的表是外部表时
you can use other technologies like PIG,Cascading or Mapreduce to process it .
您还可以对该数据集使用多个模式。
如果数据是外部表,您还可以延迟创建数据。
when you decide that dataset should be used by only Hive,make it hive managed table.
通常,初始数据集中的数据不是以最佳方式构造的,不适合查询。
您可能希望修改数据(如修改某些列、添加列、进行聚合等),并以特定的方式(分区/存储桶/排序等)存储数据,以便查询能够从这些优化中受益 配置单元中外部表和托管表之间的关键区别在于,外部表中的数据不由配置单元管理。 当您创建外部表时,您为该表定义了HDFS目录,而配置单元只是在其中“查看”,可以从中获取数据,但配置单元无法删除或更改该文件夹中的数据。删除外部表时,配置单元仅从其元存储中删除元数据,HDFS中的数据保持不变 托管表基本上是HDFS中的一个目录,由配置单元创建和管理。更重要的是,删除/更改该表中的分区/原始数据/表的所有操作都必须由配置单元完成,否则配置单元元存储中的元数据可能会不正确(例如,您手动从HDFS中删除分区,但配置单元元存储包含分区存在的信息) 在Hadoop定义指南中,我认为作者的意思是,编写生成一些原始数据并将其保存在某个文件夹中的MR作业是一种常见做法。然后创建配置单元外部表,该表将查看该文件夹。然后安全地运行查询,而不存在删除表等风险。 换句话说,您可以执行生成一些通用数据的MR工作,而不是使用配置单元外部表作为插入到托管表中的数据源。它可以帮助您避免创建无聊的类似MR作业,并将此任务委托给配置单元查询—您可以创建从外部表获取数据的查询,按照您的意愿对其进行聚合/处理,并将结果放入托管表中
外部表的另一个目标是用作远程服务器的源数据,例如csv格式。除非要启用ACID或其他,否则没有理由将表移动到托管 托管/外部表支持的功能差异列表将来可能会更改,最好使用当前文档。目前,这些功能包括:
- 存档/取消存档/截断/合并/连接仅适用于托管 桌子
- DROP删除托管表的数据,而只删除 外部元数据
- ACID/Transactional仅适用于 托管表
- 查询结果缓存仅适用于托管 桌子
- 外部表上只允许使用依赖约束
- 某些物化视图功能仅适用于托管表
数据结构与外部/托管表类型没有任何共同之处。如果要更改结构,则不一定需要更改表管理/外部类型明白了。。谢谢迪玛。。你太棒了:)