mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-19 04:42:37 +00:00
447 lines
18 KiB
Markdown
447 lines
18 KiB
Markdown
|
---
|
|||
|
machine_translated: true
|
|||
|
machine_translated_rev: d734a8e46ddd7465886ba4133bff743c55190626
|
|||
|
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` به ترتیب بایت بزرگ اندی.
|
|||
|
|
|||
|
``` sql
|
|||
|
halfMD5(par1, ...)
|
|||
|
```
|
|||
|
|
|||
|
تابع نسبتا کند است (5 میلیون رشته کوتاه در هر ثانیه در هر هسته پردازنده).
|
|||
|
در نظر بگیرید با استفاده از [سیفون64](#hash_functions-siphash64) تابع به جای.
|
|||
|
|
|||
|
**پارامترها**
|
|||
|
|
|||
|
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql_reference/data_types/index.md).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
A [UInt64](../../sql_reference/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
|
|||
|
```
|
|||
|
|
|||
|
``` 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) تمام پارامترهای ورودی به عنوان رشته و محاسبه مقدار هش برای هر یک از. سپس هش ها را با الگوریتم زیر ترکیب می کند:
|
|||
|
|
|||
|
1. پس از هش کردن تمام پارامترهای ورودی, تابع می شود مجموعه ای از رشته هش.
|
|||
|
2. تابع عناصر اول و دوم را می گیرد و هش را برای مجموعه ای از این موارد محاسبه می کند.
|
|||
|
3. سپس تابع مقدار هش را محاسبه می کند که در مرحله قبل محاسبه می شود و عنصر سوم هش های اولیه را محاسبه می کند و هش را برای مجموعه ای از انها محاسبه می کند.
|
|||
|
4. گام قبلی برای تمام عناصر باقی مانده از مجموعه هش اولیه تکرار شده است.
|
|||
|
|
|||
|
**پارامترها**
|
|||
|
|
|||
|
تابع طول می کشد تعداد متغیر پارامترهای ورودی. پارامترها می توانند هر یک از [انواع داده های پشتیبانی شده](../../sql_reference/data_types/index.md).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
A [UInt64](../../sql_reference/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
|
|||
|
```
|
|||
|
|
|||
|
``` 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).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
A [UInt64](../../sql_reference/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 │
|
|||
|
└──────────────────────┴────────┘
|
|||
|
```
|
|||
|
|
|||
|
مثال زیر نشان می دهد که چگونه برای محاسبه کنترلی از کل جدول با دقت تا سفارش ردیف:
|
|||
|
|
|||
|
``` 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).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
A [UInt64](../../sql_reference/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 │
|
|||
|
└──────────────────────┴────────┘
|
|||
|
```
|
|||
|
|
|||
|
## جواهاش {#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 کد گذاری رشته است.
|
|||
|
|
|||
|
پرسوجو:
|
|||
|
|
|||
|
``` 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).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
A [UInt64](../../sql_reference/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.
|
|||
|
می پذیرد دو استدلال: یک کلید بین 64 نوع و تعداد سطل. بازده int32.
|
|||
|
برای کسب اطلاعات بیشتر به لینک مراجعه کنید: [مورد احترام](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).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
- این `murmurHash2_32` تابع را برمی گرداند مقدار هش داشتن [UInt32](../../sql_reference/data_types/int_uint.md) نوع داده.
|
|||
|
- این `murmurHash2_64` تابع را برمی گرداند مقدار هش داشتن [UInt64](../../sql_reference/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 │
|
|||
|
└──────────────────────┴────────┘
|
|||
|
```
|
|||
|
|
|||
|
## سوفلش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).
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
- این `murmurHash3_32` تابع یک [UInt32](../../sql_reference/data_types/int_uint.md) نوع داده مقدار هش.
|
|||
|
- این `murmurHash3_64` تابع یک [UInt64](../../sql_reference/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 │
|
|||
|
└─────────────┴────────┘
|
|||
|
```
|
|||
|
|
|||
|
## سوفلش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)- نوع ارزش.
|
|||
|
|
|||
|
**مقدار بازگشتی**
|
|||
|
|
|||
|
A [رشته ثابت (16)](../../sql_reference/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) │
|
|||
|
└──────────────────┴─────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## بیست و 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-->
|