我将数据存储为HDFS中的多行文本文件。每行都有几条记录
可以组织为列。例如,行看起来像下面的行

列A B C D E F G
2014年9月5日14:17 312118 235 44 111100
...
2014年9月5日14:27 312118 255 48111103

我可以创建一个架构并轻松地将所有这些行加载到Hive中,但是我真正想要的是
根据“D”列的值将它们分为几组。我想要的是将数据分区到
一种方法,所有值D = 235的记录和所有遵循此行的记录,直到i
找到D值等于255的行以成为单独的分区。

只是为了进一步阐明我需要解决的问题。考虑一下情况
文本文件具有以下记录:

列A B C D E F G
2014年9月5日14:17 312118 235 44 111100
2014年9月5日14:18 312118 200 44 111100
2014年9月5日14:19 312118 200 44 111100
2014年9月5日14:20 312118 201 44111100
...(多条记录)
2014年9月5日14:27 312118 255 48111103
2014年9月5日14:28 312118 235 44 111100
...(多条记录)
2014年9月5日14:58 312118 255 44111100

我想对数据进行分区,以使每个临时表
将保存以D值= 235开头的一组数据,并具有最后一个
D值= 255的记录。在上面的示例中,理想情况下应该有2个表
使用以下值创建了temp1和temp2:

温度1
2014年9月5日14:17 312118 235 44 111100
2014年9月5日14:18 312118 200 44 111100
2014年9月5日14:19 312118 200 44 111100
2014年9月5日14:20 312118 201 44111100
...(多条记录)
2014年9月5日14:27 312118 255 48111103

温度2
2014年9月5日14:28 312118 235 44 111100
...(多条记录)
2014年9月5日14:58 312118 255 44111100

我可以使用HiveQL做到这一点,还是有另一种方法可以实现此ETL过程?

最佳答案

假设数据在Hive表中(您说您已经可以做到),则少称它为t1
创建一个新的分区表,例如:create table temp (a string,b string,c string,e string,f string,g string) partitioned by (d string)
然后以以下方式简单地将记录从t1插入temp:
insert overwrite table temp partition (d)select a,b,c,e,f,g,d from t1
而已。
对于d的每个新值,将在temp中创建一个分区,所有具有相同d值的记录都将放置在该分区中。

10-07 18:56