繁体   English   中英

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

[英]how to merge data while loading them into hive?

我想使用配置单元来分析我们的日志,我有一个问题。

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

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

步骤1:为输入数据集创建一个Hive表。 如果table1不存在,则创建表table1(fld1字符串,fld2字符串)行格式分隔字段,以'\\ t'终止; (我假设字段分隔符为\\ t,可以将其替换为实际的分隔符)

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

创建表table2作为由fld1,fld2从table1组选择的fld1,fld2;

我尝试了以下输入集

配置单元(默认)>从表1中选择*;

A 1

A 1

A 1

B 1

C 1

B 1

从table1组中通过fld1,fld2创建表table4作为select fld1,fld2;

蜂巢(默认)>从表4中选择*;

A 1

B 1

C 1

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

一个想法..您可以围绕第一个文件创建一个表(称为“旧表”)。

然后运行这样的命令。...创建表newtable,从fieldtable中按field1选择field1,max(field);

不确定我的语法是否正确,但是这个主意是获取第一个字段的唯一值,而仅获取第二个字段的唯一值。 说得通?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM