MURMUR3_32_HASH - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

MURMUR3_32_HASH

La funzione MURMUR3_32_HASH calcola l'hash non crittografato Murmur3A a 32 bit per tutti i tipi di dati comuni, inclusi i tipi numerici e di stringa.

Sintassi

MURMUR3_32_HASH(value [, seed])

Argomenti

valore

Il valore di input da sottoporre a hash. Amazon Redshift esegue l'hash della rappresentazione binaria del valore di input. Questo comportamento è simile a Funzione FNV_HASH, ma il valore viene convertito nella rappresentazione binaria specificata dalla specifica hash Murmur3 a 32 bit di Apache Iceberg.

seed

Il seed INT della funzione hash. Questo argomento è facoltativo. Se non viene fornito, Amazon Redshift utilizza il seed predefinito 0. Ciò consente di combinare l'hash di più colonne senza conversioni o concatenazioni.

Tipo restituito

La funzione restituisce un INT.

Esempio

Gli esempi seguenti restituiscono l'hash Murmur3 di un numero, la stringa "Amazon Redshift" e la concatenazione dei due.

select MURMUR3_32_HASH(1); MURMUR3_32_HASH ---------------------- 1392991556 (1 row)
select MURMUR3_32_HASH('Amazon Redshift'); MURMUR3_32_HASH ---------------------- -1563580564 (1 row)
select MURMUR3_32_HASH('Amazon Redshift', MURMUR3_32_HASH(1)); MURMUR3_32_HASH ---------------------- -1346554171 (1 row)

Note per l’utilizzo

Per calcolare l'hash di una tabella con più colonne, puoi calcolare l'hash Murmur3 della prima colonna e passarlo come seed all'hash della seconda colonna. Quindi, passa l'hash Murmur3 della seconda colonna come seed all'hash della terza colonna.

L'esempio seguente crea i seed per sottoporre all'hash una tabella con più colonne.

select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;

La stessa proprietà può essere utilizzata per calcolare l'hash di una concatenazione di stringhe.

select MURMUR3_32_HASH('abcd'); MURMUR3_32_HASH --------------------- 1139631978 (1 row)
select MURMUR3_32_HASH('cd', MURMUR3_32_HASH('ab')); MURMUR3_32_HASH --------------------- 1711522338 (1 row)

La funzione hash utilizza il tipo di input per determinare il numero di byte da sottoporre all'hash. Utilizzare il casting per applicare un tipo specifico, se necessario.

Negli esempi seguenti vengono utilizzati diversi tipi di input per produrre risultati differenti.

select MURMUR3_32_HASH(1, MURMUR3_32_HASH(1)); MURMUR3_32_HASH -------------------- -1193428387 (1 row)
select MURMUR3_32_HASH(1); MURMUR3_32_HASH ---------------------- 1392991556 (1 row)
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(2)); MURMUR3_32_HASH ---------------------- 1179621905 (1 row)