columnstore—在clickhouse中是否可以通过insert查询直接存储hyperloglog/uniqstate()状态?

5lhxktic  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(453)

我们可以使用aggregatedmergetree表引擎,它可以用于聚合行。
一般来说,在聚合数据中,我们对存储所有唯一标识符不感兴趣,但仍然希望对不同的标识符进行计数。我们仍然希望能够进行另一次聚合,以便在以后(通过在select查询中对行进行分组)获得这些行的唯一计数。这就是hyperloglog派上用场的地方,它是作为clickhouse中的uniqstate函数实现的。
我想通过insert查询直接存储一个hyperloglog,并从我的客户机应用程序提供给clickhouse表。这可能吗?

mccptt67

mccptt671#

所以我只用了一个clickhouse查询就完成了这个壮举。它工作得很好!

CREATE TABLE demo_db.aggregates
(
    name String,
    date Date,
    ids AggregateFunction(uniq, UInt8)
) ENGINE = MergeTree(date, date, 8192)

//So here the declaration of a set of ids in the insert query will lead to a binary hash tree being stored    
INSERT INTO aggregates SELECT
    'Demo',
    toDate('2016-12-03'),
    uniqState(arrayJoin([1, 5, 6, 7])) 

SELECT
    name,
    date,
    uniqMerge(ids) //our hashtree can be grouped and give us unique count over the grouped rows
FROM aggregates
GROUP BY name, date

相关问题