Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Fungsi FNV_HASH
Menghitung fungsi hash non-kriptografi FNV-1a 64-bit untuk semua tipe data dasar.
Sintaks
FNV_HASH(value [, seed])
Argumen
- nilai
-
Nilai input yang akan di-hash. Amazon Redshift menggunakan representasi biner dari nilai untuk hash nilai input; misalnya, nilai INTEGER di-hash menggunakan 4 byte dan nilai BIGINT di-hash menggunakan 8 byte. Selain itu, hashing input CHAR dan VARCHAR tidak mengabaikan spasi tambahan.
- benih
-
Bigint seed dari fungsi hash adalah opsional. Jika tidak diberikan, Amazon Redshift menggunakan seed FNV default. Ini memungkinkan menggabungkan hash dari beberapa kolom tanpa konversi atau penggabungan apa pun.
Jenis pengembalian
BIGINT
Contoh
Contoh berikut mengembalikan hash FNV dari angka, string 'Amazon Redshift', dan rangkaian keduanya.
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)
Catatan penggunaan
Untuk menghitung hash tabel dengan beberapa kolom, Anda dapat menghitung hash FNV dari kolom pertama dan meneruskannya sebagai benih ke hash kolom kedua. Kemudian, ia melewati hash FNV dari kolom kedua sebagai benih ke hash kolom ketiga.
Contoh berikut menciptakan benih untuk hash tabel dengan beberapa kolom.
select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
Properti yang sama dapat digunakan untuk menghitung hash dari rangkaian string.
select fnv_hash('abcd'); fnv_hash --------------------- -281581062704388899 (1 row)
select fnv_hash('cd', fnv_hash('ab')); fnv_hash --------------------- -281581062704388899 (1 row)
Fungsi hash menggunakan jenis input untuk menentukan jumlah byte untuk hash. Gunakan casting untuk menegakkan jenis tertentu, jika perlu.
Contoh berikut menggunakan berbagai jenis input untuk menghasilkan hasil yang berbeda.
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)