ClickHouse/docs/zh/data_types/nested_data_structures/aggregatefunction.md

2.3 KiB

AggregateFunction(name, types_of_arguments...)

聚合函数中的中间状态。可以在聚合函数中通过-State后缀来访问它。为了在后续访问聚合数据,请您必须使用含有-Merge后缀的相同聚合函数。

AggregateFunction — 参数化的数据类型。

Parameters

  • 聚合函数名

    如果函数是参数化的,则还要指定其参数。

  • 聚合函数参数的类型

Example

CREATE TABLE t
(
    column1 AggregateFunction(uniq, UInt64),
    column2 AggregateFunction(anyIf, String, UInt8),
    column3 AggregateFunction(quantiles(0.5, 0.9), UInt64)
) ENGINE = ...

ClickHouse中支持的聚合函数包括 uniq, anyIf (any+If) 及 quantiles

Usage

Data Insertion

当写入数据时,请使用含有-State后缀的函数的INSERT SELECT语句。

Function examples

uniqState(UserID)
quantilesState(0.5, 0.9)(SendTiming)

不同于相对应的uniqquantiles,含有-State后缀的函数返回的是状态,而不是最终值。 也就是说,它们返回的是AggregateFunction类型的值。

SELECT查询的结果中,AggregateFunction类型的值能够表示所有ClickHouse输出格式所对应的特定二进制形式。 例如,如果使用SELECT查询将数据转储为TabSeparated格式,可以使用INSERT查询将其转储回去。

Data Selection

当从AggregatingMergeTree表中查询数据时,请使用GROUP BY子句,并使用含有-Merge后缀的相同聚合函数来写入数据。

后缀为-Merge的聚合函数,可以对一组状态值进行组合,然后返回完整的数据聚合结果。

例如,以下的两个查询返回相同的结果:

SELECT uniq(UserID) FROM table

SELECT uniqMerge(state) FROM (SELECT uniqState(UserID) AS state FROM table GROUP BY RegionID)

Usage Example

请参阅 AggregatingMergeTree 的说明

来源文章