计算 Hive 中每个组中有多少条目

Posted

技术标签:

【中文标题】计算 Hive 中每个组中有多少条目【英文标题】:Count how many entries were in each group in Hive 【发布时间】:2017-01-25 05:40:39 【问题描述】:

我的数据库如下所示,代表客户在某家商店进行的购买:

Customer ID | Store ID | Date & Time
1 | 1884 | 2016-10-30 13:00:00
5 | 2001 | 2016-10-30 13:00:00

数据集非常大。时间间隔 1 小时。

我需要计算一天中每个小时有多少客户进行了购买。返回的数据应如下所示:

Store ID | Unique Date & Time | Number of purchases 
1884 | 2016-10-30 13:00:00 | 8
1884 | 2016-10-30 14:00:00 | 12

我没有想法,如果能得到任何帮助,我将不胜感激。

【问题讨论】:

【参考方案1】:

选择 id 并将其按小时和日期分组。

SELECT [ Store ID ], count(*)
FROM table1
GROUP BY DATEPART(day, [ Date & Time]), DATEPART(hour, [ Date & Time]);

【讨论】:

【参考方案2】:

我假设这个查询将每小时运行一次,并且生成的数据将附加到现有数据集

以下查询将为您提供客户在 [日期和时间] 在特定商店购买的计数

select [Date and Time],[Store ID],count(customer id) 
from [tablename] group by [Date and Time],[Store ID] 
order by [Date and Time] DESC

如果您想获得每小时所有购买的完整计数,而不考虑商店 ID,那么您可以试试这个:

select [Date and Time],count(customer id) 
from [tablename]  group by [Date and Time] 
order by [Date and Time] DESC

order by desc 用于在顶部获取最新的时间戳结果

【讨论】:

这可能会遇到分钟和秒的问题,因此将值剥离到日期和小时以避免出现问题。 仍然没有运气,此代码返回所有商店的计数。换句话说,当 store id 发生变化时它不会重置。 @promashk ,您可以在上述第一个查询的末尾添加一个 where 子句,将时间限制为前一小时。现在这个查询应该在一天中的每个小时运行一次,其输出应该插入到一个表中,比如 x。现在,当您从 x 查询前几天的数据时,将其限制为仅前几天的数据。[***.com/questions/34757504/…

以上是关于计算 Hive 中每个组中有多少条目的主要内容,如果未能解决你的问题,请参考以下文章

计算有多少列表条目具有以特定char结尾的字符串属性

计算每个值在数组中有多少个对象

在MySql中的每个新用户之后计算表中的行/条目

在深度强化学习中,我是计算每个小批量的损失还是小批量中的每个条目的损失?

Mysql查询计算整个表中有多少个“1”或“2”?

在 SQL 或 LINQ 中基于月份计算三个表中的条目