Hive:如果我手动将数据文件复制到 Table 的位置文件夹会怎样?
Hive: What Happens if I Manually Copy Data Files into Location Folder of a Table?
我试过将数据文件复制到 table 的位置文件夹中(而不是使用加载命令),并且它在我可以查询新数据的意义上起作用。但是,我看到的所有来源都将始终使用 load 命令来执行此操作;他们从不谈论将数据文件直接复制到位置文件夹。我的印象是将文件直接复制到位置文件夹不是一个好主意,但我看不到任何关于为什么这是一个坏主意的解释。
有谁知道为什么数据文件不应该直接复制到table的位置文件夹?
您可以将数据直接复制到 table 位置,它会反映到查询中。但是如果 table 是分区的 table 并且如果文件包含多个分区的数据那么仅仅复制文件对你没有帮助,在这种情况下你必须使用加载命令加载数据.
如果您的文件包含单个分区的数据,您可以将该文件复制到该特定分区并对 table 执行 msck 修复,这将更新 table 的元数据并且结果将反映根据您的查询。
这个问题的答案取决于 table 是 Hive 管理的 Table 还是外部的 Table。
一般而言,外部 Table 不会分桶或分区,即它们由某些外部进程管理。在那种情况下,只要您有数据控制机制,将文件放在那里应该是完全没问题的。
Hive Managed Table 是另一回事。 Hive 通过将文件拆分为文件夹(和子文件夹)来管理分区。通过将密钥散列到不同的文件中来管理存储桶。在这些情况下,如果您将自己的文件放入这些文件夹中,您可能会得到意想不到的table 结果或错误。
这在需要压缩的事务 table 的情况下变得更加复杂(并且直到 Hive 2.0 需要存储)
在 Hive 之前的版本 3.0 中,加载操作是纯粹的 copy/move 操作,将数据文件移动到对应于 Hive tables/partitions.
的位置
Hive 3.0 及更高版本支持额外的加载操作,因为 Hive 在内部将加载重写为 INSERT AS SELECT。从 Hive 3.0 开始,LOAD 命令也关注分区和桶。
有关详细信息,请参阅文档:Loading Files into tables。
我试过将数据文件复制到 table 的位置文件夹中(而不是使用加载命令),并且它在我可以查询新数据的意义上起作用。但是,我看到的所有来源都将始终使用 load 命令来执行此操作;他们从不谈论将数据文件直接复制到位置文件夹。我的印象是将文件直接复制到位置文件夹不是一个好主意,但我看不到任何关于为什么这是一个坏主意的解释。
有谁知道为什么数据文件不应该直接复制到table的位置文件夹?
您可以将数据直接复制到 table 位置,它会反映到查询中。但是如果 table 是分区的 table 并且如果文件包含多个分区的数据那么仅仅复制文件对你没有帮助,在这种情况下你必须使用加载命令加载数据.
如果您的文件包含单个分区的数据,您可以将该文件复制到该特定分区并对 table 执行 msck 修复,这将更新 table 的元数据并且结果将反映根据您的查询。
这个问题的答案取决于 table 是 Hive 管理的 Table 还是外部的 Table。
一般而言,外部 Table 不会分桶或分区,即它们由某些外部进程管理。在那种情况下,只要您有数据控制机制,将文件放在那里应该是完全没问题的。
Hive Managed Table 是另一回事。 Hive 通过将文件拆分为文件夹(和子文件夹)来管理分区。通过将密钥散列到不同的文件中来管理存储桶。在这些情况下,如果您将自己的文件放入这些文件夹中,您可能会得到意想不到的table 结果或错误。
这在需要压缩的事务 table 的情况下变得更加复杂(并且直到 Hive 2.0 需要存储)
在 Hive 之前的版本 3.0 中,加载操作是纯粹的 copy/move 操作,将数据文件移动到对应于 Hive tables/partitions.
的位置Hive 3.0 及更高版本支持额外的加载操作,因为 Hive 在内部将加载重写为 INSERT AS SELECT。从 Hive 3.0 开始,LOAD 命令也关注分区和桶。
有关详细信息,请参阅文档:Loading Files into tables。