我将数据存储在HDFS中作为具有多行的文本文件。每行都有几条记录 可以组织为列。例如,线条如下所示
Columns A B C D E F G 9/05/2014 14:17 312118 235 44 111 100 ... 9/05/2014 14:27 312118 255 48 111 103
我可以创建一个架构并轻松地在Hive中加载所有这些行,但我真正想要的是 根据列" D"将它们聚集成小集合。值。我想要的是分区我的数据 一种方式,所有记录的值D = 235和所有记录在此行之后,直到我 找到D值等于255的行,成为一个单独的分区。
只是为了进一步澄清我需要解决的问题。考虑一下这个案子 textfile有以下记录:
Columns A B C D E F G 9/05/2014 14:17 312118 235 44 111 100 9/05/2014 14:18 312118 200 44 111 100 9/05/2014 14:19 312118 200 44 111 100 9/05/2014 14:20 312118 201 44 111 100 ... (several more records) 9/05/2014 14:27 312118 255 48 111 103 9/05/2014 14:28 312118 235 44 111 100 ... (several more records) 9/05/2014 14:58 312118 255 44 111 100
我希望以每个临时表的方式对数据进行分区 将保存一组以D值= 235开头并具有最后一个数据的数据 D值= 255的记录。在上面的例子中,理想情况下应该有2个表 使用以下值创建了temp1和temp2:
Temp1 9/05/2014 14:17 312118 235 44 111 100 9/05/2014 14:18 312118 200 44 111 100 9/05/2014 14:19 312118 200 44 111 100 9/05/2014 14:20 312118 201 44 111 100 ... (several more records) 9/05/2014 14:27 312118 255 48 111 103 Temp2 9/05/2014 14:28 312118 235 44 111 100 ... (several more records) 9/05/2014 14:58 312118 255 44 111 100
我可以使用HiveQL做到这一点,还是有另一种方法来实现这个ETL过程?
答案 0 :(得分:0)
假设数据位于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
的记录将放入该分区。
答案 1 :(得分:0)
你需要在你的分区中提到D列。具有不同D值的所有数据都将存储在文件中。
HDFS中的文件类似于/ hdfspath> / D = 235,/ hdfspath> / D = 255
希望这就是你要找的东西