我正在努力找到在hive和hdfs中实现以下管道的最佳方法:
我想摄取一个csv(到目前为止没有问题),但是,我想分区是从一个字段来通知到csv文件。
我创建了一个外部表,将文件存放在hdfs上,并定义了partition字段,但是通过一个简单的put(这很有意义),分区没有生成,并且在尝试删除msck修复表时得到了退出代码1。
我想知道以下是否可行:
将csv文件加载到内部配置单元表中并作为临时表。
在“正式”表中插入分区
这是一个有效的方法吗?如果是这样的话,我还没有找到很多关于如何做第一个的信息。
谢谢。
1条答案
按热度按时间xmd2e60i1#
如果每个文件只有一个分区,那么可以使用
最坏的情况是,如果每个文件有多个分区,则需要首先加载到中间表中,然后使用insert overwrite select重新分区数据:
并且您需要一次加载(覆盖)所有的分区数据,如果不可能,那么选择应该用增量加载合并目标分区中已经存在的数据。
有关如何合并增量更新,请参阅此答案。
也
INSERT (NOT OVERWRITE) INTO table (partition) select ...
是插入增量数据的可能解决方案。此语句应将数据加载到分区文件夹中的其他文件中,现有数据将保持原样。