【问题标题】:Count how many entries were in each group in Hive计算 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

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

【问题讨论】:

    标签: hive bigdata


    【解决方案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 查询前几天的数据时,将其限制为仅前几天的数据。[stackoverflow.com/questions/34757504/…
      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 2019-04-30
      • 2014-05-07
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多