如何在将数据加载到配置单元时合并数据?

时间:2011-12-01 06:56:48

标签: hadoop hive

我想用hive来分析我们的日志,我有一个问题。

假设我们有一些这样的数据:
A 1
A 1
A 1
B 1
C 1
B 1
我怎么能在蜂巢表中这样做(顺序不重要,我只想合并它们)? A 1
B 1
C 1

没有使用awk / sed或类似的东西进行预处理?
谢谢!

4 个答案:

答案 0 :(得分:3)

步骤1:为输入数据集创建Hive表。 create table if if not exists table1(fld1 string,fld2 string)ROW FORMAT DELIMITED FIELDS终止'\ t'; (我假设字段分隔符为\ t,您可以用实际分隔符替换它)

第2步:在下面运行以获取您要查找的合并数据

创建表table2为select fld1,fld2来自table1 group by fld1,fld2;

我在下面的输入集

尝试了这个

hive(默认)> select * from table1; 行

A 1

A 1

A 1

B 1

C 1

B 1

创建表table4为select fld1,fld2来自table1 group by fld1,fld2;

hive(默认)> select * from table4; 行

A 1

B 1

C 1

您也可以使用外部表,但为了简单起见,我在这里使用了托管表。

答案 1 :(得分:2)

一个想法......你可以在第一个文件周围创建一个表(称为“oldtable”)。

然后运行这样的东西.... create table newtable select field1,max(field)from oldtable group by field1;

不确定我的语法是否正确,但我们的想法是获取第一个字段的唯一值,而只获取第二个字段中的一个。有意义吗?

答案 2 :(得分:0)

对于合并数据,我们也可以使用“UNION ALL”,它也可以合并两种不同类型的数据类型。

将覆盖插入表test1 (从t1 x中选择x。*) UNION ALL (从t2 y选择y。*);

这里我们将两个表数据(t1和t2)合并为一个表test1。

答案 3 :(得分:0)

在不使用外部程序的情况下加载数据时无法预处理数据。如果您想保持原始数据不变,可以使用视图。

hive> SELECT * FROM table1;
OK
A       1
A       1
A       1
B       1
C       1
B       1
B       2 # Added to show it will group correctly with different values

hive> CREATE VIEW table2 (fld1, fld2) AS SELECT fld1, fld2 FROM table1 GROUP BY fld1, fld2;
hive> SELECT * FROM table2;
OK
A       1
B       1
B       2
C       1