1. 题目说明
设计题:MySQL数据库A有1000w条数据,完成统计再输入到另外的B表中
A表
test1 0.2,3.5,1,1
test1 1.2,2.3,4.56
test2 2.1,0.3,9.2,3.5,2.4
test3 2.1,4.5,3.4,7.65
test4 1.2,3.4,54,32.1,12.3
test5 12.1,12.3
test5 12.34
test5 0.01,0.02
test6 2.3,45.3,23.21
test6 23.4,23,22.12
B表
test1 0.2 4.56
test2 0.3 9.2
test3 2.1 7.65
test4 1.2 54.0
test5 0.01 12.34
test6 2.3 45.3
2. 实现过程
不使用常规方式实现,这里讨论使用大数据分析工具完成。
(1)首先需要使用Sqoop将数据到HDFS上,分隔符为制表符
(2)常见Hive表
hive (default)> create table mydb(name string,num array<double>)
> row format delimited fields terminated by ' '
> collection items terminated by ',';
(3)导入数据(这里使用本地测试文件)
hive (default)> load data local inpath '/home/fanl/data/mydb' into table mydb;
(3)查询表信息
(4)因为Hive的数组类型字段,可以用sort_array对每一行数据进行排序
hive (default)> select name,sort_array(num) from mydb;
这里每一行的最大值和最小值已经看到了,最小值为num[0],最小值为num[长度-1],数组字段的长度函数是size(num)
(5)综合起来,并且按name分组
hive (default)> select s.name,min(s.min) as min,max(s.max) as max
> from(select t.name,t.num[0] as min,t.num[size(num)-1] as max
> from (select name,sort_array(num) as num from mydb) t)s
> group by s.name;
---------------------
作者:樊领
来源:CSDN
原文:https://blog.csdn.net/qq_15973399/article/details/89963854
版权声明:本文为博主原创文章,转载请附上博文链接!