FNV_HASH-Funktion - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

FNV_HASH-Funktion

Berechnet die nicht-kryptographische 64-Bit-Hash-Funktion FNV-1a für alle grundlegenden Datentypen.

Syntax

FNV_HASH(value [, seed])

Argumente

Wert

Der Eingabewert, der gehasht werden soll. Amazon Redshift verwendet die binäre Darstellung des Wertes, um den Eingabewert zu hashen. Beispielsweise werden INTEGER-Werte mit 4 Bytes gehasht und BIGINT-Werte mit 8 Bytes. Außerdem werden beim Hashing von CHAR- und VARCHAR-Eingaben keine nachstehenden Leerzeichen ignoriert.

Seed

Der BIGINT-Seed der Hash-Funktion ist optional. Wenn er nicht angegeben wird, verwendet Amazon Redshift den Standard-FNV-Seed. Dies ermöglicht eine Kombination des Hashs mehrerer Spalten ohne Konvertierungen oder Verkettungen.

Rückgabetyp

BIGINT

Beispiel

Die folgenden Beispiele geben den FNV-Hash einer Zahl, der Zeichenfolge „Amazon Redshift“ und die Verkettung beider zurück.

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)

Nutzungshinweise

  • Um den Hash einer Tabelle mit mehreren Spalten zu berechnen, können Sie den FNV-Hash der ersten Spalte berechnen und ihn als Seed an den Hash der zweiten Spalte übergeben. Dann wird der FNV-Hash der zweiten Spalte als Seed an den Hash der dritten Spalte übergeben.

    Im folgenden Beispiel werden Seeds erstellt, um eine Tabelle mit mehreren Spalten zu hashen.

    select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  • Mit derselben Eigenschaft kann der Hash einer Verkettung von Zeichenfolgen berechnet werden.

    select fnv_hash('abcd'); fnv_hash --------------------- -281581062704388899 (1 row)
    select fnv_hash('cd', fnv_hash('ab')); fnv_hash --------------------- -281581062704388899 (1 row)
  • Die Hash-Funktion verwendet den Typ der Eingabe, um die Anzahl der zu hashenden Bytes zu bestimmen. Verwenden Sie Übertragen, um einen bestimmten Typ zu erzwingen, falls erforderlich.

    In den folgenden Beispielen werden verschiedene Eingabetypen verwendet, um unterschiedliche Ergebnisse zu erzielen.

    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)