ClickHouse亿点抽样展示


数据准备

    数据源 (点数据使用之前导入的数据120038310条,https://juejin.cn/post/6903100159484395534)

 CREATE TABLE default.points
(
    `id` UInt32,
    `Lon` Float32,
    `Lat` Float32
)
ENGINE = MergeTree()
ORDER BY (intHash64(id), Lon, Lat)
SAMPLE BY intHash64(id)
SETTINGS index_granularity = 8192
insert into points SELECT id,Lon,Lat FROM pnts

采样功能和Hash函数

SAMPLE 子句特点

该 SAMPLE 子句允许近似于 SELECT 查询处理。

启用数据采样时,不会对所有数据执行查询,而只对特定部分数据(样本)执行查询。 例如,如果您需要计算所有访问的统计信息,只需对所有访问的1/10分数执行查询,然后将结果乘以10即可。

近似查询处理在以下情况下可能很有用:

当你有严格的时间需求(如<100ms),但你不能通过额外的硬件资源来满足他们的成本。
当您的原始数据不准确时,所以近似不会明显降低质量。
业务需求的目标是近似结果(为了成本效益,或者向高级用户推销确切结果)。

    Hash函数intHash64可以用于将元素不可逆的伪随机打乱。经过测试一亿多个点得抽样性能比较满意,可以为页面提供比较满意得展示。注意事项:sample的字段必须是int类型,必须在主键或者排序中。

抽样sql,0.01为示例,可根据实际修改

SELECT id,Lon,Lat FROM points SAMPLE 0.01

增加服务端和网页

    使用Express作为服务端,请求数据并且在网页中使用Maptalks展示,本地测试

参考资料:

https://clickhouse.tech/docs/zh/sql-reference/functions/hash-functions/#md5

https://clickhouse.tech/docs/zh/sql-reference/statements/select/sample/

原文地址:https://www.cnblogs.com/polong/p/14244773.html