Перейти к основному содержанию
Перейти к основному содержанию

CityHash

ClickHouse использует одну из предыдущих версий CityHash от Google.

Справочные материалы

В CityHash изменился алгоритм после того, как мы добавили его в ClickHouse.

В документации CityHash прямо указано, что пользователю не следует полагаться на конкретные хеш-значения и не следует где-либо их сохранять или использовать в качестве ключа шардирования.

Но поскольку мы предоставили эту функцию пользователю, нам пришлось зафиксировать версию CityHash (на 1.0.2). И теперь мы гарантируем, что поведение функций CityHash, доступных в SQL, не изменится.

— Алексей Миловидов

Примечание

Текущая версия CityHash от Google отличается от варианта ClickHouse cityHash64.

Не используйте farmHash64, чтобы получить значение CityHash от Google! FarmHash является преемником CityHash, но они не полностью совместимы.

СтрокаClickHouse64CityHash64FarmHash64
Moscow1250790149629287863859927100784533574095992710078453357409
How can you write a big system without C++? -Paul Glick623794531165004562574929116295744250411716470977470720228

См. также Introducing CityHash для описания и обоснования его создания. TL;DR: некриптографическая хеш-функция, которая работает быстрее, чем MurmurHash, но при этом более сложная.

Реализации

Go

Вы можете использовать пакет Go go-faster/city, который реализует оба варианта.