Funzione FNV_HASH - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Funzione FNV_HASH

Calcola la funzione hash non crittografica FNV-1a a 64 bit per tutti i tipi di dati di base.

Sintassi

FNV_HASH(value [, seed])

Argomenti

value

Il valore di input da sottoporre a hash. Amazon Redshift utilizza la rappresentazione binaria del valore per sottoporre a hash il valore di input; ad esempio, i valori INTEGER sono sottoposti a hash utilizzando 4 byte e i valori BIGINT sono sottoposti a hash utilizzando 8 byte. Inoltre, l'hash di input CHAR e VARCHAR non ignora gli spazi finali.

seed

Il seed BIGINT della funzione hash è facoltativo. Se non viene fornito, Amazon Redshift utilizza il seed FNV di default. Ciò consente di combinare l'hash di più colonne senza conversioni o concatenazioni.

Tipo restituito

BIGINT

Esempio

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

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)

Note per l'utilizzo

  • Per calcolare l'hash di una tabella con più colonne, puoi calcolare l'hash FNV della prima colonna e passarlo come seed all'hash della seconda colonna. Quindi, passa l'hash FNV 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 fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  • La stessa proprietà può essere utilizzata per calcolare l'hash di una concatenazione di stringhe.

    select fnv_hash('abcd'); fnv_hash --------------------- -281581062704388899 (1 row)
    select fnv_hash('cd', fnv_hash('ab')); fnv_hash --------------------- -281581062704388899 (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 diversi.

    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)