gpt4 book ai didi

hadoop - Hive ETL-基于记录模式的分区数据

转载 作者:行者123 更新时间:2023-12-02 21:46:00 24 4
gpt4 key购买 nike

我将数据存储为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值的记录都将放置在该分区中。

关于hadoop - Hive ETL-基于记录模式的分区数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com