这是我使用Hive和HDFS的第一周,所以请多多包涵。
到目前为止,我看到的几乎所有合并多个ORC文件的方式都建议将ALTER TABLE
与CONCATENATE
命令一起使用。
但是我需要合并同一表的多个ORC文件,而不必ALTER
表。另一种选择是创建现有表的副本,然后在其上使用ALTER TABLE
,以使原始表保持不变。但是由于空间和数据冗余的原因,我也无法做到这一点。
我想要实现的目标(理想情况下)是:我需要将这些ORC作为每个表的一个文件传输到云环境中。那么,有没有一种方法可以在传输过程中将移动的ORC合并到云中?是否可以在有/没有Hive
的情况下(也许直接在HDFS
中实现)?
答案 0 :(得分:1)
ALTER TABLE CONCATENATE
以外的两种可能的方法:
尝试配置合并任务,请在此处查看详细信息:https://stackoverflow.com/a/45266244/2700344
或者,您可以强制使用单个减速器。此方法非常适用于不太大的文件。您可以使用ORDER BY覆盖同一表,这将在最后一个ORDER BY阶段强制使用单个化简器。对于大文件,这将工作缓慢甚至失败,因为所有数据都将通过单个reducer传递:
INSERT OVERWRITE TABLE
SELECT * FROM TABLE
ORDER BY some_col; --this will force single reducer
作为副作用,您将获得打包更好的ORC文件,并在按by列出的列上具有高效索引。