Función FNV_HASH - Amazon Redshift

Función FNV_HASH

Calcula la función hash no criptográfica FNV-1a de 64 bits para todos los tipos de datos básicos.

Sintaxis

FNV_HASH(value [, seed])

Argumentos

value

El valor de entrada al que se le aplicará un algoritmo hash. Amazon Redshift utiliza la representación binaria del valor para aplicar un algoritmo hash al valor de entrada; por ejemplo, a los valores INTEGER se les aplica un algoritmo hash con 4 bytes y a los valores BIGINT se les aplica un algoritmo hash con 8 bytes. Además, las entradas de hash CHAR y VARCHAR no ignoran los espacios finales.

valor de inicialización

El valor de inicialización BIGINT de la función hash es opcional. Si no se proporciona, Amazon Redshift utiliza el valor de inicialización FNV predeterminado. Esto permite combinar el hash de varias columnas sin conversiones ni concatenaciones.

Tipo de retorno

BIGINT

Ejemplo

En los siguientes ejemplos se devuelve el hash FNV de un número, la cadena "Amazon Redshift" y la concatenación de los dos.

select fnv_hash(1); fnv_hash ---------------------- -5968735742475085980 (1 row)
select fnv_hash('Amazon Redshift'); fnv_hash --------------------- 7783490368944507294 (1 row)
select fnv_hash('Amazon Redshift', fnv_hash(1)); fnv_hash ---------------------- -2202602717770968555 (1 row)

Notas de uso

  • Para calcular el hash de una tabla con varias columnas, puede calcular el hash FNV de la primera columna y pasarlo como valor de inicialización al hash de la segunda columna. A continuación, pasa el hash FNV de la segunda columna como valor de inicialización al hash de la tercera columna.

    En el siguiente ejemplo, se crean valores de inicialización para aplicar un algoritmo hash a una tabla con varias columnas.

    select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  • La misma propiedad se puede utilizar para calcular el hash de una concatenación de cadenas.

    select fnv_hash('abcd'); fnv_hash --------------------- -281581062704388899 (1 row)
    select fnv_hash('cd', fnv_hash('ab')); fnv_hash --------------------- -281581062704388899 (1 row)
  • La función hash utiliza el tipo de entrada para determinar el número de bytes para aplicar un algoritmo hash. Utilice la conversión para aplicar un tipo específico, si es necesario.

    En los ejemplos siguientes se utilizan diferentes tipos de entrada para producir resultados diferentes.

    select fnv_hash(1::smallint); fnv_hash -------------------- 589727492704079044 (1 row)
    select fnv_hash(1); fnv_hash ---------------------- -5968735742475085980 (1 row)
    select fnv_hash(1::bigint); fnv_hash ---------------------- -8517097267634966620 (1 row)