如何在 Clickhouse 中使用 group by 间隔 1 小时?

Posted

技术标签:

【中文标题】如何在 Clickhouse 中使用 group by 间隔 1 小时?【英文标题】:How do i use interval 1 hour in group by in Clickhouse? 【发布时间】:2021-06-02 02:12:58 【问题描述】:

我需要一个 clickhouse 查询来按给定日期>= today()-7 的小时间隔分组。

我尝试过date + INTERVAL 1 HOUR,但它在GROUP BY 中不起作用。

【问题讨论】:

【参考方案1】:

select 子句中未定义分组表达式 date + INTERVAL 1 HOUR 时有效:

SELECT count()
FROM 
(
    SELECT arrayJoin([toDate('2021-06-01'), toDate('2021-06-02')]) AS date
    WHERE date >= (today() - 2)
)
GROUP BY date + toIntervalHour(1)

/*
┌─count()─┐
│       1 │
│       1 │
└─────────┘
*/

如果您在 select 子句中需要此值,请使用此查询:

SELECT
    date + toIntervalHour(1) AS date1,
    count()
FROM 
(
    SELECT arrayJoin([toDate('2021-06-01'), toDate('2021-06-02')]) AS date
    WHERE date >= (today() - 2)

)
GROUP BY date1

/*
┌───────────────date1─┬─count()─┐
│ 2021-06-02 01:00:00 │       1 │
│ 2021-06-01 01:00:00 │       1 │
└─────────────────────┴─────────┘
*/

【讨论】:

它没有用,当我尝试这两种可能性时,它仍然给我一整天的计数。我需要每天每小时计算一次。我也尝试了以下但不工作。 SELECT date + toIntervalHour(1) AS date1, count(date1) from noc.interface where date>=(today()-2) group by date1 试试这个查询:SELECT date + toIntervalHour(1) AS date1, count(date1) from (select * from noc.interface where date>=(today()-2)) group按日期 1.

以上是关于如何在 Clickhouse 中使用 group by 间隔 1 小时?的主要内容,如果未能解决你的问题,请参考以下文章

大数据ClickHouse进阶(十三):ClickHouse的GROUP BY 子句

ClickHouse 实时数据去重查询argMax +group by

ClickHouse 到底有多快? 200亿行数据 count,group 的响应时间

如何在 Travis 中使用 Clickhouse

如何在 clickhouse 中使用 groupBitmapAnd 和 AggregatingMergeTree 引擎?

如何在 ClickHouse 中使用分隔符连接 INT