Hive学习(一)group by 报错
先创建表格
CREATE TABLE dm_order_2018(
id string COMMENT '订单id',
order_money double COMMENT '订单金额',
member_id int COMMENT '会员id',
create_time timestamp COMMENT '创建时间',
status int COMMENT '订单状态'
)
ROW format delimited fields terminated by '\t';
从本地导入数据
A001 100.15 1 2018-01-01 13:23:12 2
A023 100.15 1 2018-01-01 15:23:12 2
A002 100 2 2018-04-01 14:23:12 2
A003 12.1 3 2018-01-01 13:23:12 2
A004 200.15 4 2018-01-01 13:23:12 2
A005 1200.15 5 2018-01-01 13:23:12 2
A006 0.15 11 2018-01-01 17:23:12 2
A007 1215.1 31 2018-01-01 10:23:12 2
A008 100.75 15 2018-01-01 14:23:12 2
A009 100.15 8 2018-01-01 15:23:12 2
A010 20.15 9 2018-01-01 16:23:12 2
A011 110.15 21 2018-01-01 14:23:12 2
A012 1.15 13 2018-01-01 13:03:12 2
A013 20.15 14 2018-02-01 13:53:12 2
A014 30.15 15 2018-03-01 13:23:12 2
A015 40.5 13 2018-01-01 13:23:12 2
A016 65 1 2017-01-01 13:23:12 2
A017 78.15 1 2017-03-01 09:23:12 1
A018 88.15 1 2017-11-01 20:23:12 2
A019 99 12 2018-02-11 13:23:12 1
A020 10.3 13 2018-04-01 13:23:12 2
A021 600 5 2018-11-01 08:58:31 2
A022 500 31 2018-11-11 08:59:02 2
路径是存放数据的位置
Load data local inpath '/home/hadoop/input/order_2018_data.txt' into table dm_order_2018 partition(dt='2019-01-01');
查找下
练习一:
按用户id分组,消费金额进行降序排序。
最开始用mysql的语句
select * from dm_order_2018
group by member_id
order by order_memoy desc;
报错:
原因:
group by字句中,select查询的列,要么需要时group by中的列,要么得是聚合函数(sum,count)。不支持直接引用非group by的列。**这点和mysql有区别**。
解决:使用窗口函数
select * from
(select id, order_money, member_id, create_time,
row_number() over(partition by member_id order by order_money desc)as row_num
from dm_order_2018
)t;
查询结果
collect_set()函数
select collect_set(id) from dm_order_2018 group by member_id;