hive:如果我手动将数据文件复制到表的location文件夹中会发生什么?

nnsrf1az  于 2021-06-27  发布在  Hive
关注(0)|答案(3)|浏览(377)

我尝试过将数据文件复制到表的location文件夹中(而不是使用load命令),它的工作原理是我可以查询新数据。但是,我看到的所有源代码都将始终使用load命令来实现这一点;他们从不谈论将数据文件直接复制到位置文件夹。我的印象是,直接将文件复制到位置文件夹不是一个好主意,但我看不到任何解释,为什么这是一个坏主意。
有人知道为什么不应将数据文件直接复制到表的位置文件夹吗?

7bsow1i6

7bsow1i61#

您可以将数据直接复制到表位置,它将反映到查询中。但是,如果表是分区表,并且文件包含多个分区的数据,那么仅复制文件对您没有帮助,在这种情况下,您必须使用load命令加载数据。
如果您的文件包含单个分区的数据,您可以将该文件复制到该特定分区并对表进行msck修复,这将更新表的元数据,结果将反映到您的查询中。

zmeyuzjn

zmeyuzjn2#

在配置单元3.0版之前的版本中,加载操作是纯复制/移动操作,将数据文件移动到与配置单元表/分区对应的位置。
当配置单元在内部将加载重写为insert as select时,配置单元3.0以后的版本支持其他加载操作。在hive3.0以后的版本中,load命令还负责分区和存储桶。
有关更多详细信息,请参阅文档:将文件加载到表中。

mnemlml8

mnemlml83#

这个问题的答案将取决于表是配置单元管理的表还是外部表。
一般来说,外部表是不分块的,也就是说,它们是由一些外部进程管理的。在这种情况下,只要有数据控制机制,就可以将文件放在那里。
不过,配置单元管理的表是另一回事。hive通过将文件拆分为文件夹(和子文件夹)来管理分区。通过将密钥散列到不同的文件中来管理bucket。在这些情况下,如果您自己将文件放入这些文件夹中,可能会得到不可预知的结果或错误。
在事务表需要压缩的情况下(在hive2.0需要压缩之前),这变得更加复杂

相关问题