數據准備
數據源 (點數據使用之前導入的數據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/