[英]How to merge small files created by hive while inserting data into buckets?
[英]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.