ClickHouse/docs/tr/sql-reference/functions/hash-functions.md
2020-10-13 20:23:29 +03:00

16 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 50 Karma

Karma Fonksiyonlar

Hash fonksiyonları elementlerin deterministik sözde rastgele karıştırma için kullanılabilir.

halfMD5

Yorumluyor tüm giriş parametrelerini dizeler olarak hesaplar ve MD5 her biri için karma değeri. Sonra karmaları birleştirir, elde edilen dizenin karmasının ilk 8 baytını alır ve bunları şöyle yorumlar UInt64 büyük endian bayt sırasına göre.

halfMD5(par1, ...)

İşlev nispeten yavaştır (işlemci çekirdeği başına saniyede 5 milyon kısa dizge). Kullanmayı düşünün sifash64 bunun yerine işlev.

Parametre

Fonksiyon, değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

A Uİnt64 veri türü karma değeri.

Örnek

SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type
┌────────halfMD5hash─┬─type───┐
│ 186182704141653334 │ UInt64 │
└────────────────────┴────────┘

MD5

MD5 bir dizeden hesaplar ve elde edilen bayt kümesini FixedString(16) olarak döndürür. Özellikle MD5'E ihtiyacınız yoksa, ancak iyi bir şifreleme 128 bit karmasına ihtiyacınız varsa, sipHash128 bunun yerine işlev. Md5sum yardımcı programı tarafından çıktı ile aynı sonucu elde etmek istiyorsanız, lower(hex(MD5(s))) kullanın.

sifash64

64-bit üretir Sifash karma değeri.

sipHash64(par1,...)

Bu bir şifreleme karma işlevidir. En az üç kat daha hızlı çalışır MD5 İşlev.

İşlev yorumluyor tüm giriş parametreleri dizeleri olarak ve bunların her biri için karma değerini hesaplar. Sonra aşağıdaki algoritma ile karmaları birleştirir:

  1. Tüm giriş parametrelerini karma yaptıktan sonra, işlev karma dizisini alır.
  2. Fonksiyon birinci ve ikinci öğeleri alır ve bunların dizisi için bir karma hesaplar.
  3. Daha sonra işlev, önceki adımda hesaplanan karma değeri ve ilk karma dizinin üçüncü öğesini alır ve bunların dizisi için bir karma hesaplar.
  4. Önceki adım, ilk karma dizinin kalan tüm öğeleri için tekrarlanır.

Parametre

Fonksiyon, değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

A Uİnt64 veri türü karma değeri.

Örnek

SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type
┌──────────────SipHash─┬─type───┐
│ 13726873534472839665 │ UInt64 │
└──────────────────────┴────────┘

sifash128

Bir dizeden Sifash hesaplar. Bir dize türü bağımsız değişkeni kabul eder. Fixedstring(16) Döndürür. Sifash64'ten farklıdır, çünkü son xor katlama durumu sadece 128 bit'e kadar yapılır.

cityHash64

64-bit üretir CityHash karma değeri.

cityHash64(par1,...)

Bu hızlı olmayan şifreleme karma işlevidir. Dize parametreleri için CityHash algoritmasını ve diğer veri türleriyle parametreler için uygulamaya özgü hızlı kriptografik olmayan karma işlevini kullanır. İşlev, nihai sonuçları almak için CityHash birleştiricisini kullanır.

Parametre

Fonksiyon, değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

A Uİnt64 veri türü karma değeri.

Örnekler

Çağrı örneği:

SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type
┌─────────────CityHash─┬─type───┐
│ 12072650598913549138 │ UInt64 │
└──────────────────────┴────────┘

Aşağıdaki örnek, tüm tablonun sağlama toplamının satır sırasına kadar doğrulukla nasıl hesaplanacağını gösterir:

SELECT groupBitXor(cityHash64(*)) FROM table

intHash32

Herhangi bir tamsayı türünden 32 bit karma kodu hesaplar. Bu, sayılar için ortalama kalitenin nispeten hızlı bir kriptografik olmayan karma işlevidir.

intHash64

Herhangi bir tamsayı türünden 64 bit karma kodu hesaplar. Inthash32'den daha hızlı çalışır. Ortalama kalite.

SHA1

SHA224

SHA256

Bir dizeden SHA-1, SHA-224 veya SHA-256 hesaplar ve elde edilen bayt kümesini FixedString(20), FixedString(28) veya FixedString(32) olarak döndürür. İşlev oldukça yavaş çalışır (SHA-1, işlemci çekirdeği başına saniyede yaklaşık 5 milyon kısa dizgiyi işler, SHA-224 ve SHA-256 ise yaklaşık 2.2 milyon işlem yapar). Bu işlevi yalnızca belirli bir karma işleve ihtiyacınız olduğunda ve bunu seçemediğinizde kullanmanızı öneririz. Bu gibi durumlarda bile, SELECTS'TE uygulamak yerine, tabloya eklerken işlev çevrimdışı ve ön hesaplama değerlerini uygulamanızı öneririz.

URLHash(url [, N])

Bir tür normalleştirme kullanarak bir URL'den elde edilen bir dize için hızlı, iyi kalitede olmayan şifreleme karma işlevi. URLHash(s) Calculates a hash from a string without one of the trailing symbols /,? veya # sonunda, varsa. URLHash(s, N) Calculates a hash from a string up to the N level in the URL hierarchy, without one of the trailing symbols /,? veya # sonunda, varsa. Düzeyleri URLHierarchy aynıdır. Bu fonksiyon (kayıt olmak için özeldir.Metrica.

farmHash64

64-bit üretir FarmHash karma değeri.

farmHash64(par1, ...)

Fonksiyonu kullanır Hash64 tüm yöntem mevcut yöntemler.

Parametre

Fonksiyon, değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

A Uİnt64 veri türü karma değeri.

Örnek

SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type
┌─────────────FarmHash─┬─type───┐
│ 17790458267262532859 │ UInt64 │
└──────────────────────┴────────┘

javaHash

Hesaplıyor JavaHash bir ipten. Bu karma işlevi ne hızlı ne de iyi bir kaliteye sahip değildir. Bunu kullanmanın tek nedeni, bu algoritmanın zaten başka bir sistemde kullanılmasıdır ve tam olarak aynı sonucu hesaplamanız gerekir.

Sözdizimi

SELECT javaHash('');

Döndürülen değer

A Int32 veri türü karma değeri.

Örnek

Sorgu:

SELECT javaHash('Hello, world!');

Sonuç:

┌─javaHash('Hello, world!')─┐
│               -1880044555 │
└───────────────────────────┘

javaHashUTF16LE

Hesaplıyor JavaHash bir dizeden, UTF-16LE kodlamasında bir dizeyi temsil eden bayt içerdiğini varsayarak.

Sözdizimi

javaHashUTF16LE(stringUtf16le)

Parametre

  • stringUtf16le — a string in UTF-16LE encoding.

Döndürülen değer

A Int32 veri türü karma değeri.

Örnek

UTF-16LE kodlanmış dize ile doğru sorgu.

Sorgu:

SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))

Sonuç:

┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐
│                                                      3556498 │
└──────────────────────────────────────────────────────────────┘

hiveHash

Hesaplıyor HiveHash bir ipten.

SELECT hiveHash('');

Bu sadece JavaHash sıfırlanmış işaret biti ile. Bu işlev kullanılır Apache Kov Hanı 3.0 öncesi sürümler için. Bu karma işlevi ne hızlı ne de iyi bir kaliteye sahip değildir. Bunu kullanmanın tek nedeni, bu algoritmanın zaten başka bir sistemde kullanılmasıdır ve tam olarak aynı sonucu hesaplamanız gerekir.

Döndürülen değer

A Int32 veri türü karma değeri.

Tür: hiveHash.

Örnek

Sorgu:

SELECT hiveHash('Hello, world!');

Sonuç:

┌─hiveHash('Hello, world!')─┐
│                 267439093 │
└───────────────────────────┘

metroHash64

64-bit üretir MetroHash karma değeri.

metroHash64(par1, ...)

Parametre

Fonksiyon, değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

A Uİnt64 veri türü karma değeri.

Örnek

SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type
┌────────────MetroHash─┬─type───┐
│ 14235658766382344533 │ UInt64 │
└──────────────────────┴────────┘

jumpConsistentHash

Bir Uint64 Formu jumpconsistenthash hesaplar. İki bağımsız değişkeni kabul eder: bir uint64 tipi anahtar ve kova sayısı. Int32 Döndürür. Daha fazla bilgi için bağlantıya bakın: JumpConsistentHash

murmurHash2_32, murmurHash2_64

Üreten bir MurmurHash2 karma değeri.

murmurHash2_32(par1, ...)
murmurHash2_64(par1, ...)

Parametre

Her iki işlev de değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

  • Bu murmurHash2_32 fonksiyon hash değerini döndürür Uİnt32 veri türü.
  • Bu murmurHash2_64 fonksiyon hash değerini döndürür Uİnt64 veri türü.

Örnek

SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type
┌──────────MurmurHash2─┬─type───┐
│ 11832096901709403633 │ UInt64 │
└──────────────────────┴────────┘

gccMurmurHash

64-bit hesaplar MurmurHash2 aynı karma tohum kullanarak karma değeri gcc. CLang ve GCC yapıları arasında taşınabilir.

Sözdizimi

gccMurmurHash(par1, ...);

Parametre

Döndürülen değer

  • Hesaplanan karma değeri.

Tür: Uİnt64.

Örnek

Sorgu:

SELECT
    gccMurmurHash(1, 2, 3) AS res1,
    gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2

Sonuç:

┌─────────────────res1─┬────────────────res2─┐
│ 12384823029245979431 │ 1188926775431157506 │
└──────────────────────┴─────────────────────┘

murmurHash3_32, murmurHash3_64

Üreten bir MurmurHash3 karma değeri.

murmurHash3_32(par1, ...)
murmurHash3_64(par1, ...)

Parametre

Her iki işlev de değişken sayıda giriş parametresi alır. Parametreler herhangi biri olabilir desteklenen veri türleri.

Döndürülen Değer

  • Bu murmurHash3_32 fonksiyon bir Uİnt32 veri türü karma değeri.
  • Bu murmurHash3_64 fonksiyon bir Uİnt64 veri türü karma değeri.

Örnek

SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type
┌─MurmurHash3─┬─type───┐
│     2152717 │ UInt32 │
└─────────────┴────────┘

murmurHash3_128

128-bit üretir MurmurHash3 karma değeri.

murmurHash3_128( expr )

Parametre

Döndürülen Değer

A FixedString (16) veri türü karma değeri.

Örnek

SELECT murmurHash3_128('example_string') AS MurmurHash3, toTypeName(MurmurHash3) AS type
┌─MurmurHash3──────┬─type────────────┐
│ 6<>1<1C>4"S5KT<4B>~~q │ FixedString(16) │
└──────────────────┴─────────────────┘

xxHash32, xxHash64

Hesaplıyor xxHash bir ipten. İki tat, 32 ve 64 bit olarak önerilmiştir.

SELECT xxHash32('');

OR

SELECT xxHash64('');

Döndürülen değer

A Uint32 veya Uint64 veri türü karma değeri.

Tür: xxHash.

Örnek

Sorgu:

SELECT xxHash32('Hello, world!');

Sonuç:

┌─xxHash32('Hello, world!')─┐
│                 834093149 │
└───────────────────────────┘

Ayrıca Bakınız

Orijinal makale