[Интерпретирует](../../query_language/functions/type_conversion_functions.md#type_conversion_functions-reinterpretAsString) все входные параметры как строки и вычисляет хэш [MD5](https://ru.wikipedia.org/wiki/MD5) для каждой из них. Затем объединяет хэши, берет первые 8 байт хэша результирующей строки и интерпретирует их как значение типа `UInt64`с big-endian порядком байтов.
```
halfMD5(par1, ...)
```
Функция относительно медленная (5 миллионов коротких строк в секунду на ядро процессора).
По возможности, используйте функцию [sipHash64](#hash_functions-siphash64) вместо неё.
**Параметры**
Функция принимает переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
Значение хэша с типом данных [UInt64](../../data_types/int_uint.md).
**Пример**
```sql
SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type
Генерирует 64-х битное значение [SipHash](https://131002.net/siphash/).
```
sipHash64(par1,...)
```
Это криптографическая хэш-функция. Она работает по крайней мере в три раза быстрее, чем функция [MD5](#hash_functions-md5).
Функция [интерпретирует](../../query_language/functions/type_conversion_functions.md#type_conversion_functions-reinterpretAsString) все входные параметры как строки и вычисляет хэш MD5 для каждой из них. Затем комбинирует хэши по следующему алгоритму.
1. После хэширования всех входных параметров функция получает массив хэшей.
2. Функция принимает первый и второй элементы и вычисляет хэш для массива из них.
3. Затем функция принимает хэш-значение, вычисленное на предыдущем шаге, и третий элемент исходного хэш-массива, и вычисляет хэш для массива из них.
4. Предыдущий шаг повторяется для всех остальных элементов исходного хэш-массива.
**Параметры**
Функция принимает переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
Значение хэша с типом данных [UInt64](../../data_types/int_uint.md).
**Пример**
```sql
SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type
Генерирует 64-х битное значение [CityHash](https://github.com/google/cityhash).
```
cityHash64(par1,...)
```
Это не криптографическая хэш-функция. Она использует CityHash алгоритм для строковых параметров и зависящую от реализации быструю некриптографическую хэш-функцию для параметров с другими типами данных. Функция использует комбинатор CityHash для получения конечных результатов.
**Параметры**
Функция принимает переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
Значение хэша с типом данных [UInt64](../../data_types/int_uint.md).
**Примеры**
Пример вызова:
```sql
SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type
```
```text
┌─────────────CityHash─┬─type───┐
│ 12072650598913549138 │ UInt64 │
└──────────────────────┴────────┘
```
А вот так вы можете вычислить чексумму всей таблицы с точностью до порядка строк:
Вычисляет SHA-1, SHA-224, SHA-256 от строки и возвращает полученный набор байт в виде FixedString(20), FixedString(28), FixedString(32).
Функция работает достаточно медленно (SHA-1 - примерно 5 миллионов коротких строк в секунду на одном процессорном ядре, SHA-224 и SHA-256 - примерно 2.2 миллионов).
Рекомендуется использовать эти функции лишь в тех случаях, когда вам нужна конкретная хэш-функция и вы не можете её выбрать.
Даже в этих случаях, рекомендуется применять функцию оффлайн - заранее вычисляя значения при вставке в таблицу, вместо того, чтобы применять её при SELECT-ах.
`URLHash(s)` - вычислить хэш от строки без одного завершающего символа `/`, `?` или `#` на конце, если там такой есть.
`URLHash(s, N)` - вычислить хэш от строки до N-го уровня в иерархии URL, без одного завершающего символа `/`, `?` или `#` на конце, если там такой есть.
Генерирует 64-х битное значение [FarmHash](https://github.com/google/farmhash).
```
farmHash64(par1, ...)
```
Из всех [доступных методов](https://github.com/google/farmhash/blob/master/src/farmhash.h) функция использует `Hash64`.
**Параметры**
Функция принимает переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
Значение хэша с типом данных [UInt64](../../data_types/int_uint.md).
**Пример**
```sql
SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type
```
```text
┌─────────────FarmHash─┬─type───┐
│ 17790458267262532859 │ UInt64 │
└──────────────────────┴────────┘
```
## javaHash {#hash_functions-javahash}
Вычисляет [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) от строки.
Принимает аргумент типа String. Возвращает значение типа Int32.
## hiveHash
Вычисляет HiveHash от строки.
Принимает аргумент типа String. Возвращает значение типа Int32.
HiveHash — это результат [JavaHash](#hash_functions-javahash) с обнулённым битом знака числа. Функция используется в [Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive) вплоть до версии 3.0.
## metroHash64
Генерирует 64-х битное значение [MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/).
```
metroHash64(par1, ...)
```
**Параметры**
Функция принимает переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
Значение хэша с типом данных [UInt64](../../data_types/int_uint.md).
**Пример**
```sql
SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type
```
```text
┌────────────MetroHash─┬─type───┐
│ 14235658766382344533 │ UInt64 │
└──────────────────────┴────────┘
```
## jumpConsistentHash
Вычисляет JumpConsistentHash от значения типа UInt64.
Принимает аргумент типа UInt64. Возвращает значение типа Int32.
Дополнительные сведения смотрите по ссылке: [JumpConsistentHash](https://arxiv.org/pdf/1406.2294.pdf)
## murmurHash2_32, murmurHash2_64
Генерирует значение [MurmurHash2](https://github.com/aappleby/smhasher).
```
murmurHash2_32(par1, ...)
murmurHash2_64(par1, ...)
```
**Параметры**
Обе функции принимают переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
- Функция `murmurHash2_32` возвращает значение типа [UInt32](../../data_types/int_uint.md).
- Функция `murmurHash2_64` возвращает значение типа [UInt64](../../data_types/int_uint.md).
**Пример**
```sql
SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type
```
```text
┌──────────MurmurHash2─┬─type───┐
│ 11832096901709403633 │ UInt64 │
└──────────────────────┴────────┘
```
## murmurHash3_32, murmurHash3_64
Генерирует значение [MurmurHash3](https://github.com/aappleby/smhasher).
```
murmurHash3_32(par1, ...)
murmurHash3_64(par1, ...)
```
**Параметры**
Обе функции принимают переменное число входных параметров. Параметры могут быть любого [поддерживаемого типа данных](../../data_types/index.md).
**Возвращаемое значение**
- Функция `murmurHash3_32` возвращает значение типа [UInt32](../../data_types/int_uint.md).
- Функция `murmurHash3_64` возвращает значение типа [UInt64](../../data_types/int_uint.md).
**Пример**
```sql
SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type
```
```text
┌─MurmurHash3─┬─type───┐
│ 2152717 │ UInt32 │
└─────────────┴────────┘
```
## murmurHash3_128
Генерирует значение [MurmurHash3](https://github.com/aappleby/smhasher).
```
murmurHash3_128( expr )
```
**Параметры**
-`expr` — [выражение](../syntax.md#syntax-expressions) возвращающее значение типа[String](../../data_types/string.md).
**Возвращаемое значение**
Хэш-значение типа [FixedString(16)](../../data_types/fixedstring.md).
**Пример**
```sql
SELECT murmurHash3_128('example_string') AS MurmurHash3, toTypeName(MurmurHash3) AS type
```
```text
┌─MurmurHash3──────┬─type────────────┐
│ 6<>1<1C>4"S5KT<4B>~~q │ FixedString(16) │
└──────────────────┴─────────────────┘
```
## xxHash32, xxHash64
Вычисляет xxHash от строки.
Принимает аргумент типа String. Возвращает значение типа Uint64 или Uint32.
Дополнительные сведения см. по ссылке: [xxHash](http://cyan4973.github.io/xxHash/)