【发布时间】:2018-12-28 06:47:44
【问题描述】:
我有一个 hive 外部表,它在源系统上分区,这意味着数据将来自多个源系统。 数据目录结构为:
/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystem1
/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystem2
/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystem3
...
/app/hadoop/MyProject/SchemaName/TableName/PartitionColumn=SoruceSystemN
并且所有进入SourceSystem文件夹的数据都是流数据,所以我们在每个源系统下得到了很多文件:)。
我正在考虑每天合并一次所有这些文件,例如:SourceSystem1 中的所有文件都将被合并,合并后的文件保留在 SoruceSystem1 文件夹中等等。
通常:
alter table schema.table PARTITION(PartitionColumn={SourceSystemName}) CONCATENATE; 在只有一个文件夹的情况下效果很好,但我需要一次性对所有文件夹进行操作。
解决方法是编写一个 shell 脚本 循环遍历所有分区,然后为每个源系统名称重复此语句,但我正在寻找开箱即用的方法来解决这个问题用例。
非常感谢这里的任何帮助。
【问题讨论】:
-
你需要写这样一个shell脚本(用hdfs dfs -ls 获取分区,而不是用Hive describe)
标签: bash hadoop hive hdfs bigdata