【问题标题】:Redshift query to count metrics by 10 minute windowsRedshift 查询按 10 分钟窗口计算指标
【发布时间】:2016-06-25 01:43:20
【问题描述】:

关于 PostgreSQL 标签,您可能知道,Redshift is based off of PostgreSQL

Amazon Redshift 基于 PostgreSQL 8.0.2。 Amazon Redshift 和 PostgreSQL 有许多非常重要的区别,您在设计和开发数据仓库应用程序时必须注意这些区别。

我有一个这样创建的表:

create table purchase (
  user_id int,
  item_id int,
  t timestamp
)
diststyle even
interleaved sortkey(user_id, item_id, t);

我想执行一个查询,告诉我十分钟内最活跃的 3 个用户(购买次数最多的用户),以及同一十分钟内购买次数最多的 3 个商品。

所以结果应该是这样的

+-item_id-|-user_id-|-window-+
| aaa     | xxx     | 0      |
+---------+---------+--------+
| bbb     | yyy     | 0      |
+---------+---------+--------+
| ccc     | zzz     | 0      |
+---------+---------+--------+
| ...     | ...     | 1      |
+---------+---------+--------+
| ...     | ...     | 1      |
+---------+---------+--------+
| ...     | ...     | 1      |
..............................
| ...     | ...     | 5      |
+---------+---------+--------+
| ...     | ...     | 5      |
+---------+---------+--------+
| ...     | ...     | 5      |
+---------+---------+--------+

其中aaa 是前十分钟窗口中购买次数最多的商品,bbb 是前十分钟窗口中购买次数第​​二多的商品,以此类推,xxx 是前十分钟窗口内购买次数最多的用户,yyy 是第一个窗口内购买次数第​​二多的用户,以此类推。有六个 10 分钟的窗口,因为我将在一个小时的日期范围内执行此操作。

我对 Redshift 还很陌生,所以很遗憾,我没有任何现有的 SQL 可以向您展示我的尝试。

【问题讨论】:

  • 添加脚本来填充一些数据,我可以尝试帮助查询 postgres
  • @VaoTsun 获取数据太难了,但我很快就会发布我使用的答案。

标签: postgresql amazon-redshift


【解决方案1】:

我的要求略有变化,但我能够创建一个满足我的新要求的函数。我的新要求只是计算所有不同的item_ids 和user_ids

select count(distinct item_id) as item_id_count, count(distinct user_id) as user_id_count, substring(t, 0, 16) as window group by window order by window asc;

不确定其他人是否会有相同的日期格式,但我的是yyyy-MM-dd hh:mm:ss,所以要按 10 分钟分组的子字符串需要我只获得 yyyy-MM-dd hh:m 部分,然后我就按此分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 2017-06-29
    • 2018-05-24
    • 2021-10-23
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多