해시 함수
해시 함수 (Hash Functions)
해시 함수는 요소를 결정적(deterministic)인 의사 난수로 셔플하는 데 사용할 수 있어요.
Simhash는 해시 함수인데, 가깝거나 비슷한 인자에 대해 가까운 해시 값을 반환해요.
대부분의 해시 함수는 임의의 타입 인자를 임의 개수로 받아들여요.
참고: NULL의 해시는 NULL이에요. Nullable 컬럼의 non-NULL 해시를 얻으려면 튜플로 감싸세요:
SELECT cityHash64(tuple(NULL))
참고: 테이블 전체 내용의 해시를 계산하려면
sum(cityHash64(tuple(*)))(또는 다른 해시 함수)을 사용하세요.tuple은 NULL 값이 있는 행이 건너뛰어지지 않게 보장해요.sum은 행의 순서가 중요하지 않음을 보장해요.
출처: 문서
본문
BLAKE3
도입: v22.10.0
BLAKE3 해시 문자열을 계산해 결과 바이트 집합을 FixedString으로 반환해요. 이 암호화 해시 함수는 BLAKE3 Rust 라이브러리로 ClickHouse에 통합됐어요. 이 함수는 꽤 빠르며 SHA-2보다 약 두 배 빠른 성능을 보이면서도 SHA-256과 같은 길이의 해시를 생성해요. BLAKE3 해시를 FixedString(32) 타입의 바이트 배열로 반환해요.
구문 (Syntax)
BLAKE3(message)
인자 (Arguments)
message— 해시할 입력 문자열.String
반환 값 (Returned value)
입력 문자열의 32바이트 BLAKE3 해시를 고정 길이 문자열로 반환해요. FixedString(32)
예시 (Examples)
SELECT hex(BLAKE3('ABC'))
┌─hex(BLAKE3('ABC'))───────────────────────────────┐
│ D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC │
└──────────────────────────────────────────────────┘
MD4
도입: v21.11.0
주어진 문자열의 MD4 해시를 계산해요.
구문 (Syntax)
MD4(s)
반환 값 (Returned value)
주어진 입력 문자열의 MD4 해시를 고정 길이 문자열로 반환해요. FixedString(16)
예시 (Examples)
SELECT HEX(MD4('abc'));
┌─HEX(MD4('abc'))──────────────────┐
│ A448017AAF21D8525FC10AE87AA6729D │
└──────────────────────────────────┘
MD5
도입: v1.1.0
주어진 문자열의 MD5 해시를 계산해요.
구문 (Syntax)
MD5(s)
반환 값 (Returned value)
주어진 입력 문자열의 MD5 해시를 고정 길이 문자열로 반환해요. FixedString(16)
예시 (Examples)
SELECT HEX(MD5('abc'));
┌─HEX(MD5('abc'))──────────────────┐
│ 900150983CD24FB0D6963F7D28E17F72 │
└──────────────────────────────────┘
RIPEMD160
도입: v24.10.0
주어진 문자열의 RIPEMD-160 해시를 계산해요.
구문 (Syntax)
RIPEMD160(s)
반환 값 (Returned value)
주어진 입력 문자열의 RIPEMD160 해시를 고정 길이 문자열로 반환해요. FixedString(20)
예시 (Examples)
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.0
주어진 문자열의 SHA1 해시를 계산해요.
구문 (Syntax)
SHA1(s)
반환 값 (Returned value)
주어진 입력 문자열의 SHA1 해시를 고정 길이 문자열로 반환해요. FixedString(20)
예시 (Examples)
SELECT HEX(SHA1('abc'));
┌─HEX(SHA1('abc'))─────────────────────────┐
│ A9993E364706816ABA3E25717850C26C9CD0D89D │
└──────────────────────────────────────────┘
SHA224
도입: v1.1.0
주어진 문자열의 SHA224 해시를 계산해요.
구문 (Syntax)
SHA224(s)
반환 값 (Returned value)
주어진 입력 문자열의 SHA224 해시를 고정 길이 문자열로 반환해요. FixedString(28)
예시 (Examples)
SELECT HEX(SHA224('abc'));
┌─HEX(SHA224('abc'))───────────────────────────────────────┐
│ 23097D223405D8228642A477BDA255B32AADBCE4BDA0B3F7E36C9DA7 │
└──────────────────────────────────────────────────────────┘
SHA256
도입: v1.1.0
주어진 문자열의 SHA256 해시를 계산해요.
구문 (Syntax)
SHA256(s)
반환 값 (Returned value)
주어진 입력 문자열의 SHA256 해시를 고정 길이 문자열로 반환해요. FixedString(32)
예시 (Examples)
SELECT HEX(SHA256('abc'));
┌─HEX(SHA256('abc'))───────────────────────────────────────────────┐
│ BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD │
└──────────────────────────────────────────────────────────────────┘
SHA384
도입: v1.1.0
주어진 문자열의 SHA384 해시를 계산해요.
구문 (Syntax)
SHA384(s)
반환 값 (Returned value)
주어진 입력 문자열의 SHA384 해시를 고정 길이 문자열로 반환해요. FixedString(48)
예시 (Examples)
SELECT HEX(SHA384('abc'));
┌─HEX(SHA384('abc'))──────────────────────────────────────────────────────────────────────────────────┐
│ CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7 │
└────────────────────────────────────────────────────────────────────────────────────────────────────┘
SHA512
도입: v1.1.0
주어진 문자열의 SHA512 해시를 계산해요.
구문 (Syntax)
SHA512(s)
반환 값 (Returned value)
주어진 입력 문자열의 SHA512 해시를 고정 길이 문자열로 반환해요. FixedString(64)
예시 (Examples)
SELECT HEX(SHA512('abc'));
┌─HEX(SHA512('abc'))───────────────────────────────────────────────────────────────────────────────────────────────┐
│ DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
SHA512_256
도입: v1.1.0
주어진 문자열의 SHA512_256 해시를 계산해요.
구문 (Syntax)
SHA512_256(s)
반환 값 (Returned value)
주어진 입력 문자열의 SHA512_256 해시를 고정 길이 문자열로 반환해요. FixedString(32)
예시 (Examples)
SELECT HEX(SHA512_256('abc'));
┌─HEX(SHA512_256('abc'))───────────────────────────────────────────┐
│ 53048E2681941EF99B2E29B76B4C7DABE4C2D0C634FC6D46E0E2F13107E7AF23 │
└──────────────────────────────────────────────────────────────────┘
URLHash
도입: v1.1.0
어떤 종류의 정규화를 사용해 URL에서 얻은 문자열에 대한 빠르고 괜찮은 품질의 비암호화 해시 함수예요.
이 해시 함수는 두 가지 모드가 있어요:
| 모드 | 설명 |
|---|---|
| URLHash(url) | 끝에 있는 /,? 또는 # 같은 후행 기호 하나를 제외한 문자열에서 해시를 계산해요(있을 경우). |
| URLHash(url, N) | URL 계층 구조의 N 단계까지의 문자열에서 해시를 계산하며, 끝에 있는 /,? 또는 # 같은 후행 기호 하나를 제외해요(있을 경우). 단계는 URLHierarchy와 동일해요. |
구문 (Syntax)
URLHash(url[, N])
인자 (Arguments)
url— 해시할 URL 문자열.StringN— 선택 사항. URL 계층 구조에서의 단계.(U)Int*
반환 값 (Returned value)
url의 계산된 해시 값을 반환해요. UInt64
예시 (Examples)
SELECT URLHash('https://www.clickhouse.com')
┌─URLHash('https://www.clickhouse.com')─┐
│ 13614512636072854701 │
└───────────────────────────────────────┘
지정 단계의 url 해시:
SELECT URLHash('https://www.clickhouse.com/docs', 0);
SELECT URLHash('https://www.clickhouse.com/docs', 1);
13614512636072854701
13167253331440520598
cityHash64
도입: v1.1.0
64비트 CityHash 해시 값을 생성해요.
이것은 빠른 비암호화 해시 함수예요. 문자열 파라미터에는 CityHash 알고리즘을, 다른 데이터 타입 파라미터에는 구현 특유의 빠른 비암호화 해시 함수를 사용해요. 최종 결과를 얻기 위해 CityHash 컴비네이터를 사용해요.
info: Google은 ClickHouse에 추가된 후 CityHash 알고리즘을 변경했어요. 다시 말해, ClickHouse의 cityHash64와 Google 업스트림 CityHash는 이제 다른 결과를 생성해요. ClickHouse cityHash64는 CityHash v1.0.2에 해당해요.
참고: 서로 다른 인자 타입의 같은 입력 값에 대해 계산된 해시 값이 같을 수 있어요. 이는 예를 들어 크기가 다른 정수 타입, 같은 데이터의 named/unnamed
Tuple, 같은 데이터의Map과 해당Array(Tuple(key, value))타입에 영향을 줘요.
구문 (Syntax)
cityHash64(arg1[, arg2, ...])
인자 (Arguments)
arg1[, arg2, ...]— 해시를 계산할 가변 개수의 입력 인자.Any
반환 값 (Returned value)
입력 인자의 계산된 해시. UInt64
예시 (Examples)
SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type;
┌─────────────CityHash─┬─type───┐
│ 17177535963988450974 │ 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(cityHash64(id, name, age, city))─┐
│ 11639977218258521182 │
└──────────────────────────────────────────────┘
farmFingerprint64
도입: v20.12.0
Fingerprint64 메서드를 사용해 64비트 FarmHash 값을 생성해요.
tip: 안정적이고 이식 가능한 값에는
farmFingerprint64가 선호돼요.
참고: 서로 다른 인자 타입의 같은 입력 값에 대해 계산된 해시 값이 같을 수 있어요.
구문 (Syntax)
farmFingerprint64(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt64
예시 (Examples)
SELECT farmFingerprint64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmFingerprint, toTypeName(FarmFingerprint) AS type;
┌──────FarmFingerprint─┬─type───┐
│ 16673609057812504858 │ UInt64 │
└──────────────────────┴────────┘
farmHash64
도입: v1.1.0
Hash64 메서드를 사용해 64비트 FarmHash를 생성해요.
구문 (Syntax)
farmHash64(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt64
예시 (Examples)
SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type;
┌────────────FarmHash─┬─type───┐
│ 2663412879246289891 │ UInt64 │
└─────────────────────┴────────┘
gccMurmurHash
도입: v20.1.0
GCC에서 사용하는 것과 같은 시드를 사용해 입력 값의 64비트 MurmurHash2 해시를 계산해요.
Clang과 GCC 빌드 간에 이식 가능해요.
구문 (Syntax)
gccMurmurHash(arg1[, arg2, ...])
인자 (Arguments)
arg1[, arg2, ...]— 해시를 계산할 가변 개수의 인자.Any
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt64
예시 (Examples)
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.0
모든 입력 파라미터를 해석해 문자열로 보고 각각의 MD5 해시 값을 계산해요. 그런 다음 해시를 결합해, 결과 문자열의 해시의 처음 8바이트를 빅엔디안 바이트 순서의 UInt64로 해석해요. 이 함수는 비교적 느려요(코어당 초당 5백만 개의 짧은 문자열).
cityHash64 함수를 대신 사용하는 걸 고려하세요.
이 함수는 가변 개수의 입력 파라미터를 받아요. 인자는 지원되는 데이터 타입 중 어떤 것이든 될 수 있어요. 일부 데이터 타입에서는 인자 타입이 달라도 같은 값이면 계산된 해시 값이 같을 수 있어요.
구문 (Syntax)
halfMD5(arg1[, arg2, ..., argN])
반환 값 (Returned value)
빅엔디안 바이트 순서의 UInt64로 반환되는, 주어진 입력 파라미터의 계산된 half MD5 해시. UInt64
예시 (Examples)
SELECT HEX(halfMD5('abc', 'cde', 'fgh'));
┌─HEX(halfMD5('abc', 'cde', 'fgh'))─┐
│ 2C9506B7374CFAF4 │
└───────────────────────────────────┘
hiveHash
도입: v20.1.0
문자열에서 "HiveHash"를 계산해요. 이것은 부호 비트를 0으로 만든 javaHash일 뿐이에요. 이 함수는 Apache Hive 3.0 이전 버전에서 사용돼요.
warning: 이 해시 함수는 성능이 좋지 않아요. 이 알고리즘을 다른 시스템에서 이미 사용 중이고 같은 결과를 계산해야 할 때만 사용하세요.
구문 (Syntax)
hiveHash(arg)
반환 값 (Returned value)
입력 문자열의 계산된 "hive hash". Int32
예시 (Examples)
SELECT hiveHash('Hello, world!');
┌─hiveHash('Hello, world!')─┐
│ 267439093 │
└───────────────────────────┘
icebergHash
도입: v25.5.0
iceberg의 해싱 변환 로직을 구현해요.
구문 (Syntax)
icebergHash(value)
인자 (Arguments)
value— 해시할 소스 값Integer또는Bool또는Decimal또는Float*또는String또는FixedString또는UUID또는Date또는Time또는DateTime
반환 값 (Returned value)
0으로 시드되는 32비트 Murmur3 해시, x86 변형을 반환해요 Int32
예시 (Examples)
SELECT icebergHash(1.0 :: Float32)
-142385009
intHash32
도입: v1.1.0
정수의 32비트 해시를 계산해요.
해시 함수는 비교적 빠르지만 암호화 해시 함수는 아니에요.
구문 (Syntax)
intHash32(arg)
인자 (Arguments)
arg— 해시할 정수.(U)Int*
반환 값 (Returned value)
입력 정수의 계산된 32비트 해시 코드 UInt32
예시 (Examples)
SELECT intHash32(42);
┌─intHash32(42)─┐
│ 1228623923 │
└───────────────┘
intHash64
도입: v1.1.0
정수의 64비트 해시를 계산해요.
해시 함수는 비교적 빠르지만 암호화 해시 함수는 아니에요.
구문 (Syntax)
intHash64(int)
인자 (Arguments)
int— 해시할 정수.(U)Int*
반환 값 (Returned value)
64비트 해시 코드. UInt64
예시 (Examples)
SELECT intHash64(42);
┌────────intHash64(42)─┐
│ 11490350930367293593 │
└──────────────────────┘
javaHash
도입: v20.1.0
다음에서 JavaHash를 계산해요:
- 문자열,
- Byte,
- Short,
- Integer,
- Long.
warning: 이 해시 함수는 성능이 좋지 않아요. 이 알고리즘을 다른 시스템에서 이미 사용 중이고 같은 결과를 계산해야 할 때만 사용하세요.
참고: Java는 부호 있는 정수의 해시 계산만 지원해요. 따라서 부호 없는 정수의 해시를 계산하려면 적절한 부호 있는 ClickHouse 타입으로 캐스팅해야 해요.
구문 (Syntax)
javaHash(arg)
인자 (Arguments)
arg— 해시할 입력 값.Any
반환 값 (Returned value)
arg의 계산된 해시 Int32
예시 (Examples)
SELECT javaHash(toInt32(123));
┌─javaHash(toInt32(123))─┐
│ 123 │
└────────────────────────┘
SELECT javaHash('Hello, world!');
┌─javaHash('Hello, world!')─┐
│ -1880044555 │
└───────────────────────────┘
javaHashUTF16LE
도입: v20.1.0
문자열이 UTF-16LE 인코딩 문자열을 나타내는 바이트를 포함한다고 가정해 JavaHash를 계산해요.
구문 (Syntax)
javaHashUTF16LE(arg)
인자 (Arguments)
arg— UTF-16LE 인코딩 문자열.String
반환 값 (Returned value)
UTF-16LE 인코딩 문자열의 계산된 해시. Int32
예시 (Examples)
SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'));
┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐
│ 3556498 │
└──────────────────────────────────────────────────────────────┘
jumpConsistentHash
도입: v1.1.0
정수에 대한 jump consistent hash를 계산해요.
구문 (Syntax)
jumpConsistentHash(key, buckets)
인자 (Arguments)
key— 입력 키.UInt64buckets— 버킷 수.Int32
반환 값 (Returned value)
계산된 해시 값. Int32
예시 (Examples)
SELECT jumpConsistentHash(256, 4)
┌─jumpConsistentHash(256, 4)─┐
│ 3 │
└────────────────────────────┘
kafkaMurmurHash
도입: v23.4.0
Kafka에서 사용하는 것과 같은 시드를 사용하고, Default Partitioner와 호환되도록 최상위 비트를 빼고 입력 값의 32비트 MurmurHash2 해시를 계산해요.
구문 (Syntax)
kafkaMurmurHash(arg1[, arg2, ...])
인자 (Arguments)
arg1[, arg2, ...]— 해시를 계산할 가변 개수의 파라미터.Any
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt32
예시 (Examples)
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.0
주어진 문자열의 Keccak-256 암호화 해시를 계산해요. 이 해시 함수는 블록체인 애플리케이션, 특히 이더리움에서 널리 사용돼요.
구문 (Syntax)
keccak256(message)
인자 (Arguments)
message— 해시할 입력 문자열.String
반환 값 (Returned value)
입력 문자열의 32바이트 Keccak-256 해시를 고정 길이 문자열로 반환해요. FixedString(32)
예시 (Examples)
SELECT hex(keccak256('hello'))
┌─hex(keccak256('hello'))──────────────────────────────────────────┐
│ 1C8AFF950685C2ED4BC3174F3472287B56D9517B9C948127319A09A7A36DEAC8 │
└──────────────────────────────────────────────────────────────────┘
kostikConsistentHash
도입: v22.6.0
Konstantin 'Kostik' Oblakov의 O(1) 시간·공간 일관 해시 알고리즘이에요. n <= 32768에서만 효율적이에요.
구문 (Syntax)
kostikConsistentHash(input, n)
별칭 (Aliases): yandexConsistentHash
인자 (Arguments)
input— 정수 키.UInt64n— 버킷 수.UInt16
반환 값 (Returned value)
계산된 해시 값. UInt16
예시 (Examples)
SELECT kostikConsistentHash(16045690984833335023, 2);
┌─kostikConsistentHash(16045690984833335023, 2)─┐
│ 1 │
└───────────────────────────────────────────────┘
metroHash64
도입: v1.1.0
64비트 MetroHash 해시 값을 생성해요.
구문 (Syntax)
metroHash64(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시. UInt64
예시 (Examples)
SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type;
┌────────────MetroHash─┬─type───┐
│ 16292826582821303855 │ UInt64 │
└──────────────────────┴────────┘
murmurHash2_32
도입: v18.5.0
입력 값의 MurmurHash2 해시를 계산해요.
구문 (Syntax)
murmurHash2_32(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt32
예시 (Examples)
SELECT murmurHash2_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type;
┌─MurmurHash2─┬─type───┐
│ 2947095100 │ UInt32 │
└─────────────┴────────┘
murmurHash2_64
도입: v18.10.0
입력 값의 MurmurHash2 해시를 계산해요.
구문 (Syntax)
murmurHash2_64(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시. UInt64
예시 (Examples)
SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type;
┌──────────MurmurHash2─┬─type───┐
│ 16479669305841206229 │ UInt64 │
└──────────────────────┴────────┘
murmurHash3_128
도입: v18.10.0
입력 값의 128비트 MurmurHash3 해시를 계산해요.
구문 (Syntax)
murmurHash3_128(arg1[, arg2, ...])
인자 (Arguments)
arg1[, arg2, ...]— 해시를 계산할 가변 개수의 입력 인자.Any
반환 값 (Returned value)
입력 인자의 계산된 128비트 MurmurHash3 해시 값. FixedString(16)
예시 (Examples)
SELECT hex(murmurHash3_128('foo', 'foo', 'foo'));
┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐
│ F8F7AD9B6CD4CF117A71E277E2EC2931 │
└───────────────────────────────────────────┘
murmurHash3_32
도입: v18.10.0
MurmurHash3 해시 값을 생성해요.
구문 (Syntax)
murmurHash3_32(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt32
예시 (Examples)
SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;
┌─MurmurHash3─┬─type───┐
│ 317985299 │ UInt32 │
└─────────────┴────────┘
murmurHash3_64
도입: v18.10.0
입력 값의 MurmurHash3 해시를 계산해요.
구문 (Syntax)
murmurHash3_64(arg1[, arg2, ...])
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt64
예시 (Examples)
SELECT murmurHash3_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;
┌──────────MurmurHash3─┬─type───┐
│ 11285022984631508790 │ UInt64 │
└──────────────────────┴────────┘
ngramMinHash / ngramMinHashCaseInsensitive / ngramMinHashUTF8 / ngramMinHashCaseInsensitiveUTF8
도입: v21.1.0
ASCII 문자열(ngramMinHash) 또는 UTF-8 문자열(UTF-8 변형)을 ngramsize 기호의 n-gram으로 분할하고, 각 n-gram의 해시 값을 계산해 이 해시들의 튜플을 반환해요. 최소 해시를 계산하는 데 hashnum개의 최소 해시와, 최대 해시를 계산하는 데 hashnum개의 최대 해시를 사용해요. ngramMinHash과 ngramMinHashUTF8은 대소문자를 구분하고, CaseInsensitive 변형은 대소문자를 구분하지 않아요.
tupuleHammingDistance로 반중복 문자열을 감지하는 데 사용할 수 있어요. 두 문자열에 대해 반환된 해시가 두 문자열 모두 같으면 그 문자열들은 같은 것이에요.
구문 (Syntax)
ngramMinHash(string[, ngramsize, hashnum])
ngramMinHashCaseInsensitive(string[, ngramsize, hashnum])
ngramMinHashUTF8(string[, ngramsize, hashnum])
ngramMinHashCaseInsensitiveUTF8(string[, ngramsize, hashnum])
인자 (Arguments)
string— 해시를 계산할 문자열.Stringngramsize— 선택 사항. n-gram의 크기,1부터25사이의 임의 숫자. 기본값3.UInt8hashnum— 선택 사항. 결과 계산에 사용되는 최소·최대 해시 수,1부터25사이의 임의 숫자. 기본값6.UInt8
반환 값 (Returned value)
최소와 최대 두 해시를 가진 튜플. Tuple
ngramMinHashArg / ngramMinHashArgCaseInsensitive / ngramMinHashArgUTF8 / ngramMinHashArgCaseInsensitiveUTF8
도입: v21.1.0
ASCII 문자열(ngramMinHashArg) 또는 UTF-8 문자열(UTF-8 변형)을 ngramsize 기호의 n-gram으로 분할하고, 같은 입력으로 계산된 ngramMinHash 함수의 최소·최대 해시를 가진 n-gram을 반환해요. CaseInsensitive 변형은 대소문자를 구분하지 않아요.
구문 (Syntax)
ngramMinHashArg(string[, ngramsize, hashnum])
ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum])
ngramMinHashArgUTF8(string[, ngramsize, hashnum])
ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum])
인자 (Arguments)
string— 해시를 계산할 문자열.Stringngramsize— 선택 사항. n-gram의 크기,1부터25사이. 기본값3.UInt8hashnum— 선택 사항. 결과 계산에 사용되는 최소·최대 해시 수,1부터25사이. 기본값6.UInt8
반환 값 (Returned value)
각각 hashnum개의 n-gram을 가진 두 튜플을 가진 튜플. Tuple(String) / Tuple(Tuple(String))
ngramSimHash / ngramSimHashCaseInsensitive / ngramSimHashUTF8 / ngramSimHashCaseInsensitiveUTF8
도입: v21.1.0
ASCII 문자열(ngramSimHash) 또는 UTF-8 문자열(UTF-8 변형)을 ngramsize 기호의 n-gram으로 분할하고 n-gram simhash를 반환해요. CaseInsensitive 변형은 대소문자를 구분하지 않아요.
bitHammingDistance로 반중복 문자열 감지에 사용할 수 있어요. 두 문자열의 계산된 simhash의 해밍 거리가 작을수록 두 문자열이 같을 가능성이 커요.
구문 (Syntax)
ngramSimHash(string[, ngramsize])
ngramSimHashCaseInsensitive(string[, ngramsize])
ngramSimHashUTF8(string[, ngramsize])
ngramSimHashCaseInsensitiveUTF8(string[, ngramsize])
인자 (Arguments)
string— 대소문자 구분(또는 무시)simhash를 계산할 문자열.Stringngramsize— 선택 사항. n-gram의 크기,1부터25사이. 기본값3.UInt8
반환 값 (Returned value)
입력 문자열의 계산된 해시. UInt64
sipHash128
도입: v1.1.0
sipHash64와 같지만 128비트 해시 값을 생성해요. 즉 최종 xor-folding 상태가 128비트까지 수행돼요.
tip: 이 128비트 변형은 참조 구현과 다르고 더 약해요. 작성 당시 SipHash에 공식 128비트 확장이 없었기 때문에 이 버전이 존재해요. 새 프로젝트는
sipHash128Reference사용을 권장해요.
구문 (Syntax)
sipHash128(arg1[, arg2, ...])
인자 (Arguments)
arg1[, arg2, ...]— 해시를 계산할 가변 개수의 입력 인자.Any
반환 값 (Returned value)
128비트 SipHash 해시 값. FixedString(16)
예시 (Examples)
SELECT hex(sipHash128('foo', '\x01', 3)) AS res;
┌─res──────────────────────────────┐
│ 9DE516A64A414D4B1B609415E4523F24 │
└──────────────────────────────────┘
sipHash128Keyed
도입: v23.2.0
sipHash128과 같지만 고정 키 대신 명시적 키 인자를 추가로 받아요.
tip: 이 128비트 변형은 참조 구현과 다르고 더 약해요. 새 프로젝트는
sipHash128ReferenceKeyed를 사용해야 해요.
구문 (Syntax)
sipHash128Keyed((k0, k1), [arg1, arg2, ...])
인자 (Arguments)
(k0, k1)— 키를 나타내는 두 UInt64 값의 튜플.Tuple(UInt64, UInt64)arg1[, arg2, ...]— 해시를 계산할 가변 개수의 입력 인자.Any
반환 값 (Returned value)
FixedString(16) 타입의 128비트 SipHash 해시 값. FixedString(16)
sipHash128Reference / sipHash128ReferenceKeyed
도입: v23.2.0
sipHash128과 같지만 SipHash의 원저자가 구현한 128비트 알고리즘을 구현해요. Keyed 변형은 고정 키 대신 명시적 키 (k0, k1)를 받아요.
구문 (Syntax)
sipHash128Reference(arg1[, arg2, ...])
sipHash128ReferenceKeyed((k0, k1), arg1[, arg2, ...])
인자 (Arguments)
(k0, k1)— 키를 나타내는 두 값의 튜플Tuple(UInt64, UInt64)arg1[, arg2, ...]— 해시를 계산할 가변 개수의 입력 인자.Any
반환 값 (Returned value)
입력 인자의 계산된 128비트 SipHash 해시 값. FixedString(16)
sipHash64
도입: v1.1.0
64비트 SipHash 해시 값을 생성해요.
이것은 암호화 해시 함수예요. MD5 해시 함수보다 최소 세 배 빠르게 동작해요.
이 함수는 모든 입력 파라미터를 해석해 문자열로 보고 각각의 해시 값을 계산해요. 그런 다음 다음 알고리즘으로 해시를 결합해요:
- 첫 번째와 두 번째 해시 값을 배열로 연결해 해시해요.
- 이전에 계산된 해시 값과 세 번째 입력 파라미터의 해시를 비슷한 방식으로 해시해요.
- 이 계산을 원래 입력의 나머지 모든 해시 값에 대해 반복해요.
참고: 서로 다른 인자 타입의 같은 입력 값에 대해 계산된 해시 값이 같을 수 있어요.
구문 (Syntax)
sipHash64(arg1[, arg2, ...])
인자 (Arguments)
arg1[, arg2, ...]— 가변 개수의 입력 인자.Any
반환 값 (Returned value)
입력 인자의 계산된 해시 값. UInt64
예시 (Examples)
SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type;
┌──────────────SipHash─┬─type───┐
│ 11348918044846389429 │ UInt64 │
└──────────────────────┴────────┘
sipHash64Keyed
도입: v23.2.0
sipHash64과 같지만 고정 키 대신 명시적 키 인자를 추가로 받아요.
구문 (Syntax)
sipHash64Keyed((k0, k1), arg1[,arg2, ...])
인자 (Arguments)
(k0, k1)— 키를 나타내는 두 값의 튜플.Tuple(UInt64, UInt64)arg1[,arg2, ...]— 가변 개수의 입력 인자.Any
반환 값 (Returned value)
입력 값의 계산된 해시. UInt64
wordShingleMinHash / wordShingleMinHashCaseInsensitive / wordShingleMinHashUTF8 / wordShingleMinHashCaseInsensitiveUTF8
도입: v21.1.0
ASCII 문자열(wordShingleMinHash) 또는 UTF-8 문자열(UTF-8 변형)을 shinglesize 단어의 부분(shingle)으로 분할하고, 각 단어 shingle의 해시 값을 계산해 이 해시들의 튜플을 반환해요. 최소 해시를 계산하는 데 hashnum개의 최소 해시를, 최대 해시를 계산하는 데 hashnum개의 최대 해시를 사용해요. CaseInsensitive 변형은 대소문자를 구분하지 않아요.
tupuleHammingDistance로 반중복 문자열 감지에 사용할 수 있어요.
구문 (Syntax)
wordShingleMinHash(string[, shinglesize, hashnum])
wordShingleMinHashCaseInsensitive(string[, shinglesize, hashnum])
wordShingleMinHashUTF8(string[, shinglesize, hashnum])
wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum])
인자 (Arguments)
string— 해시를 계산할 문자열.Stringshinglesize— 선택 사항. 단어 shingle의 크기,1부터25사이. 기본값3.UInt8hashnum— 선택 사항. 결과 계산에 사용되는 최소·최대 해시 수,1부터25사이. 기본값6.UInt8
반환 값 (Returned value)
최소와 최대 두 해시를 가진 튜플. Tuple(UInt64, UInt64)
wordShingleMinHashArg / wordShingleMinHashArgCaseInsensitive / wordShingleMinHashArgUTF8 / wordShingleMinHashArgCaseInsensitiveUTF8
도입: v21.1.0 (wordShingleMinHashArg는 v1.1.0)
ASCII 문자열(wordShingleMinHashArg) 또는 UTF-8 문자열(UTF-8 변형)을 각각 shinglesize 단어의 부분(shingle)으로 분할하고, 같은 입력으로 계산된 wordShingleMinHash 함수의 최소·최대 단어 해시를 가진 shingle을 반환해요. CaseInsensitive 변형은 대소문자를 구분하지 않아요.
구문 (Syntax)
wordShingleMinHashArg(string[, shinglesize, hashnum])
wordShingleMinHashArgCaseInsensitive(string[, shinglesize, hashnum])
wordShingleMinHashArgUTF8(string[, shinglesize, hashnum])
wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum])
인자 (Arguments)
string— 해시를 계산할 문자열.Stringshinglesize— 선택 사항. 단어 shingle의 크기,1부터25사이. 기본값3.UInt8hashnum— 선택 사항. 결과 계산에 사용되는 최소·최대 해시 수,1부터25사이. 기본값6.UInt8
반환 값 (Returned value)
각각 hashnum개의 단어 shingle을 가진 두 튜플을 가진 튜플. Tuple(Tuple(String))
wordShingleSimHash / wordShingleSimHashCaseInsensitive / wordShingleSimHashUTF8 / wordShingleSimHashCaseInsensitiveUTF8
도입: v21.1.0 (CaseInsensitiveUTF8는 v1.1.0)
ASCII 문자열(wordShingleSimHash) 또는 UTF-8 문자열(UTF-8 변형)을 shinglesize 단어의 부분(shingle)으로 분할하고 단어 shingle simhash를 반환해요. CaseInsensitive 변형은 대소문자를 구분하지 않아요.
bitHammingDistance로 반중복 문자열 감지에 사용할 수 있어요.
구문 (Syntax)
wordShingleSimHash(string[, shinglesize])
wordShingleSimHashCaseInsensitive(string[, shinglesize])
wordShingleSimHashUTF8(string[, shinglesize])
wordShingleSimHashCaseInsensitiveUTF8(string[, shinglesize])
인자 (Arguments)
string— 해시를 계산할 문자열.Stringshinglesize— 선택 사항. 단어 shingle의 크기,1부터25사이. 기본값3.UInt8
반환 값 (Returned value)
계산된 해시 값. UInt64
wyHash64
도입: v22.7.0
64비트 wyHash64 해시 값을 계산해요.
구문 (Syntax)
wyHash64(arg)
인자 (Arguments)
arg— 해시를 계산할 문자열 인자.String
반환 값 (Returned value)
계산된 64비트 해시 값 UInt64
예시 (Examples)
SELECT wyHash64('ClickHouse') AS Hash;
12336419557878201794
xxHash32
도입: v20.1.0
문자열에서 xxHash를 계산해요.
64비트 버전은 xxHash64를 참고하세요.
구문 (Syntax)
xxHash32(arg)
인자 (Arguments)
arg— 해시할 입력 문자열.String
반환 값 (Returned value)
입력 문자열의 계산된 32비트 해시. UInt32
예시 (Examples)
SELECT xxHash32('Hello, world!');
┌─xxHash32('Hello, world!')─┐
│ 834093149 │
└───────────────────────────┘
xxHash64
도입: v20.1.0
문자열에서 xxHash를 계산해요.
32비트 버전은 xxHash32를 참고하세요.
구문 (Syntax)
xxHash64(arg)
반환 값 (Returned value)
입력 문자열의 계산된 64비트 해시. UInt64
예시 (Examples)
SELECT xxHash64('Hello, world!');
┌─xxHash64('Hello, world!')─┐
│ 17691043854468224118 │
└───────────────────────────┘
xxHash64Spark
도입: v26.7.0
Spark와 같은 시드를 사용해 문자열에서 xxHash를 계산해요.
이 함수는 xxHash64와 같지만 시드 42를 사용하고 결과를 Int64로 반환해요. String과 NULL 입력만 지원돼요. NULL의 경우 Spark의 시드 동작과 일치하는 42를 반환해요.
구문 (Syntax)
xxHash64Spark(arg)
반환 값 (Returned value)
입력 문자열의 계산된 64비트 해시. Int64
예시 (Examples)
SELECT xxHash64Spark('ABC');
┌─xxHash64Spark('ABC')─┐
│ 4105715581806190027 │
└──────────────────────┘
xxh3
도입: v22.12.0
XXH3 64비트 해시 값을 계산해요.
구문 (Syntax)
xxh3(expr)
인자 (Arguments)
expr— 모든 데이터 타입의 표현식 목록.Any
반환 값 (Returned value)
계산된 64비트 xxh3 해시 값 UInt64
예시 (Examples)
SELECT xxh3('ClickHouse')
18009318874338624809
xxh3_128
도입: v26.2.0
XXH3 128비트 해시 값을 계산해요.
구문 (Syntax)
xxh3_128(expr)
인자 (Arguments)
expr— 모든 데이터 타입의 표현식 목록.Any
반환 값 (Returned value)
계산된 128비트 xxh3 해시 값 UInt128
예시 (Examples)
SELECT hex(xxh3_128('ClickHouse'))
14C27B7BEF95D36FECF5520CA2DAF030