해시 함수
해시 함수 (Hash Functions)
Apache Pinot은 쿼리 내 데이터 변환을 위해 다양한 해시 값을 계산하는 해시 함수 모음을 제공해요. 이 함수들은 암호화 해시(예: SHA, MD5)와 비암호화 해시(예: Murmur, Adler, CRC)를 지원해요.
출처: 문서
본문
Apache Pinot은 쿼리 내 데이터 변환을 위해 다양한 해시 값을 계산하는 해시 함수 모음을 제공해요. 이 함수들은 암호화 해시(예: SHA, MD5)와 비암호화 해시(예: Murmur, Adler, CRC)를 지원해요. 아래는 각 함수에 대한 상세 참고 자료예요.
암호화 해시 함수 (Cryptographic Hash Functions)
SHA
입력의 SHA-1 해시를 계산해요.
문법 (Syntax)
SHA(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
STRING: 소문자 16진수 문자열로 된 SHA-1 해시
예시 (Example)
SELECT SHA(TO_UTF8('testString')) FROM myTable
-- Returns '956265657d0b637ef65b9b59f9f858eecf55ed6a'
SHA224
입력의 SHA-224 해시를 계산해요.
문법 (Syntax)
SHA224(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
STRING: 소문자 16진수 문자열로 된 SHA-224 해시
예시 (Example)
SELECT SHA224(TO_UTF8('testString')) FROM myTable
-- Returns 'bb54d1095764bff72b570dcdc3172ed6d1b26695494528a0059c95ae'
SHA256
입력의 SHA-256 해시를 계산해요.
문법 (Syntax)
SHA256(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
STRING: 소문자 16진수 문자열로 된 SHA-256 해시
예시 (Example)
SELECT SHA256(TO_UTF8('testString')) FROM myTable
-- Returns '4acf0b39d9c4766709a3689f553ac01ab550545ffa4544dfc0b2cea82fba02a3'
SHA512
입력의 SHA-512 해시를 계산해요.
문법 (Syntax)
SHA512(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
STRING: 소문자 16진수 문자열로 된 SHA-512 해시
예시 (Example)
SELECT SHA512(TO_UTF8('testString')) FROM myTable
-- Returns 'c48af5a7f6d4a851fc8a434eed638ab1a6ef68e19dbcae894ac67c9fbc5bcb0182b8e7123b3df3c9e4dcb7690c23103f03dc17f54352071ceb2a4eb204b26b91'
MD2
입력의 MD2 해시를 계산해요.
문법 (Syntax)
MD2(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
STRING: 소문자 16진수 문자열로 된 MD2 해시
예시 (Example)
SELECT MD2(TO_UTF8('testString')) FROM myTable
-- Returns '466c453913ba0d8325f96b2d47984fb5'
MD5
입력의 MD5 해시를 계산해요.
문법 (Syntax)
MD5(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
STRING: 소문자 16진수 문자열로 된 MD5 해시
예시 (Example)
SELECT MD5(TO_UTF8('testString')) FROM myTable
-- Returns '536788f4dbdffeecfbb8f350a941eea3'
비암호화 해시 함수 (Non-Cryptographic Hash Functions)
MurmurHash2
32비트 MurmurHash2 값을 계산해요.
문법 (Syntax)
MURMURHASH2(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
INT: 32비트 해시 값 (부호 있는 정수)
예시 (Example)
SELECT MURMURHASH2(TO_UTF8('testString')) FROM myTable
-- Returns -534425817
MurmurHash2UTF8
UTF-8 문자열에 대한 32비트 MurmurHash2 값을 계산해요.
문법 (Syntax)
MURMURHASH2UTF8(input)
매개변수 (Parameters)
input(STRING): 입력 문자열 (UTF-8 바이트로 변환)
반환값 (Returns)
INT: 32비트 해시 값 (부호 있는 정수)
예시 (Example)
SELECT MURMURHASH2UTF8('testString') FROM myTable
-- Returns -534425817
MurmurHash2Bit64
64비트 MurmurHash2 값을 계산해요.
두 개의 오버로드가 지원돼요:
문법 1 (시드 없음, No Seed)
MURMURHASH2BIT64(input)
문법 2 (시드 포함, With Seed)
MURMURHASH2BIT64(input, seed)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열seed(INT, 선택 사항): 해시 함수의 시드 값
반환값 (Returns)
LONG: 64비트 해시 값 (부호 있는 long)
예시 (Examples)
SELECT MURMURHASH2BIT64(TO_UTF8('testString')) FROM myTable
-- Returns 3907736674355139845
SELECT MURMURHASH2BIT64(TO_UTF8('testString'), 12345) FROM myTable
-- Returns -2138976126980760436
MurmurHash3Bit32
시드가 있는 32비트 MurmurHash3 값을 계산해요.
문법 (Syntax)
MURMURHASH3BIT32(input, seed)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열seed(INT): 해시 함수의 시드 값
반환값 (Returns)
INT: 32비트 해시 값 (부호 있는 정수)
예시 (Example)
SELECT MURMURHASH3BIT32(TO_UTF8('testString'), 0) FROM myTable
-- Returns -1435605585
MurmurHash3Bit64
시드가 있는 64비트 MurmurHash3 값을 계산해요.
문법 (Syntax)
MURMURHASH3BIT64(input, seed)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열seed(INT): 해시 함수의 시드 값
반환값 (Returns)
LONG: 64비트 해시 값 (부호 있는 long)
예시 (Example)
SELECT MURMURHASH3BIT64(TO_UTF8('testString'), 0) FROM myTable
-- Returns -3652179990542706350
MurmurHash3Bit128
시드가 있는 128비트 MurmurHash3 값을 계산해요.
문법 (Syntax)
MURMURHASH3BIT128(input, seed)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열seed(INT): 해시 함수의 시드 값
반환값 (Returns)
BYTES: 16바이트 배열로 된 128비트 해시
예시 (Example)
SELECT MURMURHASH3BIT128(TO_UTF8('testString'), 0) FROM myTable
-- Returns byte array: [82, -103, -23, 15, -90, -39, 80, -51, 15, 73, -81, -28, 111, -21, -78, 108]
MurmurHash3X64Bit32 (x64 최적화)
x64 플랫폼에 최적화된 32비트 MurmurHash3 값을 계산해요.
문법 (Syntax)
MURMURHASH3X64BIT32(input, seed)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열seed(INT): 해시 함수의 시드 값
반환값 (Returns)
INT: 32비트 해시 값 (부호 있는 정수)
예시 (Example)
SELECT MURMURHASH3X64BIT32(TO_UTF8('testString'), 0) FROM myTable
-- Returns -1096986291
MurmurHash3X64Bit128 (x64 최적화)
x64 플랫폼에 최적화된 128비트 MurmurHash3 값을 계산해요.
문법 (Syntax)
MURMURHASH3X64BIT128(input, seed)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열seed(INT): 해시 함수의 시드 값
반환값 (Returns)
BYTES: 16바이트 배열로 된 128비트 해시
예시 (Example)
SELECT MURMURHASH3X64BIT128(TO_UTF8('testString'), 0) FROM myTable
-- Returns byte array: [-66, -99, 81, 77, -7, 29, 124, 76, 42, 38, -34, -42, -92, -83, 83, 13]
Adler32
32비트 Adler 검사합(checksum) 을 계산해요.
문법 (Syntax)
ADLER32(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
INT: 32비트 Adler 검사합 (부호 있는 정수)
예시 (Example)
SELECT ADLER32(TO_UTF8('testString')) FROM myTable
-- Returns 392102968
CRC32
32비트 CRC (순환 중복 검사, Cyclic Redundancy Check) 를 계산해요.
문법 (Syntax)
CRC32(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
INT: 32비트 CRC32 값 (부호 있는 정수)
예시 (Example)
SELECT CRC32(TO_UTF8('testString')) FROM myTable
-- Returns 418708744
CRC32C
32비트 CRC32C (Castagnoli) 를 계산해요.
문법 (Syntax)
CRC32C(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
INT: 32비트 CRC32C 값 (부호 있는 정수)
예시 (Example)
SELECT CRC32C(TO_UTF8('testString')) FROM myTable
-- Returns -1608760557
FNV1Hash32
바이트 배열에 대한 32비트 FNV-1 해시 값을 계산해요.
문법 (Syntax)
FNV1HASH32(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
INT: 32비트 FNV-1 해시 값 (부호 있는 정수)
예시 (Example)
SELECT FNV1HASH32(TO_UTF8('testString')) FROM myTable
-- Returns 123456789
FNV1Hash32UTF8
UTF-8 문자열에 대한 32비트 FNV-1 해시 값을 계산해요.
문법 (Syntax)
FNV1HASH32UTF8(input)
매개변수 (Parameters)
input(STRING): 입력 문자열 (UTF-8 바이트로 변환)
반환값 (Returns)
INT: 32비트 FNV-1 해시 값 (부호 있는 정수)
예시 (Example)
SELECT FNV1HASH32UTF8('testString') FROM myTable
-- Returns 123456789
FNV1aHash32
바이트 배열에 대한 32비트 FNV-1a 해시 값을 계산해요.
문법 (Syntax)
FNV1AHASH32(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
INT: 32비트 FNV-1a 해시 값 (부호 있는 정수)
예시 (Example)
SELECT FNV1AHASH32(TO_UTF8('testString')) FROM myTable
-- Returns 987654321
FNV1aHash32UTF8
UTF-8 문자열에 대한 32비트 FNV-1a 해시 값을 계산해요.
문법 (Syntax)
FNV1AHASH32UTF8(input)
매개변수 (Parameters)
input(STRING): 입력 문자열 (UTF-8 바이트로 변환)
반환값 (Returns)
INT: 32비트 FNV-1a 해시 값 (부호 있는 정수)
예시 (Example)
SELECT FNV1AHASH32UTF8('testString') FROM myTable
-- Returns 987654321
FNV1Hash64
바이트 배열에 대한 64비트 FNV-1 해시 값을 계산해요.
문법 (Syntax)
FNV1HASH64(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
LONG: 64비트 FNV-1 해시 값 (부호 있는 long)
예시 (Example)
SELECT FNV1HASH64(TO_UTF8('testString')) FROM myTable
-- Returns 1234567890123456789
FNV1Hash64UTF8
UTF-8 문자열에 대한 64비트 FNV-1 해시 값을 계산해요.
문법 (Syntax)
FNV1HASH64UTF8(input)
매개변수 (Parameters)
input(STRING): 입력 문자열 (UTF-8 바이트로 변환)
반환값 (Returns)
LONG: 64비트 FNV-1 해시 값 (부호 있는 long)
예시 (Example)
SELECT FNV1HASH64UTF8('testString') FROM myTable
-- Returns 1234567890123456789
FNV1aHash64
바이트 배열에 대한 64비트 FNV-1a 해시 값을 계산해요.
문법 (Syntax)
FNV1AHASH64(input)
매개변수 (Parameters)
input(BYTES): 해시할 입력 바이트 배열
반환값 (Returns)
LONG: 64비트 FNV-1a 해시 값 (부호 있는 long)
예시 (Example)
SELECT FNV1AHASH64(TO_UTF8('testString')) FROM myTable
-- Returns 9876543210987654321
FNV1aHash64UTF8
UTF-8 문자열에 대한 64비트 FNV-1a 해시 값을 계산해요.
문법 (Syntax)
FNV1AHASH64UTF8(input)
매개변수 (Parameters)
input(STRING): 입력 문자열 (UTF-8 바이트로 변환)
반환값 (Returns)
LONG: 64비트 FNV-1a 해시 값 (부호 있는 long)
예시 (Example)
SELECT FNV1AHASH64UTF8('testString') FROM myTable
-- Returns 9876543210987654321
참고 사항 (Notes)
- 입력 변환: 필요한 경우
TO_UTF8(string)을 사용해 문자열을BYTES로 변환하세요. - 음수 값: 해시 함수는 부호 있는 정수/long을 반환해요. 필요하다면
CAST를 사용해 부호 없는 값으로 해석하세요. - 바이트 배열:
MURMURHASH3BIT128같은 함수는BYTES를 16바이트 배열로 반환해요. - 플랫폼별 변형:
MURMURHASH3X64BIT32/64/128같은 함수는 x64 아키텍처에 최적화되어 있어요. 결과는 플랫폼에 따라 달라질 수 있어요. - FNV 해시 변형: FNV-1과 FNV-1a 알고리즘은 파티셔닝과 데이터 분산에 흔히 사용되는 비암호화 해시 함수예요. 더 나은 눈사태(avalanche) 특성 때문에 대부분의 경우 FNV-1a가 선호돼요.