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

485 lines
19 KiB
Markdown
Raw Normal View History

2020-04-04 09:15:31 +00:00
---
machine_translated: true
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
2020-04-04 09:15:31 +00:00
toc_priority: 50
toc_title: "\u0647\u0634"
---
# توابع هش {#hash-functions}
توابع هش را می توان برای زدن شبه تصادفی قطعی از عناصر استفاده می شود.
## نیم مترد5 {#hash-functions-halfmd5}
[تفسیر](../../sql-reference/functions/type-conversion-functions.md#type_conversion_functions-reinterpretAsString) تمام پارامترهای ورودی به عنوان رشته ها و محاسبه [MD5](https://en.wikipedia.org/wiki/MD5) ارزش هش برای هر یک از. سپس هش ها را ترکیب می کند و اولین بایت 8 هش رشته حاصل را می گیرد و به عنوان تفسیر می کند `UInt64` به ترتیب بایت بزرگ اندی.
2020-04-04 09:15:31 +00:00
``` sql
halfMD5(par1, ...)
```
تابع نسبتا کند است (5 میلیون رشته کوتاه در هر ثانیه در هر هسته پردازنده).
در نظر بگیرید با استفاده از [سیفون64](#hash_functions-siphash64) تابع به جای.
**پارامترها**
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
A [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثال**
``` 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}
محاسبه ام دی 5 از یک رشته و مجموعه ای در نتیجه از بایت به عنوان رشته ثابت را برمی گرداند(16).
اگر شما ام دی 5 به طور خاص نیاز ندارد, اما شما نیاز به یک رمزنگاری مناسب و معقول هش 128 بیتی, استفاده از sipHash128 تابع به جای.
اگر شما می خواهید برای دریافت همان نتیجه به عنوان خروجی توسط ابزار موسسه خدمات مالی, استفاده از پایین تر(سحر و جادو کردن(توسعه هزاره5(بازدید کنندگان))).
## سیفون64 {#hash_functions-siphash64}
تولید 64 بیتی [سیفون](https://131002.net/siphash/) مقدار هش.
``` sql
sipHash64(par1,...)
```
این یک تابع هش رمزنگاری است. این کار حداقل سه بار سریع تر از [MD5](#hash_functions-md5) تابع.
تابع [تفسیر](../../sql-reference/functions/type-conversion-functions.md#type_conversion_functions-reinterpretAsString) تمام پارامترهای ورودی به عنوان رشته و محاسبه مقدار هش برای هر یک از. سپس هش ها را با الگوریتم زیر ترکیب می کند:
2020-04-04 09:15:31 +00:00
1. پس از هش کردن تمام پارامترهای ورودی, تابع می شود مجموعه ای از رشته هش.
2. تابع عناصر اول و دوم را می گیرد و هش را برای مجموعه ای از این موارد محاسبه می کند.
3. سپس تابع مقدار هش را محاسبه می کند که در مرحله قبل محاسبه می شود و عنصر سوم هش های اولیه را محاسبه می کند و هش را برای مجموعه ای از انها محاسبه می کند.
4. گام قبلی برای تمام عناصر باقی مانده از مجموعه هش اولیه تکرار شده است.
**پارامترها**
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
A [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثال**
``` 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 │
└──────────────────────┴────────┘
```
## سیفون128 {#hash_functions-siphash128}
محاسبه سیفون از یک رشته.
می پذیرد استدلال رشته از نوع. را برمی گرداند رشته ثابت (16).
متفاوت از سیفون64 در که حالت نهایی صخره نوردی تاشو تنها تا 128 بیت انجام می شود.
## 4تیهاش64 {#cityhash64}
تولید 64 بیتی [هشدار داده می شود](https://github.com/google/cityhash) مقدار هش.
``` sql
cityHash64(par1,...)
```
این یک تابع هش غیر رمزنگاری سریع است. با استفاده از الگوریتم سیتیاش برای پارامترهای رشته و اجرای خاص تابع هش غیر رمزنگاری سریع برای پارامترهای با انواع داده های دیگر. این تابع از ترکیب کننده سیتیاش برای دریافت نتایج نهایی استفاده می کند.
**پارامترها**
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
A [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثالها**
مثال تماس:
``` 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 │
└──────────────────────┴────────┘
```
مثال زیر نشان می دهد که چگونه برای محاسبه کنترلی از کل جدول با دقت تا سفارش ردیف:
``` sql
SELECT groupBitXor(cityHash64(*)) FROM table
```
## اینتش32 {#inthash32}
محاسبه یک کد هش 32 بیتی از هر نوع عدد صحیح.
این یک تابع هش غیر رمزنگاری نسبتا سریع از کیفیت متوسط برای اعداد است.
## اینتاش64 {#inthash64}
محاسبه یک کد هش 64 بیتی از هر نوع عدد صحیح.
این کار سریع تر از اینتش32. میانگین کیفیت.
## SHA1 {#sha1}
## SHA224 {#sha224}
## SHA256 {#sha256}
محاسبه شا-1, شا-224, یا شا-256 از یک رشته و مجموعه ای در نتیجه از بایت به عنوان رشته گرداند(20), رشته ثابت(28), و یا رشته ثابت(32).
تابع کار می کند نسبتا کند (شا-1 پردازش در مورد 5 میلیون رشته کوتاه در هر ثانیه در هر هسته پردازنده, در حالی که شا-224 و شا-256 روند در مورد 2.2 میلیون).
ما توصیه می کنیم با استفاده از این تابع تنها در مواردی که شما نیاز به یک تابع هش خاص و شما می توانید انتخاب کنید.
حتی در این موارد توصیه می شود که از تابع به صورت افلاین استفاده کنید و مقادیر قبل از محاسبه هنگام وارد کردن جدول به جای استفاده در انتخاب ها.
## نشانی اینترنتی\]) {#urlhashurl-n}
یک تابع هش غیر رمزنگاری سریع و با کیفیت مناسب برای یک رشته از یک نشانی وب با استفاده از نوعی عادی سازی.
`URLHash(s)` Calculates a hash from a string without one of the trailing symbols `/`,`?` یا `#` در پایان, اگر در حال حاضر.
`URLHash(s, N)` Calculates a hash from a string up to the N level in the URL hierarchy, without one of the trailing symbols `/`,`?` یا `#` در پایان, اگر در حال حاضر.
سطح همان است که در هرج و مرج است. این تابع خاص به یاندکس است.متریکا
## فرمان 64 {#farmhash64}
تولید 64 بیتی [مزرعه دار](https://github.com/google/farmhash) مقدار هش.
``` sql
farmHash64(par1, ...)
```
تابع با استفاده از `Hash64` روش از همه [روش های موجود](https://github.com/google/farmhash/blob/master/src/farmhash.h).
**پارامترها**
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
A [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثال**
``` 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 │
└──────────────────────┴────────┘
```
## جواهاش {#hash_functions-javahash}
محاسبه [جواهاش](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) از یک رشته. این تابع هش نه سریع و نه با کیفیت خوب است. تنها دلیل استفاده از این است که این الگوریتم در حال حاضر در سیستم دیگری استفاده می شود و شما باید دقیقا همان نتیجه را محاسبه کنید.
**نحو**
``` sql
SELECT javaHash('');
```
**مقدار بازگشتی**
A `Int32` نوع داده مقدار هش.
**مثال**
پرسوجو:
``` sql
SELECT javaHash('Hello, world!');
```
نتیجه:
``` text
┌─javaHash('Hello, world!')─┐
│ -1880044555 │
└───────────────────────────┘
```
## جواهرشوتف16 {#javahashutf16le}
محاسبه [جواهاش](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) از یک رشته, فرض کنید که شامل بایت به نمایندگی از یک رشته در رمزگذاری اوت-16ل.
**نحو**
``` sql
javaHashUTF16LE(stringUtf16le)
```
**پارامترها**
- `stringUtf16le` — a string in UTF-16LE encoding.
**مقدار بازگشتی**
A `Int32` نوع داده مقدار هش.
**مثال**
درست پرس و جو با UTF-16LE کد گذاری رشته است.
2020-04-04 09:15:31 +00:00
پرسوجو:
``` sql
SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))
```
نتیجه:
``` text
┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐
│ 3556498 │
└──────────────────────────────────────────────────────────────┘
```
## هیوهاش {#hash-functions-hivehash}
محاسبه `HiveHash` از یک رشته.
``` sql
SELECT hiveHash('');
```
این فقط [جواهاش](#hash_functions-javahash) با کمی نشانه صفر کردن. این تابع در استفاده [زنبورک کندو](https://en.wikipedia.org/wiki/Apache_Hive) برای نسخه های قبل از 3.0. این تابع هش نه سریع و نه با کیفیت خوب است. تنها دلیل استفاده از این است که این الگوریتم در حال حاضر در سیستم دیگری استفاده می شود و شما باید دقیقا همان نتیجه را محاسبه کنید.
**مقدار بازگشتی**
A `Int32` نوع داده مقدار هش.
نوع: `hiveHash`.
**مثال**
پرسوجو:
``` sql
SELECT hiveHash('Hello, world!');
```
نتیجه:
``` text
┌─hiveHash('Hello, world!')─┐
│ 267439093 │
└───────────────────────────┘
```
## متروهاش64 {#metrohash64}
تولید 64 بیتی [متروهاش](http://www.jandrewrogers.com/2015/05/27/metrohash/) مقدار هش.
``` sql
metroHash64(par1, ...)
```
**پارامترها**
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
A [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثال**
``` 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.
می پذیرد دو استدلال: یک کلید بین 64 نوع و تعداد سطل. بازده Int32.
2020-04-04 09:15:31 +00:00
برای کسب اطلاعات بیشتر به لینک مراجعه کنید: [مورد احترام](https://arxiv.org/pdf/1406.2294.pdf)
## سوفلش2\_32, سوفلشه2\_64 {#murmurhash2-32-murmurhash2-64}
تولید یک [زمزمه 2](https://github.com/aappleby/smhasher) مقدار هش.
``` sql
murmurHash2_32(par1, ...)
murmurHash2_64(par1, ...)
```
**پارامترها**
هر دو توابع را به تعداد متغیر از پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
- این `murmurHash2_32` تابع را برمی گرداند مقدار هش داشتن [UInt32](../../sql-reference/data-types/int-uint.md) نوع داده.
- این `murmurHash2_64` تابع را برمی گرداند مقدار هش داشتن [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده.
2020-04-04 09:15:31 +00:00
**مثال**
``` 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 │
└──────────────────────┴────────┘
```
## اطلاعات دقیق {#gccmurmurhash}
محاسبه 64 بیتی [زمزمه 2](https://github.com/aappleby/smhasher) مقدار هش با استفاده از همان دانه هش به عنوان [شورای همکاری خلیج فارس](https://github.com/gcc-mirror/gcc/blob/41d6b10e96a1de98e90a7c0378437c3255814b16/libstdc%2B%2B-v3/include/bits/functional_hash.h#L191). این قابل حمل بین کلانگ و شورای همکاری خلیج فارس ایجاد شده است.
**نحو**
``` sql
gccMurmurHash(par1, ...);
```
**پارامترها**
- `par1, ...` — A variable number of parameters that can be any of the [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md#data_types).
**مقدار بازگشتی**
- محاسبه مقدار هش.
نوع: [UInt64](../../sql-reference/data-types/int-uint.md).
**مثال**
پرسوجو:
``` sql
SELECT
gccMurmurHash(1, 2, 3) AS res1,
gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2
```
نتیجه:
``` text
┌─────────────────res1─┬────────────────res2─┐
│ 12384823029245979431 │ 1188926775431157506 │
└──────────────────────┴─────────────────────┘
```
2020-04-04 09:15:31 +00:00
## سوفلش3\_32, سوفلشه3\_64 {#murmurhash3-32-murmurhash3-64}
تولید یک [سوفلهاش3](https://github.com/aappleby/smhasher) مقدار هش.
``` sql
murmurHash3_32(par1, ...)
murmurHash3_64(par1, ...)
```
**پارامترها**
هر دو توابع را به تعداد متغیر از پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql-reference/data-types/index.md).
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
- این `murmurHash3_32` تابع یک [UInt32](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
- این `murmurHash3_64` تابع یک [UInt64](../../sql-reference/data-types/int-uint.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثال**
``` 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 │
└─────────────┴────────┘
```
## سوفلش3\_128 {#murmurhash3-128}
تولید 128 بیتی [سوفلهاش3](https://github.com/aappleby/smhasher) مقدار هش.
``` sql
murmurHash3_128( expr )
```
**پارامترها**
- `expr` — [عبارتها](../syntax.md#syntax-expressions) بازگشت یک [رشته](../../sql-reference/data-types/string.md)- نوع ارزش.
2020-04-04 09:15:31 +00:00
**مقدار بازگشتی**
A [رشته ثابت (16)](../../sql-reference/data-types/fixedstring.md) نوع داده مقدار هش.
2020-04-04 09:15:31 +00:00
**مثال**
``` sql
SELECT murmurHash3_128('example_string') AS MurmurHash3, toTypeName(MurmurHash3) AS type
```
``` text
┌─MurmurHash3──────┬─type────────────┐
│ 6<>1<1C>4"S5KT<4B>~~q │ FixedString(16) │
└──────────────────┴─────────────────┘
```
## بیست و 3264 {#hash-functions-xxhash32}
محاسبه `xxHash` از یک رشته. این است که در دو طعم پیشنهاد, 32 و 64 بیت.
``` sql
SELECT xxHash32('');
OR
SELECT xxHash64('');
```
**مقدار بازگشتی**
A `Uint32` یا `Uint64` نوع داده مقدار هش.
نوع: `xxHash`.
**مثال**
پرسوجو:
``` sql
SELECT xxHash32('Hello, world!');
```
نتیجه:
``` text
┌─xxHash32('Hello, world!')─┐
│ 834093149 │
└───────────────────────────┘
```
**همچنین نگاه کنید به**
- [معلم](http://cyan4973.github.io/xxHash/).
[مقاله اصلی](https://clickhouse.tech/docs/en/query_language/functions/hash_functions/) <!--hide-->