해시 함수

해시 함수 (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)

  1. 입력 변환: 필요한 경우 TO_UTF8(string)을 사용해 문자열을 BYTES로 변환하세요.
  2. 음수 값: 해시 함수는 부호 있는 정수/long을 반환해요. 필요하다면 CAST를 사용해 부호 없는 값으로 해석하세요.
  3. 바이트 배열: MURMURHASH3BIT128 같은 함수는 BYTES를 16바이트 배열로 반환해요.
  4. 플랫폼별 변형:
    MURMURHASH3X64BIT32/64/128 같은 함수는 x64 아키텍처에 최적화되어 있어요. 결과는 플랫폼에 따라 달라질 수 있어요.
  5. FNV 해시 변형: FNV-1과 FNV-1a 알고리즘은 파티셔닝과 데이터 분산에 흔히 사용되는 비암호화 해시 함수예요. 더 나은 눈사태(avalanche) 특성 때문에 대부분의 경우 FNV-1a가 선호돼요.

더 알아보기 (Learn more)