All Products
Search
Document Center

Hologres:Fungsi Presto

Last Updated:Mar 27, 2026

Mulai versi V3.1, Hologres mendukung fungsi yang kompatibel dengan Presto melalui ekstensi hg_presto_funcs. Semua fungsi dalam topik ini didukung oleh Mesin eksekusi Velox.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Instans Hologres yang menjalankan V3.1 atau versi lebih baru

  • Akses superuser ke database target

Instal ekstensi

Jalankan pernyataan berikut sebagai superuser—sekali untuk setiap database. Jika Anda membuat database baru, jalankan pernyataan tersebut lagi.

CREATE EXTENSION hg_presto_funcs;
Catatan

Ekstensi hanya diinstal ke skema hg_presto_funcs. Anda tidak dapat menentukan skema lain.

Panggil fungsi Presto

Semua fungsi Presto berada di skema hg_presto_funcs. Untuk memanggilnya, tambahkan prefiks pada setiap nama fungsi atau atur search path sekali per sesi:

-- Opsi 1: tambahkan prefiks pada setiap pemanggilan
SELECT hg_presto_funcs.array_cum_sum(b) FROM public.presto_test;

-- Opsi 2: atur search path untuk session
SET search_path = hg_presto_funcs;
SELECT array_cum_sum(b) FROM public.presto_test;
Penting

Fungsi-fungsi ini tidak mendukung parameter input konstan. Semua contoh dalam topik ini menggunakan referensi kolom dari tabel sampel di bawah.

Tabel sampel

Contoh dalam topik ini menggunakan tabel berikut:

CREATE TABLE public.presto_test(
  a INT, b INT[], c TEXT, d TEXT, e TEXT, f TEXT, g TEXT,
  h TEXT, i TEXT, j TEXT, k TEXT, l TEXT, m TEXT, n TEXT,
  o TEXT, p TEXT, r TEXT, s TEXT, t FLOAT, u TEXT
);

INSERT INTO public.presto_test
  VALUES (
    3, ARRAY[1, 2, 3, 2], 'A', '10010', 'SGVsbG8gV29ybGQh',
    '\x00000001', '\x0000000000000001', '48656C6C6F',
    '\x40490FD0', '\x400921FB54442D18', '\x48656C6C6F',
    '"dwdw"', '[1,2,3,4,5,6]', '{"x": {"a": 1, "b": 2}}',
    'café', 'apple,banana,cherry', 'ABCDA', 'running',
    3.1415926, '[1.0,2.0]'
  );

Fungsi yang didukung

Tabel di bawah mencantumkan semua fungsi yang didukung, dikelompokkan berdasarkan kategori. Setiap entri menampilkan signature fungsi beserta tipe parameter dan tipe nilai kembalian.

Fungsi array

Signature fungsiDeskripsiContohHasil
array_cum_sum(array(bigint)) → array(bigint)Mengembalikan array di mana posisi n berisi jumlah dari n elemen pertama. Mengembalikan null pada posisi n jika salah satu dari n elemen pertama bernilai null.SELECT array_cum_sum(b) FROM public.presto_test;{1,3,6,8}
array_has_duplicates(array(T)) → booleanMengembalikan true jika array berisi elemen duplikat.SELECT array_has_duplicates(b) FROM public.presto_test;t
array_join(array(T), varchar) → varcharMenggabungkan elemen-elemen array menjadi string menggunakan pemisah yang diberikan.SELECT array_join(b, ';') FROM public.presto_test;1;2;3;2
remove_nulls(array(T)) → array(T)Menghapus nilai NULL dari array.SELECT remove_nulls(b) FROM public.presto_test;{1,2,3,2}
trim_array(array(T), bigint) → array(T)Menghapus n elemen dari akhir array.SELECT trim_array(b, 2) FROM public.presto_test;{1,2}

Fungsi bitwise

Signature fungsiDeskripsiContohHasil
bit_count(bigint, bigint) → bigintMenghitung jumlah bit yang bernilai 1 (Hamming weight) dalam nilai tersebut dalam lebar bit yang ditentukan.SELECT bit_count(a, 32) FROM public.presto_test;2
bitwise_and(bigint, bigint) → bigintMengembalikan hasil operasi AND bitwise dari dua bilangan bulat.SELECT bitwise_and(a, 2) FROM public.presto_test;2
bitwise_or(bigint, bigint) → bigintMengembalikan hasil operasi OR bitwise dari dua bilangan bulat.SELECT bitwise_or(a, 2) FROM public.presto_test;3
bitwise_xor(bigint, bigint) → bigintMengembalikan hasil operasi XOR bitwise dari dua bilangan bulat.SELECT bitwise_xor(a, 2) FROM public.presto_test;1
bitwise_not(bigint) → bigintMengembalikan hasil operasi NOT bitwise dari suatu bilangan bulat.SELECT bitwise_not(a) FROM public.presto_test;-4
bitwise_left_shift(bigint, bigint) → bigintMenggeser nilai ke kiri sebanyak n bit.SELECT bitwise_left_shift(a, 1) FROM public.presto_test;6
bitwise_shift_left(bigint, bigint, bigint) → bigintMenggeser nilai ke kiri sebanyak n bit dalam lebar bit yang ditentukan.SELECT bitwise_shift_left(a, 1, 32) FROM public.presto_test;6
bitwise_right_shift(bigint, bigint) → bigintMenggeser nilai ke kanan sebanyak n bit (logis, diisi nol).SELECT bitwise_right_shift(a, 1) FROM public.presto_test;1
bitwise_logical_shift_right(bigint, bigint, bigint) → bigintMenggeser nilai ke kanan sebanyak n bit (logis, diisi nol) dalam lebar bit yang ditentukan.SELECT bitwise_logical_shift_right(a, 1, 32) FROM public.presto_test;1
bitwise_arithmetic_shift_right(bigint, bigint) → bigintMenggeser nilai ke kanan sebanyak n bit, mempertahankan bit tanda (arithmetic right shift).SELECT bitwise_arithmetic_shift_right(a, 1) FROM public.presto_test;1
bitwise_right_shift_arithmetic(bigint, bigint) → bigintAlias untuk bitwise_arithmetic_shift_right. Menggeser nilai ke kanan sebanyak n bit, mempertahankan bit tanda.SELECT bitwise_right_shift_arithmetic(a, 1) FROM public.presto_test;1
bitwise_right_shift dan bitwise_logical_shift_right mengisi bit yang kosong dengan nol. bitwise_arithmetic_shift_right dan bitwise_right_shift_arithmetic mengisi dengan bit tanda, sehingga keduanya setara untuk bilangan bulat negatif.

Fungsi biner dan hash

Untuk penghashan tujuan umum, gunakan xxhash64—fungsi ini jauh lebih cepat daripada crc32 dan spooky_hash_v2_* serta menghasilkan kualitas hash yang lebih baik. Gunakan fungsi hmac_* ketika Anda memerlukan kode autentikasi berbasis kunci. Gunakan crc32 hanya untuk kompatibilitas dengan sistem yang sudah bergantung padanya.
Signature fungsiDeskripsiContohHasil
crc32(varbinary) → bigintMenghitung checksum CRC32 dari data biner.SELECT crc32(bin(a)::bytea) FROM public.presto_test;3596227959
xxhash64(varbinary) → varbinaryMenghitung hash xxHash64 dari data biner dan mengembalikan hasil biner 64-bit.SELECT xxhash64(r::BYTEA) FROM public.presto_test;\x616f621d4581935f
spooky_hash_v2_32(varbinary) → varbinaryMenghitung hash SpookyHashV2 32-bit dari data biner.SELECT spooky_hash_v2_32(r::BYTEA) FROM public.presto_test;\x4a6ed4f7
spooky_hash_v2_64(varbinary) → varbinaryMenghitung hash SpookyHashV2 64-bit dari data biner.SELECT spooky_hash_v2_64(r::BYTEA) FROM public.presto_test;\x2d89595e4a6ed4f7
hmac_md5(varbinary, varchar) → varbinaryMenghitung HMAC menggunakan MD5 dan kunci yang diberikan.SELECT hmac_md5(k::BYTEA, 'secret_key') FROM public.presto_test;\x52460d22ec7e402dc8c62aeda51ec920
hmac_sha1(varbinary, varchar) → varbinaryMenghitung HMAC menggunakan SHA-1 dan kunci yang diberikan.SELECT hmac_sha1(k::BYTEA, 'secret_key') FROM public.presto_test;\xf8b6b3ee753fe1d8052cf317b0b4606089c85b19
hmac_sha256(varbinary, varchar) → varbinaryMenghitung HMAC menggunakan SHA-256 dan kunci yang diberikan.SELECT hmac_sha256(k::BYTEA, 'secret_key') FROM public.presto_test;\x0f0d2e10ec2bdf21bbdf490fd103820089879277261e9aa53ce3f8ecfd46b687
hmac_sha512(varbinary, varchar) → varbinaryMenghitung HMAC menggunakan SHA-512 dan kunci yang diberikan.SELECT hmac_sha512(k::BYTEA, 'secret_key') FROM public.presto_test;\x99376d305f3c2e729e60eb1e096fc364b8564452c4089b509c5d0d6e63608a43f14643a82880f156bf7df5ce32ba6bc35e36980772f9199b1cf43793e9bbd545
sha1(varbinary) → varcharMenghitung hash SHA-1 dari data biner dan mengembalikannya sebagai string heksadesimal.SELECT sha1(a::text::bytea) FROM public.presto_test;77de68daecd823babbb58edb1c8e14d7106e83bb
from_base64(varchar) → varbinaryMendekode string yang dikodekan Base64 standar menjadi biner.SELECT from_base64(e) FROM public.presto_test;\x48656c6c6f20576f726c6421
to_base64(varbinary) → varcharMengkodekan data biner sebagai string Base64 standar.SELECT to_base64(r::BYTEA) FROM public.presto_test;QUJDREE=
from_base64url(varchar) → varbinaryMendekode string yang dikodekan Base64 aman-URL menjadi biner.SELECT from_base64url(e) FROM public.presto_test;\x48656c6c6f20576f726c6421
to_base64url(varbinary) → varcharMengkodekan data biner sebagai string Base64 aman-URL.SELECT to_base64url(r::BYTEA) FROM public.presto_test;QUJDREE=
from_hex(varchar) → varbinaryMendekode string heksadesimal menjadi biner.SELECT from_hex(h) FROM public.presto_test;\x48656c6c6f
from_big_endian_32(varbinary) → bigintMendekode nilai biner komplemen dua big-endian 32-bit menjadi bigint.SELECT from_big_endian_32(f::BYTEA) FROM public.presto_test;1
to_big_endian_32(bigint) → varbinaryMengkodekan bilangan bulat sebagai nilai biner komplemen dua big-endian 32-bit.SELECT to_big_endian_32(a) FROM public.presto_test;\x00000003
from_big_endian_64(varbinary) → bigintMendekode nilai biner komplemen dua big-endian 64-bit menjadi bigint.SELECT from_big_endian_64(g::BYTEA) FROM public.presto_test;1
to_big_endian_64(bigint) → varbinaryMengkodekan bilangan bulat sebagai nilai biner komplemen dua big-endian 64-bit.SELECT to_big_endian_64(a) FROM public.presto_test;\x0000000000000003
from_ieee754_32(varbinary) → realMendekode nilai biner IEEE 754 big-endian 32-bit menjadi bilangan titik mengambang presisi tunggal.SELECT from_ieee754_32(i::BYTEA) FROM public.presto_test;3.14159012
to_ieee754_32(real) → varbinaryMengkodekan bilangan titik mengambang presisi tunggal sebagai nilai biner IEEE 754 big-endian 32-bit.SELECT to_ieee754_32(a::REAL) FROM public.presto_test;\x40400000
from_ieee754_64(varbinary) → doubleMendekode nilai biner IEEE 754 big-endian 64-bit menjadi bilangan titik mengambang presisi ganda.SELECT from_ieee754_64(j::BYTEA) FROM public.presto_test;3.141592653589793
to_ieee754_64(double) → varbinaryMengkodekan bilangan titik mengambang presisi ganda sebagai nilai biner IEEE 754 big-endian 64-bit.SELECT to_ieee754_64(a::FLOAT) FROM public.presto_test;\x4008000000000000
from_base(varchar, bigint) → bigintMenginterpretasikan string sebagai angka dalam basis yang diberikan dan mengembalikan nilai desimalnya.SELECT from_base(d, 2) FROM public.presto_test;18
to_base(bigint, bigint) → varcharMengonversi bilangan bulat ke representasi stringnya dalam basis yang diberikan.SELECT to_base(a, 2) FROM public.presto_test;11

Fungsi matematika dan statistik

Matematika umum

Signature fungsiDeskripsiContohHasil
clamp(double, double, double) → doubleMembatasi nilai ke rentang [min, max]. Mengembalikan nilai jika berada dalam rentang, atau batas terdekat jika di luar rentang.SELECT clamp(a, 2, 9) FROM public.presto_test;3
cosh(double) → doubleMengembalikan kosinus hiperbolik dari nilai tersebut.SELECT cosh(a) FROM public.presto_test;10.067661995777765
tanh(double) → doubleMengembalikan tangen hiperbolik dari nilai tersebut.SELECT tanh(a) FROM public.presto_test;0.9950547536867305
log2(double) → doubleMengembalikan logaritma basis-2 dari nilai tersebut.SELECT log2(a) FROM public.presto_test;1.584962500721156
log10(double) → doubleMengembalikan logaritma basis-10 dari nilai tersebut.SELECT log10(a) FROM public.presto_test;0.47712125471966244
minus(double, double) → doubleMengembalikan selisih dua angka (x − y).SELECT minus(a, 1) FROM public.presto_test;2
negate(double) → doubleMengembalikan negasi dari nilai tersebut.SELECT negate(a) FROM public.presto_test;-3
truncate(double, integer) → doubleMemotong nilai hingga n tempat desimal.SELECT truncate(t, 2) FROM public.presto_test;3.14
is_finite(double) → booleanMengembalikan true jika nilai tersebut berhingga.SELECT is_finite(a) FROM public.presto_test;t
is_infinite(double) → booleanMengembalikan true jika nilai tersebut tak hingga.SELECT is_infinite(a) FROM public.presto_test;f
is_nan(double) → booleanMengembalikan true jika nilai tersebut bukan angka (NaN).SELECT is_nan(a) FROM public.presto_test;f
secure_rand() → doubleMengembalikan bilangan acak ganda yang aman secara kriptografi dalam rentang [0, 1).SELECT secure_rand() FROM public.presto_test;0.22077085443234523
secure_random() → doubleAlias untuk secure_rand. Mengembalikan bilangan acak ganda yang aman secara kriptografi dalam rentang [0, 1).SELECT secure_random() FROM public.presto_test;0.3414298654539425

Fungsi distribusi kumulatif (CDF)

Signature fungsiDeskripsiContohHasil
beta_cdf(double, double, double) → doubleMengembalikan Fungsi distribusi kumulatif (CDF) dari distribusi beta dengan parameter bentuk yang diberikan.SELECT beta_cdf(2, a, 0.5) FROM public.presto_test;0.6875
binomial_cdf(bigint, double, bigint) → doubleMengembalikan CDF dari distribusi binomial.SELECT binomial_cdf(6, 0.5, a) FROM public.presto_test;0.65625
cauchy_cdf(double, double, double) → doubleMengembalikan CDF dari distribusi Cauchy.SELECT cauchy_cdf(2, a, 0.5) FROM public.presto_test;0.6024163823495667
chi_squared_cdf(double, double) → doubleMengembalikan CDF dari distribusi chi-kuadrat.SELECT chi_squared_cdf(a, 4) FROM public.presto_test;0.7385358700508894
f_cdf(double, double, double) → doubleMengembalikan CDF dari distribusi F.SELECT f_cdf(2, a, 0.5) FROM public.presto_test;0.350480947161671
gamma_cdf(double, double, double) → doubleMengembalikan CDF dari distribusi gamma.SELECT gamma_cdf(2, a, 0.5) FROM public.presto_test;0.012437987627616913
laplace_cdf(double, double, double) → doubleMengembalikan CDF dari distribusi Laplace.SELECT laplace_cdf(0, 1, a) FROM public.presto_test;0.9751064658160681
normal_cdf(double, double, double) → doubleMengembalikan CDF dari distribusi normal dengan rata-rata dan deviasi standar yang diberikan.SELECT normal_cdf(0, 1, a) FROM public.presto_test;0.9986501019683699
poisson_cdf(double, bigint) → doubleMengembalikan CDF dari distribusi Poisson.SELECT poisson_cdf(1, a) FROM public.presto_test;0.9810118431238462
weibull_cdf(double, double, double) → doubleMengembalikan CDF dari distribusi Weibull.SELECT weibull_cdf(2, a, 1.5) FROM public.presto_test;0.22119921692859512
inverse_beta_cdf(double, double, double) → doubleMengembalikan invers CDF dari distribusi beta.SELECT inverse_beta_cdf(2, a, 0.6875) FROM public.presto_test;0.5
inverse_cauchy_cdf(double, double, double) → doubleMengembalikan invers CDF dari distribusi Cauchy.SELECT inverse_cauchy_cdf(2, a, 0.5) FROM public.presto_test;2
inverse_laplace_cdf(double, double, double) → doubleMengembalikan invers CDF dari distribusi Laplace.SELECT inverse_laplace_cdf(a, 1, 0.5) FROM public.presto_test;3
inverse_normal_cdf(double, double, double) → doubleMengembalikan invers CDF dari distribusi normal dengan rata-rata dan deviasi standar yang diberikan.SELECT inverse_normal_cdf(a, 1, 0.5) FROM public.presto_test;3
inverse_weibull_cdf(double, double, double) → doubleMengembalikan invers CDF dari distribusi Weibull.SELECT inverse_weibull_cdf(2, a, 0.5) FROM public.presto_test;2.497663833473093
wilson_interval_lower(bigint, bigint, double) → doubleMengembalikan batas bawah interval kepercayaan Wilson untuk percobaan Bernoulli pada tingkat kepercayaan z yang diberikan.SELECT wilson_interval_lower(a, 20, 1.96) FROM public.presto_test;0.05236779195949585
wilson_interval_upper(bigint, bigint, double) → doubleMengembalikan batas atas interval kepercayaan Wilson untuk percobaan Bernoulli pada tingkat kepercayaan z yang diberikan.SELECT wilson_interval_upper(a, 20, 1.96) FROM public.presto_test;0.3604232958869574

Fungsi string dan Unicode

Fungsi-fungsi ini beroperasi pada code point Unicode, bukan karakter yang terlihat pengguna (grapheme clusters). String input harus berupa UTF-8 yang valid.
Signature fungsiDeskripsiContohHasil
codepoint(varchar) → integerMengembalikan code point Unicode dari satu karakter.SELECT codepoint(c) FROM public.presto_test;65
ends_with(varchar, varchar) → booleanMengembalikan true jika string diakhiri dengan sufiks yang diberikan.SELECT ends_with(concat(a, 'hologres'), 'gres') FROM public.presto_test;t
hamming_distance(varchar, varchar) → bigintMengembalikan jarak Hamming antara dua string — jumlah posisi di mana karakter berbeda.SELECT hamming_distance(e, 'SGVsBG7gV39ybGQh') FROM public.presto_test;3
levenshtein_distance(varchar, varchar) → bigintMengembalikan jarak Levenshtein (jarak edit) antara dua string.SELECT levenshtein(a::text, 'hologres') FROM public.presto_test;8
normalize(varchar) → varcharMengubah string ke bentuk ternormalisasi NFC.SELECT normalize(o) FROM public.presto_test;café
regexp_split(varchar, varchar) → array(varchar)Memisahkan string menggunakan ekspresi reguler dan mengembalikan bagian-bagiannya sebagai array.SELECT regexp_split(p, ',') FROM public.presto_test;{"apple","banana","cherry"}
strrpos(varchar, varchar) → bigintMengembalikan posisi kemunculan terakhir suatu substring dalam string.SELECT STRRPOS(r, 'A') FROM public.presto_test;5
trim(varchar, varchar) → varcharMenghapus kemunculan karakter yang ditentukan dari kedua ujung string.SELECT trim(r, 'A') FROM public.presto_test;BCD
word_stem(varchar, varchar) → varcharMengembalikan stem sebuah kata dalam bahasa yang ditentukan. Gunakan 'en' untuk bahasa Inggris atau 'zn' untuk bahasa Tionghoa.SELECT word_stem(s, 'en') FROM public.presto_test;run

Fungsi perbandingan

Signature fungsiDeskripsiContohHasil
eq(T, T) → booleanMengembalikan true jika kedua nilai sama.SELECT eq(c, 'A') FROM public.presto_test;t
neq(T, T) → booleanMengembalikan true jika kedua nilai tidak sama.SELECT neq('A', c) FROM public.presto_test;f
gt(varchar, varchar) → booleanMengembalikan true jika x > y.SELECT gt('B', c) FROM public.presto_test;t
gte(varchar, varchar) → booleanMengembalikan true jika x ≥ y.SELECT gte('A', c) FROM public.presto_test;t
lt(varchar, varchar) → booleanMengembalikan true jika x < y.SELECT lt('ABCDA', c) FROM public.presto_test;f
lte(varchar, varchar) → booleanMengembalikan true jika x ≤ y.SELECT lte('A', c) FROM public.presto_test;t

Fungsi JSON

Signature fungsiDeskripsiContohHasil
is_json_scalar(varchar) → booleanMengembalikan true jika nilai tersebut merupakan skalar JSON (bukan objek atau array).SELECT is_json_scalar(l) FROM public.presto_test;t
json_array_contains(varchar, T) → booleanMengembalikan true jika array JSON berisi nilai yang diberikan.SELECT json_array_contains(u, 2) FROM public.presto_test;t
json_extract_scalar(varchar, varchar) → varcharMengekstraksi nilai skalar dari string JSON pada JSONPath yang diberikan.SELECT json_extract_scalar(m, '$[1]') FROM public.presto_test;2
json_size(varchar, varchar) → bigintMengembalikan jumlah elemen dalam objek atau array JSON pada JSONPath yang diberikan.SELECT json_size(n, '$.x') FROM public.presto_test;2

Fungsi URL

Ekstraksi URL mengikuti sintaks URI yang didefinisikan dalam RFC 2396:

[protocol:][//host[:port]][path][?query][#fragment]

Komponen yang diekstraksi tidak mencakup pemisah sintaks URI seperti : atau ?.

Signature fungsiDeskripsiContohHasil
url_decode(varchar) → varcharMendekode string yang dikodekan URL.SELECT url_decode(url_encode(concat('www.', '中文', a, '.com'))) FROM public.presto_test;www.中文3.com
url_encode(varchar) → varcharMengkodekan URL string dengan meng-escape karakter khusus.SELECT url_encode(concat('www.', '中文', a, '.com')) FROM public.presto_test;www.%E4%B8%AD%E6%96%873.com
url_extract_fragment(varchar) → varcharMengekstraksi identifier fragmen dari URL.SELECT url_extract_fragment(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;discount-section
url_extract_host(varchar) → varcharMengekstraksi host dari URL.SELECT url_extract_host(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;www.example.com
url_extract_parameter(varchar, varchar) → varcharMengekstraksi nilai parameter query pertama dengan nama yang diberikan.SELECT url_extract_parameter(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section'), 'color') FROM public.presto_test;red
url_extract_path(varchar) → varcharMengekstraksi path dari URL.SELECT url_extract_path(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;/products/shirt
url_extract_port(varchar) → bigintMengekstraksi nomor port dari URL.SELECT url_extract_port(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;3088
url_extract_protocol(varchar) → varcharMengekstraksi protokol dari URL.SELECT url_extract_protocol(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;https
url_extract_query(varchar) → varcharMengekstraksi string query dari URL.SELECT url_extract_query(concat('https://www.example.com:', a, '080/products/shirt?color=red&size=XL#discount-section')) FROM public.presto_test;color=red&size=XL

Langkah berikutnya