ClickHouse/docs/fr/sql-reference/functions/hash-functions.md

447 lines
16 KiB
Markdown
Raw Normal View History

2020-03-30 12:48:55 +00:00
---
machine_translated: true
2020-04-04 09:15:31 +00:00
machine_translated_rev: f865c9653f9df092694258e0ccdd733c339112f5
toc_priority: 50
toc_title: Hachage
2020-03-30 12:48:55 +00:00
---
# Les Fonctions De Hachage {#hash-functions}
2020-03-30 12:48:55 +00:00
Les fonctions de hachage peuvent être utilisées pour le brassage pseudo-aléatoire déterministe des éléments.
## halfMD5 {#hash-functions-halfmd5}
[Interpréter](../../sql-reference/functions/type-conversion-functions.md#type_conversion_functions-reinterpretAsString) tous les paramètres dentrée sous forme de chaînes et calcule le [MD5](https://en.wikipedia.org/wiki/MD5) la valeur de hachage pour chacun deux. Puis combine les hachages, prend les 8 premiers octets du hachage de la chaîne résultante, et les interprète comme `UInt64` dans lordre des octets big-endian.
2020-03-30 12:48:55 +00:00
``` sql
halfMD5(par1, ...)
```
La fonction est relativement lente (5 millions de chaînes courtes par seconde par cœur de processeur).
Envisager lutilisation de la [sipHash64](#hash_functions-siphash64) la fonction la place.
2020-03-30 12:48:55 +00:00
**Paramètre**
La fonction prend un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
A [UInt64](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` sql
SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type
```
``` text
┌────────halfMD5hash─┬─type───┐
│ 186182704141653334 │ UInt64 │
└────────────────────┴────────┘
```
## MD5 {#hash_functions-md5}
Calcule le MD5 à partir dune chaîne et renvoie Lensemble doctets résultant en tant que FixedString(16).
Si vous navez pas besoin de MD5 en particulier, mais que vous avez besoin dun hachage cryptographique 128 bits décent, utilisez le sipHash128 la fonction la place.
Si vous voulez obtenir le même résultat que la sortie de lutilitaire md5sum, utilisez lower (hex(MD5 (s))).
2020-03-30 12:48:55 +00:00
## sipHash64 {#hash_functions-siphash64}
Produit un 64 bits [SipHash](https://131002.net/siphash/) la valeur de hachage.
``` sql
sipHash64(par1,...)
```
Cest une fonction de hachage cryptographique. Il fonctionne au moins trois fois plus vite que le [MD5](#hash_functions-md5) fonction.
2020-03-30 12:48:55 +00:00
Fonction [interpréter](../../sql-reference/functions/type-conversion-functions.md#type_conversion_functions-reinterpretAsString) tous les paramètres dentrée sous forme de chaînes et calcule la valeur de hachage pour chacun deux. Puis combine les hachages par lalgorithme suivant:
2020-03-30 12:48:55 +00:00
1. Après avoir haché tous les paramètres dentrée, la fonction obtient le tableau de hachages.
2. La fonction prend le premier et le second éléments et calcule un hachage pour le tableau dentre eux.
3. Ensuite, la fonction prend la valeur de hachage, calculée à létape précédente, et le troisième élément du tableau de hachage initial, et calcule un hachage pour le tableau dentre eux.
4. Létape précédente est répétée pour tous les éléments restants de la période initiale de hachage tableau.
2020-03-30 12:48:55 +00:00
**Paramètre**
La fonction prend un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
A [UInt64](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` sql
SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type
```
``` text
┌──────────────SipHash─┬─type───┐
│ 13726873534472839665 │ UInt64 │
└──────────────────────┴────────┘
```
## sipHash128 {#hash_functions-siphash128}
Calcule SipHash à partir dune chaîne.
2020-03-30 12:48:55 +00:00
Accepte un argument de type chaîne. Renvoie FixedString (16).
Diffère de sipHash64 en ce que létat de pliage xor final nest effectué que jusquà 128 bits.
2020-03-30 12:48:55 +00:00
## cityHash64 {#cityhash64}
Produit un 64 bits [CityHash](https://github.com/google/cityhash) la valeur de hachage.
``` sql
cityHash64(par1,...)
```
Ceci est une fonction de hachage non cryptographique rapide. Il utilise Lalgorithme CityHash pour les paramètres de chaîne et la fonction de hachage rapide non cryptographique spécifique à limplémentation pour les paramètres avec dautres types de données. La fonction utilise le combinateur CityHash pour obtenir les résultats finaux.
2020-03-30 12:48:55 +00:00
**Paramètre**
La fonction prend un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
A [UInt64](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
Appelez exemple:
``` 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 │
└──────────────────────┴────────┘
```
Lexemple suivant montre comment calculer la somme de lensemble de la table avec précision jusquà la ligne de commande:
2020-03-30 12:48:55 +00:00
``` sql
SELECT groupBitXor(cityHash64(*)) FROM table
```
## intHash32 {#inthash32}
Calcule un code de hachage 32 bits à partir de nimporte quel type dentier.
Cest une fonction de hachage non cryptographique relativement rapide de qualité moyenne pour les nombres.
2020-03-30 12:48:55 +00:00
## intHash64 {#inthash64}
Calcule un code de hachage 64 bits à partir de nimporte quel type dentier.
2020-03-30 12:48:55 +00:00
Il fonctionne plus vite que intHash32. Qualité moyenne.
## SHA1 {#sha1}
## SHA224 {#sha224}
## SHA256 {#sha256}
Calcule SHA-1, SHA-224 ou SHA-256 à partir dune chaîne et renvoie lensemble doctets résultant en tant que FixedString(20), FixedString(28) ou FixedString(32).
2020-03-30 12:48:55 +00:00
La fonction fonctionne assez lentement (SHA-1 traite environ 5 millions de chaînes courtes par seconde par cœur de processeur, tandis que SHA-224 et SHA-256 traitent environ 2,2 millions).
Nous vous recommandons dutiliser cette fonction uniquement dans les cas où vous avez besoin dune fonction de hachage spécifique et que vous ne pouvez pas la sélectionner.
Même dans ces cas, nous vous recommandons dappliquer la fonction hors ligne et de pré-calculer les valeurs lors de leur insertion dans la table, au lieu de lappliquer dans SELECTS.
2020-03-30 12:48:55 +00:00
## URLHash(url \[, N\]) {#urlhashurl-n}
Une fonction de hachage non cryptographique rapide et de qualité décente pour une chaîne obtenue à partir dune URL en utilisant un type de normalisation.
2020-03-30 12:48:55 +00:00
`URLHash(s)` Calculates a hash from a string without one of the trailing symbols `/`,`?` ou `#` à la fin, si elle est présente.
`URLHash(s, N)` Calculates a hash from a string up to the N level in the URL hierarchy, without one of the trailing symbols `/`,`?` ou `#` à la fin, si elle est présente.
Les niveaux sont les mêmes que dans URLHierarchy. Cette fonction est spécifique à Yandex.Metrica.
## farmHash64 {#farmhash64}
Produit un 64 bits [FarmHash](https://github.com/google/farmhash) la valeur de hachage.
``` sql
farmHash64(par1, ...)
```
La fonction utilise le `Hash64` la méthode de tous les [les méthodes disponibles](https://github.com/google/farmhash/blob/master/src/farmhash.h).
**Paramètre**
La fonction prend un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
A [UInt64](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` 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}
Calculer [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) à partir dune chaîne. Cette fonction de hachage nest ni rapide ni de bonne qualité. La seule raison de lutiliser est lorsque cet algorithme est déjà utilisé dans un autre système et que vous devez calculer exactement le même résultat.
2020-03-30 12:48:55 +00:00
**Syntaxe**
``` sql
SELECT javaHash('');
```
**Valeur renvoyée**
A `Int32` valeur de hachage du type de données.
**Exemple**
Requête:
``` sql
SELECT javaHash('Hello, world!');
```
Résultat:
``` text
┌─javaHash('Hello, world!')─┐
│ -1880044555 │
└───────────────────────────┘
```
## javaHashUTF16LE {#javahashutf16le}
Calculer [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) à partir dune chaîne, en supposant quelle contient des octets représentant une chaîne en encodage UTF-16LE.
2020-03-30 12:48:55 +00:00
**Syntaxe**
``` sql
javaHashUTF16LE(stringUtf16le)
```
**Paramètre**
- `stringUtf16le` — a string in UTF-16LE encoding.
**Valeur renvoyée**
A `Int32` valeur de hachage du type de données.
**Exemple**
Requête correcte avec une chaîne codée UTF-16LE.
Requête:
``` sql
SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))
```
Résultat:
``` text
┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐
│ 3556498 │
└──────────────────────────────────────────────────────────────┘
```
## hiveHash {#hash-functions-hivehash}
Calculer `HiveHash` à partir dune chaîne.
2020-03-30 12:48:55 +00:00
``` sql
SELECT hiveHash('');
```
Cest juste [JavaHash](#hash_functions-javahash) avec le bit de signe mis à zéro. Cette fonction est utilisée dans [Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive) pour les versions antérieures à la version 3.0. Cette fonction de hachage nest ni rapide ni de bonne qualité. La seule raison de lutiliser est lorsque cet algorithme est déjà utilisé dans un autre système et que vous devez calculer exactement le même résultat.
2020-03-30 12:48:55 +00:00
**Valeur renvoyée**
A `Int32` valeur de hachage du type de données.
Type: `hiveHash`.
**Exemple**
Requête:
``` sql
SELECT hiveHash('Hello, world!');
```
Résultat:
``` text
┌─hiveHash('Hello, world!')─┐
│ 267439093 │
└───────────────────────────┘
```
## metroHash64 {#metrohash64}
Produit un 64 bits [MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/) la valeur de hachage.
``` sql
metroHash64(par1, ...)
```
**Paramètre**
La fonction prend un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
A [UInt64](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` 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}
Calcule JumpConsistentHash forme un UInt64.
Accepte deux arguments: une clé de type UInt64 et le nombre de compartiments. Renvoie Int32.
Pour plus dinformations, voir le lien: [JumpConsistentHash](https://arxiv.org/pdf/1406.2294.pdf)
2020-03-30 12:48:55 +00:00
## murmurHash2\_32, murmurHash2\_64 {#murmurhash2-32-murmurhash2-64}
Produit un [MurmurHash2](https://github.com/aappleby/smhasher) la valeur de hachage.
``` sql
murmurHash2_32(par1, ...)
murmurHash2_64(par1, ...)
```
**Paramètre**
Les deux fonctions prennent un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
- Le `murmurHash2_32` fonction renvoie la valeur de hachage ayant le [UInt32](../../sql-reference/data-types/int-uint.md) type de données.
- Le `murmurHash2_64` fonction renvoie la valeur de hachage ayant le [UInt64](../../sql-reference/data-types/int-uint.md) type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` 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-32-murmurhash3-64}
Produit un [MurmurHash3](https://github.com/aappleby/smhasher) la valeur de hachage.
``` sql
murmurHash3_32(par1, ...)
murmurHash3_64(par1, ...)
```
**Paramètre**
Les deux fonctions prennent un nombre variable de paramètres dentrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../sql-reference/data-types/index.md).
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
- Le `murmurHash3_32` la fonction retourne un [UInt32](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
- Le `murmurHash3_64` la fonction retourne un [UInt64](../../sql-reference/data-types/int-uint.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` 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-128}
Produit de 128 bits [MurmurHash3](https://github.com/aappleby/smhasher) la valeur de hachage.
``` sql
murmurHash3_128( expr )
```
**Paramètre**
- `expr` — [Expression](../syntax.md#syntax-expressions) de retour dun [Chaîne](../../sql-reference/data-types/string.md)-le type de la valeur.
2020-03-30 12:48:55 +00:00
**Valeur Renvoyée**
A [FixedString (16)](../../sql-reference/data-types/fixedstring.md) valeur de hachage du type de données.
2020-03-30 12:48:55 +00:00
**Exemple**
``` 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 {#hash-functions-xxhash32}
Calculer `xxHash` à partir dune chaîne. Il est proposé en deux saveurs, 32 et 64 bits.
2020-03-30 12:48:55 +00:00
``` sql
SELECT xxHash32('');
OR
SELECT xxHash64('');
```
**Valeur renvoyée**
A `Uint32` ou `Uint64` valeur de hachage du type de données.
Type: `xxHash`.
**Exemple**
Requête:
``` sql
SELECT xxHash32('Hello, world!');
```
Résultat:
``` text
┌─xxHash32('Hello, world!')─┐
│ 834093149 │
└───────────────────────────┘
```
**Voir Aussi**
- [xxHash](http://cyan4973.github.io/xxHash/).
[Article Original](https://clickhouse.tech/docs/en/query_language/functions/hash_functions/) <!--hide-->