跳转到主要内容
ClickHouse 使用的是 Google CityHash早期版本之一
在我们将 CityHash 引入 ClickHouse 之后,CityHash 的算法发生了变化。CityHash 文档特别指出,用户不应依赖特定的 哈希值,也不应将其保存到任何地方,或将其用作分片键。但由于我们向用户开放了这个函数,因此必须将 CityHash 的版本固定为 1.0.2。现在我们保证,SQL 中可用的 CityHash 函数的行为不会再发生变化。— Alexey Milovidov
注意Google 当前版本的 CityHash ClickHouse 的 cityHash64 变体不同。不要使用 farmHash64 来获取 Google 的 CityHash 值!FarmHash 是 CityHash 的后继者,但两者并不完全兼容。
StringClickHouse64CityHash64FarmHash64
Moscow1250790149629287863859927100784533574095992710078453357409
How can you write a big system without C++? -Paul Glick623794531165004562574929116295744250411716470977470720228
另请参阅 Introducing CityHash,了解其设计说明及创建原因。简而言之:这是一种非加密哈希,比 MurmurHash 更快,但也更复杂。

实现

Go

你可以使用 go-faster/city 这个 Go 包,它同时实现了这两种 Variant。
最后修改于 2026年6月12日