Hash Functions
Apache Pinot provides a suite of hash functions to compute various hash values for data transformation within queries. These functions support cryptographic hashes (e.g., SHA, MD5) and non-cryptographic hashes (e.g., Murmur, Adler, CRC). Below is a detailed reference for each function.
Cryptographic Hash Functions
SHA
Computes the SHA-1 hash of the input.
Syntax
SHA(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
STRING
: SHA-1 hash as a lowercase hex string.
Example
SELECT SHA(TO_UTF8('testString')) FROM myTable
-- Returns '956265657d0b637ef65b9b59f9f858eecf55ed6a'
SHA224
Computes the SHA-224 hash of the input.
Syntax
SHA224(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
STRING
: SHA-224 hash as a lowercase hex string.
Example
SELECT SHA224(TO_UTF8('testString')) FROM myTable
-- Returns 'bb54d1095764bff72b570dcdc3172ed6d1b26695494528a0059c95ae'
SHA256
Computes the SHA-256 hash of the input.
Syntax
SHA256(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
STRING
: SHA-256 hash as a lowercase hex string.
Example
SELECT SHA256(TO_UTF8('testString')) FROM myTable
-- Returns '4acf0b39d9c4766709a3689f553ac01ab550545ffa4544dfc0b2cea82fba02a3'
SHA512
Computes the SHA-512 hash of the input.
Syntax
SHA512(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
STRING
: SHA-512 hash as a lowercase hex string.
Example
SELECT SHA512(TO_UTF8('testString')) FROM myTable
-- Returns 'c48af5a7f6d4a851fc8a434eed638ab1a6ef68e19dbcae894ac67c9fbc5bcb0182b8e7123b3df3c9e4dcb7690c23103f03dc17f54352071ceb2a4eb204b26b91'
MD2
Computes the MD2 hash of the input.
Syntax
MD2(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
STRING
: MD2 hash as a lowercase hex string.
Example
SELECT MD2(TO_UTF8('testString')) FROM myTable
-- Returns '466c453913ba0d8325f96b2d47984fb5'
MD5
Computes the MD5 hash of the input.
Syntax
MD5(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
STRING
: MD5 hash as a lowercase hex string.
Example
SELECT MD5(TO_UTF8('testString')) FROM myTable
-- Returns '536788f4dbdffeecfbb8f350a941eea3'
Non-Cryptographic Hash Functions
MurmurHash2
Computes a 32-bit MurmurHash2 value.
Syntax
MURMURHASH2(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
INT
: 32-bit hash value (signed integer).
Example
SELECT MURMURHASH2(TO_UTF8('testString')) FROM myTable
-- Returns -534425817
MurmurHash2UTF8
Computes a 32-bit MurmurHash2 value for a UTF-8 string.
Syntax
MURMURHASH2UTF8(input)
Parameters
input
(STRING
): Input string (converted to UTF-8 bytes).
Returns
INT
: 32-bit hash value (signed integer).
Example
SELECT MURMURHASH2UTF8('testString') FROM myTable
-- Returns -534425817
MurmurHash2Bit64
Computes a 64-bit MurmurHash2 value. Two overloads are supported:
Syntax 1 (No Seed)
MURMURHASH2BIT64(input)
Syntax 2 (With Seed)
MURMURHASH2BIT64(input, seed)
Parameters
input
(BYTES
): Input byte array to hash.seed
(INT
, optional): Seed value for the hash function.
Returns
LONG
: 64-bit hash value (signed long).
Examples
SELECT MURMURHASH2BIT64(TO_UTF8('testString')) FROM myTable
-- Returns 3907736674355139845
SELECT MURMURHASH2BIT64(TO_UTF8('testString'), 12345) FROM myTable
-- Returns -2138976126980760436
MurmurHash3Bit32
Computes a 32-bit MurmurHash3 value with a seed.
Syntax
MURMURHASH3BIT32(input, seed)
Parameters
input
(BYTES
): Input byte array to hash.seed
(INT
): Seed value for the hash function.
Returns
INT
: 32-bit hash value (signed integer).
Example
SELECT MURMURHASH3BIT32(TO_UTF8('testString'), 0) FROM myTable
-- Returns -1435605585
MurmurHash3Bit64
Computes a 64-bit MurmurHash3 value with a seed.
Syntax
MURMURHASH3BIT64(input, seed)
Parameters
input
(BYTES
): Input byte array to hash.seed
(INT
): Seed value for the hash function.
Returns
LONG
: 64-bit hash value (signed long).
Example
SELECT MURMURHASH3BIT64(TO_UTF8('testString'), 0) FROM myTable
-- Returns -3652179990542706350
MurmurHash3Bit128
Computes a 128-bit MurmurHash3 value with a seed.
Syntax
MURMURHASH3BIT128(input, seed)
Parameters
input
(BYTES
): Input byte array to hash.seed
(INT
): Seed value for the hash function.
Returns
BYTES
: 128-bit hash as a 16-byte array.
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 Optimized)
Computes a 32-bit MurmurHash3 optimized for x64 platforms.
Syntax
MURMURHASH3X64BIT32(input, seed)
Parameters
input
(BYTES
): Input byte array to hash.seed
(INT
): Seed value for the hash function.
Returns
INT
: 32-bit hash value (signed integer).
Example
SELECT MURMURHASH3X64BIT32(TO_UTF8('testString'), 0) FROM myTable
-- Returns -1096986291
MurmurHash3X64Bit128 (x64 Optimized)
Computes a 128-bit MurmurHash3 optimized for x64 platforms.
Syntax
MURMURHASH3X64BIT128(input, seed)
Parameters
input
(BYTES
): Input byte array to hash.seed
(INT
): Seed value for the hash function.
Returns
BYTES
: 128-bit hash as a 16-byte array.
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
Computes a 32-bit Adler checksum.
Syntax
ADLER32(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
INT
: 32-bit Adler checksum (signed integer).
Example
SELECT ADLER32(TO_UTF8('testString')) FROM myTable
-- Returns 392102968
CRC32
Computes a 32-bit CRC (Cyclic Redundancy Check).
Syntax
CRC32(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
INT
: 32-bit CRC32 value (signed integer).
Example
SELECT CRC32(TO_UTF8('testString')) FROM myTable
-- Returns 418708744
CRC32C
Computes a 32-bit CRC32C (Castagnoli).
Syntax
CRC32C(input)
Parameters
input
(BYTES
): Input byte array to hash.
Returns
INT
: 32-bit CRC32C value (signed integer).
Example
SELECT CRC32C(TO_UTF8('testString')) FROM myTable
-- Returns -1608760557
Notes
Input Conversion: Use
TO_UTF8(string)
to convert strings toBYTES
where required.Negative Values: Hash functions return signed integers/longs. Use
CAST
to interpret them as unsigned if needed.Byte Arrays: Functions like
MURMURHASH3BIT128
returnBYTES
as a 16-byte array.Platform-Specific Variants: Functions like
MURMURHASH3X64BIT32/64/128
are optimized for x64 architectures. The results could be different cross platform.
Was this helpful?