본문으로 바로가기
본문으로 바로가기

해시 함수

해시 함수는 요소들을 결정론적인 의사 난수 방식으로 섞는 데 사용할 수 있습니다.

Simhash는 비슷한(유사한) 인자에 대해 서로 가까운 해시 값을 반환하는 해시 함수입니다.

대부분의 해시 함수는 임의의 타입을 가진 임의 개수의 인자를 허용합니다.

참고

NULL의 해시는 NULL입니다. 널 허용(Nullable) 컬럼에 대해 NULL이 아닌 해시 값을 얻으려면, 컬럼을 튜플로 감싸십시오:

SELECT cityHash64(tuple(NULL))
참고

테이블 전체 내용의 해시 값을 계산하려면 sum(cityHash64(tuple(*)))(또는 다른 해시 함수)을 사용합니다. tuple은 NULL 값이 있는 행이 건너뛰어지지 않도록 보장합니다. sum은 행의 순서에 영향을 받지 않도록 보장합니다.

BLAKE3

도입 버전: v22.10

BLAKE3 해시 문자열을 계산하고, 결과 바이트 시퀀스를 FixedString 형식으로 반환합니다. 이 암호화 해시 함수는 BLAKE3 Rust 라이브러리를 사용하여 ClickHouse에 통합되어 있습니다. 이 함수는 상당히 빠르며, SHA-2와 비교해 대략 2배 빠른 성능을 보이는 동시에 SHA-256과 동일한 길이의 해시를 생성합니다. 길이 32의 FixedString 형식 바이트 배열로 BLAKE3 해시를 반환합니다.

구문

BLAKE3(message)

인수

  • message — 해시할 입력 문자열입니다. String

반환 값

입력 문자열의 32바이트 BLAKE3 해시값을 고정 길이 문자열로 반환합니다. FixedString(32)

예시

hash

SELECT hex(BLAKE3('ABC'))
┌─hex(BLAKE3('ABC'))───────────────────────────────────────────────┐
│ D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC │
└──────────────────────────────────────────────────────────────────┘

MD4

도입된 버전: v21.11

지정한 문자열의 MD4 해시를 계산합니다.

구문

MD4(s)

인수

  • s — 해시할 입력 문자열입니다. String

반환 값

주어진 입력 문자열의 MD4 해시를 고정 길이 문자열로 반환합니다. FixedString(16)

예시

사용 예시

SELECT HEX(MD4('abc'));
┌─hex(MD4('abc'))──────────────────┐
│ A448017AAF21D8525FC10AE87AA6729D │
└──────────────────────────────────┘

MD5

도입된 버전: v1.1

지정된 문자열의 MD5 해시를 계산합니다.

구문

MD5(s)

인자

  • s — 해시할 입력 문자열입니다. String

반환 값

주어진 입력 문자열의 MD5 해시를 길이가 고정된 문자열로 반환합니다. FixedString(16)

예시

사용 예시

SELECT HEX(MD5('abc'));
┌─hex(MD5('abc'))──────────────────┐
│ 900150983CD24FB0D6963F7D28E17F72 │
└──────────────────────────────────┘

RIPEMD160

도입된 버전: v24.10

주어진 문자열의 RIPEMD-160 해시를 계산합니다.

구문

RIPEMD160(s)

인자

  • s — 해시할 입력 문자열입니다. String

반환 값

주어진 입력 문자열의 RIPEMD160 해시를 고정 길이 문자열로 반환합니다. FixedString(20)

예시

사용 예시

SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'));
┌─HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))─┐
│ 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B                      │
└───────────────────────────────────────────────────────────────┘

SHA1

도입된 버전: v1.1

입력 문자열의 SHA1 해시를 계산합니다.

구문

SHA1(s)

인수

  • s — 해시할 입력 문자열 String

반환 값

주어진 입력 문자열의 SHA1 해시 값을 고정 길이 문자열로 반환합니다. FixedString(20)

예시

사용 예시

SELECT HEX(SHA1('abc'));
┌─hex(SHA1('abc'))─────────────────────────┐
│ A9993E364706816ABA3E25717850C26C9CD0D89D │
└──────────────────────────────────────────┘

SHA224

도입된 버전: v1.1

지정한 문자열의 SHA224 해시를 계산합니다.

구문

SHA224(s)

인수

  • s — 해시할 입력값. String

반환 값

주어진 입력 문자열의 SHA224 해시를 고정 길이의 문자열로 반환합니다. FixedString(28)

예시

사용 예시

SELECT HEX(SHA224('abc'));
┌─hex(SHA224('abc'))───────────────────────────────────────┐
│ 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 │
└──────────────────────────────────────────────────────────┘

SHA256

도입 버전: v1.1

입력 문자열의 SHA256 해시를 계산합니다.

구문

SHA256(s)

인수

  • s — 해시할 입력 문자열입니다. String

반환 값

주어진 입력 문자열의 SHA256 해시를 고정 길이 문자열로 반환합니다. FixedString(32)

예시

사용 예시

SELECT HEX(SHA256('abc'));
┌─hex(SHA256('abc'))───────────────────────────────────────────────┐
│ BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD │
└──────────────────────────────────────────────────────────────────┘

SHA384

도입 버전: v1.1

주어진 문자열에 대한 SHA384 해시를 계산합니다.

구문

SHA384(s)

인수

  • s — 해싱할 입력 문자열입니다. String

반환 값

주어진 입력 문자열의 SHA384 해시 값을 고정 길이 문자열로 반환합니다. FixedString(48)

예제

사용 예제

SELECT HEX(SHA384('abc'));
┌─hex(SHA384('abc'))───────────────────────────────────────────────────────────────────────────────┐
│ CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘

SHA512

도입된 버전: v1.1

지정한 문자열의 SHA512 해시 값을 계산합니다.

구문

SHA512(s)

인수

  • s — 해시할 입력 문자열 String

반환값

주어진 입력 문자열의 SHA512 해시 값을 고정 길이 문자열로 반환합니다. FixedString(64)

예제

사용 예제

SELECT HEX(SHA512('abc'));
┌─hex(SHA512('abc'))───────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

SHA512_256

도입 버전: v1.1

주어진 문자열의 SHA512_256 해시를 계산합니다.

구문

SHA512_256(s)

인수

  • s — 해시할 입력 문자열입니다. String

반환 값

지정된 입력 문자열의 SHA512_256 해시를 고정 길이의 문자열로 반환합니다. FixedString(32)

예시

사용 예시

SELECT HEX(SHA512_256('abc'));
┌─hex(SHA512_256('abc'))───────────────────────────────────────────┐
│ 53048E2681941EF99B2E29B76B4C7DABE4C2D0C634FC6D46E0E2F13107E7AF23 │
└──────────────────────────────────────────────────────────────────┘

URLHash

도입 버전: v1.1

URL에서 얻은 문자열을 일정한 방식으로 정규화(normalization)한 뒤 사용하는, 빠르고 품질이 괜찮은 비암호화 해시 함수입니다.

이 해시 함수는 두 가지 모드를 지원합니다:

ModeDescription
URLHash(url)문자열 끝에 /, ?, # 중 하나가 있는 경우, 해당 기호 하나를 제거한 문자열로부터 해시를 계산합니다.
URLHash(url, N)URL 계층 구조에서 N번째 레벨까지 포함하는 부분 문자열에 대해, 문자열 끝에 /, ?, # 중 하나가 있는 경우 해당 기호 하나를 제거한 문자열로부터 해시를 계산합니다. 레벨은 URLHierarchy와 동일합니다.

구문

URLHash(url[, N])

인수(Arguments)

  • url — 해싱할 URL 문자열입니다. String
  • N — 선택적 인수입니다. URL 계층 구조상의 단계입니다. (U)Int*

반환 값(Returned value)

url의 계산된 해시값을 반환합니다. UInt64

예시(Examples)

사용 예시(Usage example)

SELECT URLHash('https://www.clickhouse.com')
┌─URLHash('htt⋯house.com')─┐
│     13614512636072854701 │
└──────────────────────────┘

지정한 단계까지의 URL 해시

SELECT URLHash('https://www.clickhouse.com/docs', 0);
SELECT URLHash('https://www.clickhouse.com/docs', 1);
-- hash of https://www.clickhouse.com
┌─URLHash('htt⋯m/docs', 0)─┐
│     13614512636072854701 │
└──────────────────────────┘
-- hash of https://www.clickhouse.com/docs
┌─URLHash('htt⋯m/docs', 1)─┐
│     13167253331440520598 │
└──────────────────────────┘

cityHash64

도입된 버전: v1.1

64비트 CityHash 해시 값을 생성합니다.

이 함수는 빠른 비암호화 해시 함수입니다. 문자열 인자에는 CityHash 알고리즘을 사용하고, 그 외 데이터 타입의 인자에는 구현별 빠른 비암호화 해시 함수를 사용합니다. 최종 결과를 얻기 위해 CityHash 조합기(combinator)를 사용합니다.

참조

Google은 CityHash가 ClickHouse에 추가된 이후 CityHash 알고리즘을 변경했습니다. 즉, ClickHouse의 cityHash64와 Google의 업스트림(upstream) CityHash는 이제 서로 다른 결과를 생성합니다. ClickHouse의 cityHash64는 CityHash v1.0.2에 해당합니다.

참고

서로 다른 인자 타입에서 동일한 입력 값일 때, 계산된 해시 값이 동일할 수 있습니다. 예를 들어 크기가 다른 정수 타입, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 맵(Map)과 이에 대응하는 Array(Tuple(key, value)) 타입이 이에 해당합니다.

구문

cityHash64(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

입력 인수에 대해 계산된 해시 값을 반환합니다. UInt64

예제

호출 예제

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 │
└──────────────────────┴────────┘

행 순서까지 정확히 반영하여 전체 테이블의 체크섬을 계산

CREATE TABLE users (
    id UInt32,
    name String,
    age UInt8,
    city String
)
ENGINE = MergeTree
ORDER BY tuple();

INSERT INTO users VALUES
(1, 'Alice', 25, 'New York'),
(2, 'Bob', 30, 'London'),
(3, 'Charlie', 35, 'Tokyo');

SELECT groupBitXor(cityHash64(*)) FROM users;
┌─groupBitXor(⋯age, city))─┐
│     11639977218258521182 │
└──────────────────────────┘

farmFingerprint64

도입 버전: v20.12

Fingerprint64 메서드를 사용하여 64비트 FarmHash 값을 생성합니다.

farmFingerprint64는 안정적이고 이식 가능한 값을 제공하므로 farmHash64보다 권장됩니다.

참고

계산된 해시 값은 서로 다른 인수 타입이라도 동일한 입력 값에 대해 같을 수 있습니다. 예를 들어, 크기가 다른 정수 타입, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 Map과 이에 해당하는 Array(Tuple(key, value)) 타입 등이 이에 해당합니다.

구문

farmFingerprint64(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

입력 인수에 대해 계산된 해시값을 반환합니다. UInt64

예시

사용 예시

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

farmHash64

도입 버전: v1.1

Hash64 메서드를 사용하여 64비트 FarmHash를 생성합니다.

안정적이고 이식 가능한 값을 위해서는 farmFingerprint64를 사용하는 것이 더 좋습니다.

참고

계산된 해시 값은 서로 다른 인수 타입이라도 동일한 입력 값에 대해 같게 계산될 수 있습니다. 예를 들어, 크기가 다른 정수 타입, 동일한 데이터를 가진 이름이 있는 Tuple과 이름이 없는 Tuple, 동일한 데이터를 가진 Map과 이에 대응하는 Array(Tuple(key, value)) 타입 등이 이에 해당합니다.

구문

farmHash64(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 때 사용할 입력 인수를 가변 개수로 받습니다. Any

반환 값

입력 인수에 대해 계산된 해시 값을 반환합니다. UInt64

예제

사용 예제

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

gccMurmurHash

도입 버전: v20.1

입력값에 대해 GCC에서 사용하는 것과 동일한 시드를 사용하여 64비트 MurmurHash2 해시를 계산합니다.

Clang과 GCC로 빌드한 경우 모두 이식성이 보장됩니다.

구문

gccMurmurHash(arg1[, arg2, ...])

인자

  • arg1[, arg2, ...] — 해시를 계산할 인자를 여러 개 지정할 수 있습니다. Any

반환값

입력 인자들에 대해 계산된 해시값을 반환합니다. UInt64

예시

사용 예시

SELECT
    gccMurmurHash(1, 2, 3) AS res1,
    gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2
┌─────────────────res1─┬────────────────res2─┐
│ 12384823029245979431 │ 1188926775431157506 │
└──────────────────────┴─────────────────────┘

halfMD5

도입 버전: v1.1

모든 입력 파라미터를 문자열로 재해석한 후 각각에 대해 MD5 해시 값을 계산합니다. 그런 다음 이 해시들을 결합하고, 결과 문자열에 대한 해시의 처음 8바이트를 가져와 빅엔디언 바이트 순서의 UInt64로 해석합니다. 이 함수는 상대적으로 느린 함수입니다(프로세서 코어당 초당 약 500만 개의 짧은 문자열 처리).

대신 sipHash64 함수를 사용하는 것을 고려하십시오.

이 함수는 가변 개수의 입력 파라미터를 받습니다. 인자는 지원되는 어떤 데이터 타입이든 될 수 있습니다. 일부 데이터 타입의 경우, 인자의 타입이 서로 다르더라도(서로 다른 크기의 정수, 동일한 데이터를 가지는 이름 있는 Tuple 및 이름 없는 Tuple, 동일한 데이터를 가지는 Map 및 이에 대응하는 Array(Tuple(key, value)) 타입 등) 같은 값에 대해 해시 함수의 계산 결과가 동일할 수 있습니다.

구문

halfMD5(arg1[, arg2, ..., argN])

인자

  • arg1[, arg2, ..., argN] — 해시를 계산할 가변 개수의 인수입니다. Any

반환 값

지정된 입력 인수에 대해 계산된 half MD5 해시를 big-endian 바이트 순서의 UInt64 값으로 반환합니다. UInt64

예시

사용 예시

SELECT HEX(halfMD5('abc', 'cde', 'fgh'));
┌─hex(halfMD5('abc', 'cde', 'fgh'))─┐
│ 2C9506B7374CFAF4                  │
└───────────────────────────────────┘

hiveHash

도입된 버전: v20.1

문자열로부터 「HiveHash」를 계산합니다. 부호 비트를 0으로 만든 JavaHash와 같습니다. 이 함수는 3.0 이전 버전의 Apache Hive에서 사용되었습니다.

참고

이 해시 함수는 성능이 떨어집니다. 이미 다른 시스템에서 이 알고리즘을 사용 중이며 동일한 결과를 계산해야 하는 경우에만 사용하십시오.

구문

hiveHash(arg)

인수

  • arg — 해시할 입력 문자열. String

반환 값

입력 문자열의 「hive 해시」 계산 결과를 반환합니다. Int32

예시

사용 예시

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

icebergHash

도입 버전: v25.5

Iceberg의 hashing transform 로직을 구현합니다.

구문

icebergHash(value)

인자

반환 값

32비트 Murmur3 해시값을 반환합니다. x86 변형이며 시드(seed)는 0입니다. 반환 타입은 Int32입니다.

예시

예시

SELECT icebergHash(1.0 :: Float32)
-142385009

intHash32

도입된 버전: v1.1

정수의 32비트 해시를 계산합니다.

이 해시 함수는 비교적 빠르지만 암호학적 해시 함수로 설계된 것은 아닙니다.

구문

intHash32(arg)

인수

  • arg — 해시할 정수입니다. (U)Int*

반환 값

입력 정수에 대해 계산된 32비트 해시 코드인 UInt32 값을 반환합니다.

예시

사용 예시

SELECT intHash32(42);
┌─intHash32(42)─┐
│    1228623923 │
└───────────────┘

intHash64

도입 버전: v1.1

정수의 64비트 해시를 계산합니다.

이 해시 함수는 비교적 빠르며( intHash32보다도 빠름) 암호학적 해시 함수는 아닙니다.

구문

intHash64(int)

인수

  • int — 해시할 정수 값. (U)Int*

반환값

64비트 해시 코드. UInt64

예시

사용 예시

SELECT intHash64(42);
┌────────intHash64(42)─┐
│ 11490350930367293593 │
└──────────────────────┘

javaHash

도입: v20.1

다음 타입에서 JavaHash를 계산합니다:

참고

이 해시 함수는 성능이 좋지 않습니다. 다른 시스템에서 이미 이 알고리즘을 사용 중이고 동일한 결과를 계산해야 할 때만 사용하십시오.

참고

Java는 부호 있는 정수의 해시 계산만 지원합니다. 따라서 부호 없는 정수의 해시를 계산하려면 해당 값을 적절한 부호 있는 ClickHouse 타입으로 캐스팅해야 합니다.

구문

javaHash(arg)

인수

  • arg — 해시할 입력 값입니다. Any

반환 값

arg의 해시를 계산한 값을 반환합니다. Int32

예시

사용 예시 1

SELECT javaHash(toInt32(123));
┌─javaHash(toInt32(123))─┐
│               123      │
└────────────────────────┘

사용 예 2

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

javaHashUTF16LE

도입된 버전: v20.1

문자열이 UTF-16LE로 인코딩된 문자열을 나타내는 바이트를 포함한다고 가정하고, 해당 문자열에 대한 JavaHash를 계산합니다.

구문

javaHashUTF16LE(arg)

인수

  • arg — UTF-16LE 인코딩의 문자열. String

반환 값

UTF-16LE로 인코딩된 문자열의 해시 값을 반환합니다. Int32

예제

사용 예제

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

jumpConsistentHash

도입된 버전: v1.1

정수에 대해 jump consistent hash를 계산합니다.

구문

jumpConsistentHash(key, buckets)

매개변수

  • key — 입력 키입니다. UInt64
  • buckets — 버킷 개수입니다. Int32

반환값

계산된 해시 값을 반환합니다. Int32

예시

사용 예시

SELECT jumpConsistentHash(256, 4)
┌─jumpConsistentHash(256, 4)─┐
│                          3 │
└────────────────────────────┘

kafkaMurmurHash

도입 버전: v23.4

입력 값에 대해 Kafka에서 사용하는 것과 동일한 seed를 사용하고, Default Partitioner와의 호환성을 위해 최상위 비트를 제거하여 32비트 MurmurHash2 해시를 계산합니다.

구문

kafkaMurmurHash(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 매개변수입니다. Any

반환 값

입력 인수에 대한 해시 값을 계산하여 반환합니다. UInt32

예시

사용 예시

SELECT
    kafkaMurmurHash('foobar') AS res1,
    kafkaMurmurHash(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS res2
┌───────res1─┬─────res2─┐
│ 1357151166 │ 85479775 │
└────────────┴──────────┘

keccak256

도입 버전: v25.4

지정된 문자열의 Keccak-256 암호화 해시값을 계산합니다. 이 해시 함수는 블록체인 애플리케이션, 특히 Ethereum에서 널리 사용됩니다.

구문

keccak256(message)

인수

  • message — 해시할 입력 문자열입니다. String

반환 값

입력 문자열에 대한 32바이트 Keccak-256 해시값을 고정 길이 문자열로 반환합니다. FixedString(32)

예시

사용 예시

SELECT hex(keccak256('hello'))
┌─hex(keccak256('hello'))──────────────────────────────────────────┐
│ 1C8AFF950685C2ED4BC3174F3472287B56D9517B9C948127319A09A7A36DEAC8 │
└──────────────────────────────────────────────────────────────────┘

kostikConsistentHash

도입 버전: v22.6

Konstantin 'Kostik' Oblakov이 만든 O(1) 시간 및 공간 복잡도를 갖는 컨시스턴트 해싱 알고리즘입니다. n <= 32768인 경우에만 효율적입니다.

구문

kostikConsistentHash(input, n)

별칭: yandexConsistentHash

인수

  • input — 정수형 키입니다. UInt64
  • n — 버킷의 개수입니다. UInt16

반환값

계산된 해시 값을 반환합니다. UInt16

예시

사용 예시

SELECT kostikConsistentHash(16045690984833335023, 2);
┌─kostikConsistentHash(16045690984833335023, 2)─┐
│                                             1 │
└───────────────────────────────────────────────┘

metroHash64

도입 버전: v1.1

64비트 MetroHash 해시 값을 생성합니다.

참고

계산된 해시 값은 서로 다른 인자 타입이라도 동일한 입력 값에 대해 같을 수 있습니다. 예를 들어, 크기가 다른 정수 타입, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 Map과 이에 해당하는 Array(Tuple(key, value)) 타입 등이 이에 해당합니다.

구문

metroHash64(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

입력 인수에 대해 계산된 해시 값을 반환합니다. UInt64

예제

사용 예제

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 │
└──────────────────────┴────────┘

murmurHash2_32

도입 버전: v18.5

입력값의 MurmurHash2 해시를 계산합니다.

참고

계산된 해시 값은 서로 다른 인수 유형이라도 동일한 입력값에 대해 동일할 수 있습니다. 예를 들어, 크기가 다른 정수형, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 Map과 이에 대응하는 Array(Tuple(key, value)) 유형에 해당합니다.

구문

murmurHash2_32(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 입력 인수의 임의 개수. Any

반환 값

입력 인수들의 해시 값을 계산하여 반환합니다. UInt32

예제

사용 예제

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

murmurHash2_64

도입된 버전: v18.10

입력값의 MurmurHash2 해시를 계산합니다.

참고

계산된 해시 값은 서로 다른 인수 타입에서 동일한 입력값을 사용하더라도 같을 수 있습니다. 이는 예를 들어 크기가 다른 정수형 타입, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 Map과 해당하는 Array(Tuple(key, value)) 타입에 영향을 줍니다.

구문

murmurHash2_64(arg1[, arg2, ...])

인자

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인자. Any

반환 값

입력 인자에 대해 계산된 해시를 반환합니다. UInt64

예제

사용 예제

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 │
└──────────────────────┴────────┘

murmurHash3_128

도입 버전: v18.10

입력 값에 대해 128비트 MurmurHash3 해시를 계산합니다.

구문

murmurHash3_128(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

입력 인수에 대해 계산된 128비트 MurmurHash3 해시값을 반환합니다. FixedString(16)

예제

사용 예제

SELECT hex(murmurHash3_128('foo', 'foo', 'foo'));
┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐
│ F8F7AD9B6CD4CF117A71E277E2EC2931          │
└───────────────────────────────────────────┘

murmurHash3_32

도입된 버전: v18.10

MurmurHash3 해시값을 생성합니다.

참고

계산된 해시값은 서로 다른 인수 타입이라도 동일한 입력값에 대해 같을 수 있습니다. 예를 들어, 크기가 다른 정수 타입, 동일한 데이터를 가지는 이름이 있는 Tuple과 이름이 없는 Tuple, 동일한 데이터를 가지는 Map 타입과 이에 상응하는 Array(Tuple(key, value)) 타입에서 이러한 현상이 발생할 수 있습니다.

문법

murmurHash3_32(arg1[, arg2, ...])

인자

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인자입니다. Any

반환 값

입력 인자에 대해 계산된 해시 값을 반환합니다. UInt32

예시

사용 예시

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_64

도입 버전: v18.10

입력값에 대해 MurmurHash3 해시를 계산합니다.

참고

계산된 해시 값은 인수 타입이 서로 다른 경우에도 동일한 입력값에 대해 같을 수 있습니다. 이는 예를 들어 크기가 다른 정수 타입, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 Map과 해당 Array(Tuple(key, value)) 타입에도 해당됩니다.

구문

murmurHash3_64(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

입력 인수에 대해 계산된 해시 값을 반환합니다. UInt64

예제

사용 예

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

ngramMinHash

도입 버전: v21.1

ASCII 문자열을 길이 ngramsize의 n-그램으로 분할하고, 각 n-그램에 대한 해시 값을 계산하여 이 해시들을 포함하는 튜플을 반환합니다. 최소 해시를 계산하기 위해 hashnum개의 최소 해시 값과 최대 해시를 계산하기 위해 hashnum개의 최대 해시 값을 사용합니다. 대소문자를 구분합니다.

tupleHammingDistance를 사용하여 부분적으로 중복된 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시가 두 문자열 모두에서 동일하다면 그 문자열들은 동일한 것으로 간주됩니다.

구문

ngramMinHash(string[, ngramsize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기로, 1에서 25 사이의 정수입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수로, 1에서 25 사이의 정수입니다. 기본값은 6입니다. UInt8

반환값

두 개의 해시(최소값과 최대값)를 요소로 갖는 튜플을 반환합니다. Tuple

예시

사용 예시

SELECT ngramMinHash('ClickHouse') AS Tuple;
┌─Tuple──────────────────────────────────────┐
│ (18333312859352735453,9054248444481805918) │
└────────────────────────────────────────────┘

ngramMinHashArg

도입된 버전: v21.1

ASCII 문자열을 ngramsize 문자 단위의 n-그램으로 나눈 다음, 동일한 입력에 대해 ngramMinHash 함수로 계산된 최소 및 최대 해시를 갖는 n-그램을 반환합니다. 대소문자를 구분합니다.

구문

ngramMinHashArg(string[, ngramsize, hashnum])

인자

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기이며, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소/최대 해시 수이며, 1에서 25 사이의 값입니다. 기본값은 6입니다. UInt8

반환 값

각각 hashnum개의 n-그램을 포함하는 두 개의 튜플로 이루어진 튜플을 반환합니다. Tuple(String)

예시

사용 예시

SELECT ngramMinHashArg('ClickHouse') AS Tuple;
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','Hou','kHo','use'),('Hou','lic','ick','ous','ckH','Cli')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashArgCaseInsensitive

도입 버전: v21.1

ASCII 문자열을 ngramsize 개의 문자로 이루어진 n그램으로 분할하고, 동일한 입력에 대해 ngramMinHashCaseInsensitive FUNCTION에서 계산된 최소 및 최대 해시 값을 갖는 n그램을 반환합니다. 대소문자를 구분하지 않습니다.

구문

ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기이며, 1부터 25까지의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수이며, 1부터 25까지의 값입니다. 기본값은 6입니다. UInt8

반환 값

각각 hashnum개의 n-그램을 포함하는 두 개의 튜플로 구성된 튜플을 반환합니다. Tuple(Tuple(String))

예시

사용 예시

SELECT ngramMinHashArgCaseInsensitive('ClickHouse') AS Tuple;
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','kHo','use','Cli'),('kHo','lic','ick','ous','ckH','Hou')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashArgCaseInsensitiveUTF8

도입 버전: v21.1

UTF-8 문자열을 ngramsize개의 문자로 이루어진 n-그램으로 분할하고, 동일한 입력에 대해 ngramMinHashCaseInsensitiveUTF8 함수로 계산한 최소 및 최대 해시 값을 가지는 n-그램을 반환합니다. 대소문자를 구분하지 않습니다.

구문

ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum])

인수(Arguments)

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기이며, 1에서 25 사이의 어떤 값이든 사용할 수 있습니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 해시와 최대 해시의 개수이며, 1에서 25 사이의 어떤 값이든 사용할 수 있습니다. 기본값은 6입니다. UInt8

반환 값(Returned value)

각각 hashnum 개의 n-그램을 포함하는 두 개의 튜플로 구성된 튜플을 반환합니다. Tuple(Tuple(String))

예시(Examples)

사용 예시(Usage example)

SELECT ngramMinHashArgCaseInsensitiveUTF8('ClickHouse') AS Tuple;
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ckH','ous','ick','lic','kHo','use'),('kHo','lic','ick','ous','ckH','Hou')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashArgUTF8

도입된 버전: v21.1

UTF-8 문자열을 길이가 ngramsize인 n-그램으로 분리한 다음, 동일한 입력에 대해 ngramMinHashUTF8 FUNCTION으로 계산된 최소 및 최대 해시 값을 갖는 n-그램을 반환합니다. 대소문자를 구분합니다.

구문

ngramMinHashArgUTF8(string[, ngramsize, hashnum])

인수(Arguments)

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택적입니다. n-gram의 크기로, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택적입니다. 결과를 계산하는 데 사용되는 최소 해시와 최대 해시의 개수로, 1에서 25 사이의 값입니다. 기본값은 6입니다. UInt8

반환 값

두 개의 튜플을 요소로 가지는 튜플을 반환하며, 각 튜플에는 hashnum개의 n-gram이 포함됩니다. Tuple(Tuple(String))

예시(Examples)

사용 예시(Usage example)

SELECT ngramMinHashArgUTF8('ClickHouse') AS Tuple;
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','Hou','kHo','use'),('kHo','Hou','lic','ick','ous','ckH')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashCaseInsensitive

도입 버전: v21.1

ASCII 문자열을 ngramsize개의 문자로 이루어진 n-그램으로 분할한 후, 각 n-그램에 대한 해시 값을 계산하고 이 해시 값들을 포함하는 튜플을 반환합니다. 최소 해시값을 계산하기 위해 hashnum개의 최소 해시를 사용하고, 최대 해시값을 계산하기 위해 hashnum개의 최대 해시를 사용합니다. 대소문자를 구분하지 않습니다.

tupleHammingDistance를 사용하여 준중복(semi-duplicate) 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시 값들이 모두 동일하다면, 그 두 문자열은 동일한 문자열입니다.

구문

ngramMinHashCaseInsensitive(string[, ngramsize, hashnum])

인수

  • string — 문자열. String. - ngramsize — n그램의 크기입니다. 옵션입니다. 가능한 값: 1에서 25 사이의 임의의 수. 기본값: 3. UInt8. - hashnum — 결과 계산에 사용되는 최소 해시와 최대 해시의 개수입니다. 옵션입니다. 가능한 값: 1에서 25 사이의 임의의 수. 기본값: 6. UInt8.

반환 값

두 개의 해시(최솟값과 최댓값)를 포함하는 Tuple입니다. Tuple(UInt64, UInt64). Tuple

예시

사용 예시

SELECT ngramMinHashCaseInsensitive('ClickHouse') AS Tuple;
┌─Tuple──────────────────────────────────────┐
│ (2106263556442004574,13203602793651726206) │
└────────────────────────────────────────────┘

ngramMinHashCaseInsensitiveUTF8

도입 버전: v21.1

UTF-8 문자열을 ngramsize 길이의 n-그램으로 분할한 뒤 각 n-그램에 대한 해시 값을 계산하고, 이 해시들을 포함하는 튜플을 반환합니다. 최솟값 해시(min-hash)를 계산하기 위해 hashnum개의 최소 해시 값을 사용하고, 최댓값 해시를 계산하기 위해 hashnum개의 최대 해시 값을 사용합니다. 대소문자를 구분하지 않습니다.

tupleHammingDistance를 사용하여 준중복(semi-duplicate) 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시가 동일하다면, 두 문자열은 동일한 것으로 간주할 수 있습니다.

구문

ngramMinHashCaseInsensitiveUTF8(string [, ngramsize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기이며, 1부터 25까지의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과 계산에 사용되는 최소 및 최대 해시의 개수이며, 1부터 25까지의 값입니다. 기본값은 6입니다. UInt8

반환 값

최소 해시와 최대 해시, 두 개의 해시를 포함하는 튜플을 반환합니다. Tuple

예제

사용 예제

SELECT ngramMinHashCaseInsensitiveUTF8('ClickHouse') AS Tuple;
┌─Tuple───────────────────────────────────────┐
│ (12493625717655877135,13203602793651726206) │
└─────────────────────────────────────────────┘

ngramMinHashUTF8

도입 버전: v21.1

UTF-8 문자열을 ngramsize 개의 심볼로 이루어진 n-그램으로 분할한 뒤, 각 n-그램에 대한 해시 값을 계산하고 이 해시들로 구성된 튜플을 반환합니다. hashnum 개의 최소 해시를 사용하여 최소 해시를 계산하고, hashnum 개의 최대 해시를 사용하여 최대 해시를 계산합니다. 대소문자를 구분합니다.

tupleHammingDistance를 사용하여 유사 중복 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시 튜플이 두 문자열에서 모두 동일하다면, 그 문자열들은 동일한 것으로 간주됩니다.

구문

ngramMinHashUTF8(string[, ngramsize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기이며, 1부터 25까지의 임의의 수입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수이며, 1부터 25까지의 임의의 수입니다. 기본값은 6입니다. UInt8

반환 값

두 개의 해시 값(최솟값과 최댓값)이 포함된 튜플을 반환합니다. Tuple

예시

사용 예시

SELECT ngramMinHashUTF8('ClickHouse') AS Tuple;
┌─Tuple──────────────────────────────────────┐
│ (18333312859352735453,6742163577938632877) │
└────────────────────────────────────────────┘

ngramSimHash

도입 버전: v21.1

ASCII 문자열을 ngramsize개의 기호(문자)로 이루어진 n-그램으로 분할하고 n-그램 simhash를 반환합니다.

bitHammingDistance를 사용하여 부분적으로 중복된 문자열을 감지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming distance)가 작을수록 해당 문자열이 동일할 가능성이 높아집니다.

구문

ngramSimHash(string[, ngramsize])

인수

  • string — 대소문자를 구분하여 simhash를 계산할 문자열입니다. String
  • ngramsize — 선택 매개변수입니다. n-그램의 크기로, 1부터 25 사이의 정수입니다. 기본값은 3입니다. UInt8

반환 값

입력 문자열에 대해 계산된 해시 값을 반환합니다. UInt64

예시

사용 예시

SELECT ngramSimHash('ClickHouse') AS Hash;
┌───────Hash─┐
│ 1627567969 │
└────────────┘

ngramSimHashCaseInsensitive

도입 버전: v21.1

ASCII 문자열을 길이가 ngramsize인 기호 단위 n-그램으로 분할하고 n-그램 simhash를 반환합니다. 대소문자를 구분하지 않습니다.

bitHammingDistance를 사용하여 부분적으로 중복된 문자열을 감지하는 데 사용할 수 있습니다. 서로 다른 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming distance)가 작을수록 두 문자열이 동일할 가능성이 더 높습니다.

구문

ngramSimHashCaseInsensitive(string[, ngramsize])

인수

  • string — 대소문자를 구분하지 않고 simhash를 계산할 문자열. String
  • ngramsize — 선택적 매개변수. n-그램의 크기로, 1부터 25 사이의 값이며 기본값은 3입니다. UInt8

반환 값

해시 값. UInt64. UInt64

예시

사용 예시

SELECT ngramSimHashCaseInsensitive('ClickHouse') AS Hash;
┌──────Hash─┐
│ 562180645 │
└───────────┘

ngramSimHashCaseInsensitiveUTF8

도입 버전: v21.1

UTF-8 문자열을 ngramsize개의 문자로 이루어진 n-그램으로 분할하고, n-그램 simhash를 반환합니다. 대소문자를 구분하지 않습니다.

bitHammingDistance를 사용하여 부분적으로 중복된 문자열을 감지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming Distance)가 작을수록 두 문자열이 같을 가능성이 더 높습니다.

구문

ngramSimHashCaseInsensitiveUTF8(string[, ngramsize])

인자

  • string — 해시를 계산할 문자열. String
  • ngramsize — 선택적 매개변수입니다. n-그램의 크기로, 1부터 25까지의 임의의 값입니다. 기본값은 3입니다. UInt8

반환 값

계산된 해시 값이 반환됩니다. UInt64

예시

사용 예시

SELECT ngramSimHashCaseInsensitiveUTF8('ClickHouse') AS Hash;
┌───────Hash─┐
│ 1636742693 │
└────────────┘

ngramSimHashUTF8

도입 버전: v21.1

UTF-8로 인코딩된 문자열을 ngramsize 문자 크기의 n-그램으로 나눈 후 n-그램 simhash를 반환합니다. 대소문자를 구분합니다.

bitHammingDistance를 사용하여 유사 중복 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming distance)가 작을수록 두 문자열이 동일할 가능성이 높습니다.

구문

ngramSimHashUTF8(string[, ngramsize])

인수

  • string — 해시를 계산할 문자열입니다. String
  • ngramsize — 선택 사항입니다. n-그램의 크기로, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8

반환 값

계산된 해시 값을 반환합니다. UInt64

예제

사용 예제

SELECT ngramSimHashUTF8('ClickHouse') AS Hash;
┌───────Hash─┐
│ 1628157797 │
└────────────┘

sipHash128

도입: v1.1

sipHash64와 유사하지만 128비트 해시값을 생성합니다. 즉, 최종 xor-folding 상태 갱신이 128비트까지 수행됩니다.

새 프로젝트에는 sipHash128Reference 사용

이 128비트 버전은 레퍼런스 구현과 다르며 더 취약합니다. 이 버전은 작성 당시 SipHash에 대한 공식적인 128비트 확장이 없었기 때문에 제공되었습니다. 새로운 프로젝트에서는 sipHash128Reference를 사용하는 것이 좋습니다.

구문

sipHash128(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

128비트 SipHash 해시 값을 반환합니다. FixedString(16)

예시

사용 예시

SELECT hex(sipHash128('foo', '\x01', 3));
┌─hex(sipHash128('foo', '', 3))────┐
│ 9DE516A64A414D4B1B609415E4523F24 │
└──────────────────────────────────┘

sipHash128Keyed

도입된 버전: v23.2

sipHash128과 동일하지만, 고정 키를 사용하는 대신 명시적인 키 인수를 추가로 받습니다.

새로운 프로젝트에는 sipHash128ReferenceKeyed 사용을 권장합니다

이 128비트 버전은 기준(reference) 구현과 다르며 보안 강도가 더 낮습니다. 이 버전이 존재하는 이유는 작성 당시 SipHash에 대한 공식 128비트 확장이 없었기 때문입니다. 새로운 프로젝트에서는 sipHash128ReferenceKeyed를 사용하는 것이 좋습니다.

문법

sipHash128Keyed((k0, k1), [arg1, arg2, ...])

인자

  • (k0, k1) — 키를 나타내는 두 개의 UInt64 값으로 구성된 튜플입니다. Tuple(UInt64, UInt64)
  • arg1[, arg2, ...] — 해시를 계산할 대상이 되는 가변 개수의 입력 매개변수입니다. Any

반환 값

FixedString(16) 타입의 128비트 SipHash 해시 값입니다. FixedString(16)

예제

사용 예제

SELECT hex(sipHash128Keyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3));
┌─hex(sipHash128Keyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐
│ B8467F65C8B4CFD9A5F8BD733917D9BF                                              │
└───────────────────────────────────────────────────────────────────────────────┘

sipHash128Reference

도입된 버전: v23.2

sipHash128과 유사하지만, SipHash 원저자가 정의한 128비트 알고리즘을 구현합니다.

구문

sipHash128Reference(arg1[, arg2, ...])

인수

  • arg1[, arg2, ...] — 해시를 계산할 가변 개수의 입력 인수입니다. Any

반환 값

입력 인수에 대해 계산된 128비트 SipHash 해시 값을 반환합니다. FixedString(16)

예시

사용 예시

SELECT hex(sipHash128Reference('foo', '', 3));
┌─hex(sipHash128Reference('foo', '', 3))─┐
│ 4D1BE1A22D7F5933C0873E1698426260       │
└────────────────────────────────────────┘

sipHash128ReferenceKeyed

도입된 버전: v23.2

sipHash128Reference와 동일하지만, 고정 키를 사용하는 대신 명시적으로 지정하는 키 인수를 추가로 받습니다.

구문

sipHash128ReferenceKeyed((k0, k1), arg1[, arg2, ...])

인수

  • (k0, k1) — 키를 나타내는 두 값으로 구성된 튜플. Tuple(UInt64, UInt64)
  • arg1[, arg2, ...] — 해시를 계산할 때 사용할 가변 개수의 입력 인수. Any

반환 값

입력 인수들에 대해 계산된 128비트 SipHash 해시 값을 반환합니다. FixedString(16)

예시

사용 예시

SELECT hex(sipHash128Reference('foo', '', 3));
┌─hex(sipHash128Reference('foo', '', 3))─┐
│ 4D1BE1A22D7F5933C0873E1698426260       │
└────────────────────────────────────────┘

sipHash64

도입 버전: v1.1

64비트 SipHash 해시 값을 생성합니다.

이 함수는 암호화 해시 함수입니다. MD5 해시 함수보다 최소 3배 이상 빠르게 동작합니다.

함수는 모든 입력 매개변수를 문자열로 해석한 뒤 각각에 대해 해시 값을 계산합니다. 그 후 다음 알고리즘을 사용하여 해시들을 결합합니다:

  1. 첫 번째와 두 번째 해시 값을 배열로 이어 붙인 후, 이 배열을 해시합니다.
  2. 직전에 계산한 해시 값과 세 번째 입력 매개변수의 해시 값을 동일한 방식으로 다시 해시합니다.
  3. 이 계산을 원래 입력의 나머지 모든 해시 값에 대해 반복합니다.
참고

계산된 해시 값은 인수 타입이 다르더라도 동일한 입력 값에 대해 같을 수 있습니다. 예를 들어 크기가 다른 정수 타입, 동일한 데이터를 가진 이름 있는 Tuple과 이름 없는 Tuple, 동일한 데이터를 가진 Map과 이에 대응하는 Array(Tuple(key, value)) 타입 등이 이에 해당합니다.

구문

sipHash64(arg1[, arg2, ...])

인수(Arguments)

  • arg1[, arg2, ...] — 임의 개수의 입력 인수입니다. Any

반환 값

입력 인수의 해시값을 계산하여 반환합니다. UInt64

예시

사용 예시

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

sipHash64Keyed

도입된 버전: v23.2

sipHash64와 유사하지만, 고정 키를 사용하는 대신 키를 명시적으로 인수로 받습니다.

구문

sipHash64Keyed((k0, k1), arg1[,arg2, ...])

인수

  • (k0, k1) — 키를 나타내는 두 값의 튜플입니다. Tuple(UInt64, UInt64)
  • arg1[,arg2, ...] — 임의 개수의 입력 인수입니다. Any

반환 값

입력 값에 대해 계산된 해시를 반환합니다. UInt64

예시

사용 예시

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

wordShingleMinHash

도입 버전: v21.1

ASCII 문자열을 shinglesize 개의 단어로 이루어진 파트(shingle)로 분할하고, 각 단어 shingle에 대해 해시 값을 계산하여 이 해시들로 구성된 튜플을 반환합니다. hashnum개의 최소 해시를 사용하여 최소 해시를 계산하고, hashnum개의 최대 해시를 사용하여 최대 해시를 계산합니다. 대소문자를 구분합니다.

tupleHammingDistance를 사용하여 부분적으로 중복된 문자열을 감지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시가 동일하다면, 그 문자열들은 동일한 문자열입니다.

구문

wordShingleMinHash(string[, shinglesize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. word shingle의 크기이며 1부터 25까지의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과 계산에 사용되는 최소 및 최대 해시의 개수이며 1부터 25까지의 값입니다. 기본값은 6입니다. UInt8

반환 값

두 개의 해시 값(최솟값과 최댓값)이 포함된 튜플을 반환합니다. Tuple(UInt64, UInt64)

예시

사용 예시

SELECT wordShingleMinHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
┌─Tuple──────────────────────────────────────┐
│ (16452112859864147620,5844417301642981317) │
└────────────────────────────────────────────┘

wordShingleMinHashArg

도입 버전: v1.1

ASCII 문자열을 shinglesize 단어씩 이루어진 부분(shingle)으로 분할하고, 동일한 입력으로 wordShingleMinHash 함수에서 계산한 단어 해시 값 중 최소값과 최대값을 갖는 shingle들을 반환합니다. 이 함수는 대소문자를 구분합니다.

구문

wordShingleMinHashArg(string[, shinglesize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. word shingle의 크기이며, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과 계산에 사용되는 최소 및 최대 해시의 개수로, 1에서 25 사이의 값입니다. 기본값은 6입니다. UInt8

반환 값

각각 hashnum 개의 word shingle을 포함하는 두 개의 튜플을 요소로 가지는 튜플을 반환합니다. Tuple(Tuple(String))

예시

사용 예시

SELECT wordShingleMinHashArg('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
┌─Tuple─────────────────────────────────────────────────────────────────┐
│ (('OLAP','database','analytical'),('online','oriented','processing')) │
└───────────────────────────────────────────────────────────────────────┘

wordShingleMinHashArgCaseInsensitive

도입 버전: v21.1

ASCII 문자열을 각 shinglesize개 단어로 이루어진 shingle 파트로 분할하고, 동일한 입력에 대해 wordShingleMinHashCaseInsensitive 함수로 계산된 최소 단어 해시와 최대 단어 해시를 가지는 shingle을 반환합니다. 대소문자를 구분하지 않습니다.

구문

wordShingleMinHashArgCaseInsensitive(string[, shinglesize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. 단어 shingle(단어 조각)의 크기이며 1부터 25 사이의 값 중 하나를 사용할 수 있습니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시 개수로, 1부터 25 사이의 값 중 하나를 사용할 수 있습니다. 기본값은 6입니다. UInt8

반환 값

두 개의 튜플을 요소로 가지는 튜플을 반환하며, 각 튜플에는 hashnum개의 단어 shingle이 포함됩니다. Tuple(Tuple(String))

예시

사용 예시

SELECT wordShingleMinHashArgCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
┌─Tuple──────────────────────────────────────────────────────────────────┐
│ (('queries','database','analytical'),('oriented','processing','DBMS')) │
└────────────────────────────────────────────────────────────────────────┘

wordShingleMinHashArgCaseInsensitiveUTF8

도입 버전: v21.1

UTF-8 문자열을 shinglesize 단어씩 하나의 파트(shingle)로 분할하고, 동일한 입력에 대해 wordShingleMinHashCaseInsensitiveUTF8 함수로 계산된 최소 및 최대 단어 해시를 갖는 shingle들을 반환합니다. 대소문자를 구분하지 않습니다.

구문

wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum])

인자

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택적입니다. 단어 shingle의 크기이며, 1부터 25까지의 숫자입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택적입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수이며, 1부터 25까지의 숫자입니다. 기본값은 6입니다. UInt8

반환 값

각각 hashnum개의 단어 shingle을 포함하는 두 개의 튜플로 구성된 튜플을 반환합니다. Tuple(Tuple(String))

예시

사용 예시

SELECT wordShingleMinHashArgCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
┌─Tuple──────────────────────────────────────────────────────────────────┐
│ (('queries','database','analytical'),('oriented','processing','DBMS')) │
└────────────────────────────────────────────────────────────────────────┘

wordShingleMinHashArgUTF8

도입 버전: v21.1

UTF-8 문자열을 단어 shinglesize개로 이루어진 부분(shingle)으로 분할하고, 동일한 입력에 대해 wordShingleMinHashUTF8 함수로 계산된 최소 및 최대 단어 해시를 갖는 shingle을 반환합니다. 대소문자를 구분합니다.

구문

wordShingleMinHashArgUTF8(string[, shinglesize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. 단어 shingle의 크기이며, 1부터 25 사이의 숫자입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수이며, 1부터 25 사이의 숫자입니다. 기본값은 6입니다. UInt8

반환 값

두 개의 튜플을 요소로 가지는 튜플을 반환하며, 각 튜플에는 hashnum개의 단어 shingle이 포함됩니다. Tuple(Tuple(String))

예시

사용 예시

SELECT wordShingleMinHashArgUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
┌─Tuple─────────────────────────────────────────────────────────────────┐
│ (('OLAP','database','analytical'),('online','oriented','processing')) │
└───────────────────────────────────────────────────────────────────────┘

wordShingleMinHashCaseInsensitive

도입 버전: v21.1

ASCII 문자열을 shinglesize 단어로 이루어진 부분 문자열(shingle) 단위로 분할한 후, 각 단어 shingle에 대해 해시 값을 계산하고 이 해시들을 요소로 갖는 튜플을 반환합니다. 최소 해시 계산에는 hashnum개의 최소 해시를, 최대 해시 계산에는 hashnum개의 최대 해시를 사용합니다. 대소문자를 구분하지 않습니다.

tupleHammingDistance를 사용하여 유사 중복 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시 튜플이 동일하다면, 두 문자열은 동일한 문자열입니다.

구문

wordShingleMinHashCaseInsensitive(string[, shinglesize, hashnum])

인자

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. 단어 shingle의 크기로, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수로, 1에서 25 사이의 값입니다. 기본값은 6입니다. UInt8

반환 값

두 개의 해시(최솟값과 최댓값)를 포함하는 튜플을 반환합니다. Tuple(UInt64, UInt64)

예시

사용 예시

SELECT wordShingleMinHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
┌─Tuple─────────────────────────────────────┐
│ (3065874883688416519,1634050779997673240) │
└───────────────────────────────────────────┘

wordShingleMinHashCaseInsensitiveUTF8

도입 버전: v21.1

UTF-8 문자열을 shinglesize 단어로 이루어진 부분(shingle)으로 분할하고, 각 단어 shingle에 대해 해시 값을 계산한 뒤 이 해시들을 포함하는 튜플을 반환합니다. hashnum개의 최소 해시를 사용하여 최소 해시를, hashnum개의 최대 해시를 사용하여 최대 해시를 계산합니다. 대소문자를 구분하지 않습니다.

tupleHammingDistance를 사용하여 부분 중복 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 반환된 해시가 동일하다면, 두 문자열은 동일한 것으로 간주할 수 있습니다.

구문

wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. 단어 shingle의 길이로, 1부터 25까지의 값이 가능합니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과 계산에 사용하는 최소 및 최대 해시의 개수로, 1부터 25까지의 값이 가능합니다. 기본값은 6입니다. UInt8

반환 값

최솟값과 최댓값 두 개의 해시를 포함하는 튜플을 반환합니다. Tuple(UInt64, UInt64)

예시

사용 예시

SELECT wordShingleMinHashCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
┌─Tuple─────────────────────────────────────┐
│ (3065874883688416519,1634050779997673240) │
└───────────────────────────────────────────┘

wordShingleMinHashUTF8

도입 버전: v21.1

UTF-8 문자열을 shinglesize 단어로 이루어진 shingle(부분 문자열)로 분할하고, 각 워드 shingle의 해시 값을 계산한 뒤 이 해시들을 포함하는 튜플을 반환합니다. 최소 해시를 계산하기 위해 hashnum개의 최소 해시를 사용하고, 최대 해시를 계산하기 위해 hashnum개의 최대 해시를 사용합니다. 대소문자를 구분합니다.

tupleHammingDistance를 사용하여 유사한(반복되는 부분이 많은) 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해, 반환된 해시가 두 문자열에서 모두 동일하다면, 해당 문자열은 동일한 것으로 간주할 수 있습니다.

구문

wordShingleMinHashUTF8(string[, shinglesize, hashnum])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. word shingle의 크기이며, 1부터 25까지의 값입니다. 기본값은 3입니다. UInt8
  • hashnum — 선택 사항입니다. 결과를 계산하는 데 사용되는 최소 및 최대 해시의 개수이며, 1부터 25까지의 값입니다. 기본값은 6입니다. UInt8

반환 값

최소 해시와 최대 해시, 두 개의 해시 값으로 구성된 튜플을 반환합니다. Tuple(UInt64, UInt64)

예시

사용 예시

SELECT wordShingleMinHashUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
┌─Tuple──────────────────────────────────────┐
│ (16452112859864147620,5844417301642981317) │
└────────────────────────────────────────────┘

wordShingleSimHash

도입 버전: v21.1

ASCII 문자열을 shinglesize개의 단어로 이루어진 시글(shingle) 단위로 분할하고, 각 단어 시글의 simhash를 반환합니다. 대소문자를 구분합니다.

bitHammingDistance를 사용하여 부분적으로 중복된 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming distance)가 작을수록, 두 문자열이 동일한 문자열일 가능성이 더 높습니다.

구문

wordShingleSimHash(string[, shinglesize])

인수(Arguments)

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 인수입니다. 워드 shingle(단어 묶음)의 크기로, 1부터 25 사이의 값을 사용합니다. 기본값은 3입니다. UInt8

반환 값(Returned value)

계산된 해시값을 반환합니다. UInt64

예시(Examples)

사용 예시(Usage example)

SELECT wordShingleSimHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
┌───────Hash─┐
│ 2328277067 │
└────────────┘

wordShingleSimHashCaseInsensitive

도입 버전: v21.1

ASCII 문자열을 shinglesize 개의 단어로 이루어진 부분 문자열(shingle)로 분할하고, 해당 단어 shingle의 simhash를 반환합니다. 대소문자를 구분하지 않습니다.

bitHammingDistance를 사용하여 부분적으로 중복된 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming distance)가 작을수록 두 문자열이 같을 가능성이 더 높습니다.

구문

wordShingleSimHashCaseInsensitive(string[, shinglesize])

인수(Arguments)

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. 단어 shingle의 크기로, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8

반환 값(Returned value)

계산된 해시 값을 반환합니다. UInt64

예제(Examples)

사용 예(Usage example)

SELECT wordShingleSimHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
┌───────Hash─┐
│ 2194812424 │
└────────────┘

wordShingleSimHashCaseInsensitiveUTF8

도입: v1.1

UTF-8로 인코딩된 문자열을 shinglesize 단어 길이의 파트(shingle)로 분할하고, 단어 shingle의 simhash를 반환합니다. 대소문자를 구분하지 않습니다.

bitHammingDistance를 사용해 부분적으로 중복된 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리(Hamming Distance)가 작을수록 두 문자열이 동일할 가능성이 높습니다.

구문

wordShingleSimHashCaseInsensitiveUTF8(string[, shinglesize])

인수

  • string — 해시를 계산할 대상 문자열입니다. String
  • shinglesize — 선택적 인수입니다. 단어 shingle의 크기이며, 1에서 25 사이의 값입니다. 기본값은 3입니다. UInt8

반환 값

계산된 해시 값을 반환합니다. UInt64

예시

사용 예시

SELECT wordShingleSimHashCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
┌───────Hash─┐
│ 2194812424 │
└────────────┘

wordShingleSimHashUTF8

도입 버전: v21.1

UTF-8 문자열을 shinglesize 단어 크기의 파트(shingle)로 분할한 뒤, 단어 shingle의 simhash를 반환합니다. 대소문자를 구분합니다.

bitHammingDistance를 사용하여 부분적으로 중복된 문자열을 탐지하는 데 사용할 수 있습니다. 두 문자열에 대해 계산된 simhashes해밍 거리가 작을수록 두 문자열이 동일할 가능성이 더 높습니다.

구문

wordShingleSimHashUTF8(string[, shinglesize])

인수

  • string — 해시를 계산할 문자열입니다. String
  • shinglesize — 선택 사항입니다. 단어 shingle의 크기로, 1부터 25까지의 숫자를 사용할 수 있습니다. 기본값은 3입니다. UInt8

반환 값

계산된 해시 값을 반환합니다. UInt64

예시

사용 예시

SELECT wordShingleSimHashUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
┌───────Hash─┐
│ 2328277067 │
└────────────┘

wyHash64

도입 버전: v22.7

64비트 wyHash64 해시값을 계산합니다.

구문

wyHash64(arg)

인자

  • arg — 해시를 계산할 문자열 인자입니다. String

반환 값

계산된 64비트 해시값 UInt64을 반환합니다.

예시

사용 예시

SELECT wyHash64('ClickHouse') AS Hash;
12336419557878201794

xxHash32

도입 버전: v20.1

문자열에 대해 xxHash를 계산합니다.

64비트 버전은 xxHash64를 참조하십시오.

구문

xxHash32(arg)

인수

  • arg — 해시할 입력 문자열입니다. String

반환 값

입력 문자열의 계산된 32비트 해시 값을 반환합니다. UInt32

예제

사용 예제

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

xxHash64

도입 버전: v20.1

문자열에 대한 xxHash를 계산합니다.

32비트 버전은 xxHash32를 참조하십시오.

구문

xxHash64(arg)

인수

  • arg — 해시할 입력 문자열입니다. String

반환 값

입력 문자열에 대해 계산된 64비트 해시값을 반환합니다. UInt64

예제

사용 예제

SELECT xxHash64('Hello, world!');
┌─xxHash64('Hello, world!')─┐
│      17691043854468224118 │
└───────────────────────────┘

xxh3

도입된 버전: v22.12

XXH3 64비트 해시값을 계산합니다.

구문

xxh3(expr)

인수

  • expr — 임의의 데이터 타입의 표현식 목록입니다. Any

반환 값

계산된 64비트 xxh3 해시 값인 UInt64을 반환합니다.

예시

사용 예시

SELECT xxh3('ClickHouse')
18009318874338624809

xxh3_128

도입 버전: v26.2

XXH3 128비트 해시값을 계산합니다.

문법

xxh3_128(expr)

인수

  • expr — 임의의 데이터 타입의 표현식 목록입니다. Any

반환 값

계산된 128비트 xxh3 해시 값인 UInt128을 반환합니다.

예시

사용 예시

SELECT hex(xxh3_128('ClickHouse'))
3A038784C52804B4DBA43A038784C528