Clickhouse:有没有办法在 Clickhouse 中没有主键的现有 MergeTree 上设置采样?

Clickhouse: is there a way to set up sampling on an existing MergeTree that doesnt have a primary key in clickhouse?

我想对这个 table 进行随机抽样,我有,它包含注册用户会话的数据 activity。所以有一个 userid,一个 sessionid,时间戳还有其他一般数据。由于它的组织方式,没有一个列是唯一的,因为一个用户可以有多个会话,或者一个会话可以被多个用户访问,等等。

此 table 中大约有 3 亿行,我希望能够对其进行采样。但是,查看文档,看起来我必须设置一个散列键或采样键,当我的列是唯一的时候可以这样做吗?还是可以将它散列到多个列上?

我有一个查询

select * from table order by rand() limit (select toInt32(count(*)/100) from table)

但是 运行 超过 3 亿行

要求太高了

可以将它散列到多个列上

SELECT cityHash64('axx', 20)

┌─cityHash64('axx', 20)─┐
│   6142436227093532237 │
└───────────────────────┘

抽样很难正确实施,请阅读本文https://kb.altinity.com/altinity-kb-queries-and-syntax/sampling-example