FNV_HASH-Funktion - Amazon Redshift

Amazon Redshift wird UDFs ab dem 1. November 2025 die Erstellung von neuem Python nicht mehr unterstützen. Wenn Sie Python verwenden möchten UDFs, erstellen Sie das UDFs vor diesem Datum liegende. Bestehendes Python UDFs wird weiterhin wie gewohnt funktionieren. Weitere Informationen finden Sie im Blogbeitrag.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

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)