MURMUR3_32_HASH
A função MURMUR3_32_HASH calcula o hash não criptográfico Murmur3A de 32 bits para todos os tipos de dados comuns, incluindo tipos numéricos e de string.
Sintaxe
MURMUR3_32_HASH(value [, seed])
Argumentos
- value
-
O valor de entrada para aplicar o hash. O Amazon Redshift faz hash da representação binária do valor de entrada. Esse comportamento é semelhante a Função FNV_HASH, mas o valor é convertido na representação binária especificada pela especificação de hash Murmur3 de 32 bits do Apache Iceberg
. - semente
-
A semente INT da função de hash. Esse argumento é opcional. Se não for fornecida, o Amazon Redshift usará a semente padrão de 0. Isso permite combinar o hash de várias colunas sem conversões nem concatenações.
Tipo de retorno
A função retorna um INT.
Exemplo
Os exemplos a seguir retornam o hash Murmur3 de um número, a string “Amazon Redshift” e a concatenação dos dois.
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)
Observações de uso
Para calcular o hash de uma tabela com várias colunas, é possível calcular o hash Murmur3 da primeira coluna e transmiti-lo como uma semente para o hash da segunda coluna. Depois, ele passa o hash Murmur3 da segunda coluna como uma semente para o hash da terceira coluna.
O exemplo a seguir cria sementes para aplicar o hash a uma tabela com várias colunas.
select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;
A mesma propriedade pode ser usada para calcular o hash de uma concatenação de strings.
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)
A função de hash usa o tipo de entrada para determinar o número de bytes para hash. Use a fundição para impor um tipo específico, se necessário.
Os exemplos a seguir usam diferentes tipos de entrada para produzir resultados diferentes.
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)