All Products
Search
Document Center

Hologres:Fungsi yang didukung untuk Pembaruan bertahap

Last Updated:Feb 07, 2026

Topik ini mencantumkan fungsi-fungsi yang didukung oleh Pembaruan Bertahap Dynamic Table, termasuk daftar dukungan fungsi serta deskripsi dan contoh penggunaan untuk fungsi seperti hg_id_encoding dan min_by/max_by.

Daftar dukungan fungsi

Pembaruan Bertahap Dynamic Table mendukung fungsi agregat dasar, seperti COUNT, SUM, MIN/MAX, dan COUNT DISTINCT. Tabel berikut mencantumkan dukungan untuk fungsi yang lebih kompleks.

Function name

Description

Dynamic Table example

Supported versions

hg_id_encoding_int32 / hg_id_encoding_int64

Memetakan bidang UID bertipe text ke tipe int atau bigint. Setiap kali fungsi ini dipanggil, data secara otomatis ditulis dan diperbarui di tabel pemetaan pengguna. Fungsi ini sering digunakan untuk menghitung unique visitors (UVs) dalam epoch yang panjang. Dalam skenario tersebut, UID pengguna merupakan bidang teks yang dipetakan ke tipe int guna memfasilitasi perhitungan RoaringBitmap.

Untuk informasi selengkapnya, lihat Menghitung UV dalam periode sembarang panjang menggunakan Dynamic Table Hologres.

  • Fungsi ini hanya didukung di Hologres V4.1 dan versi setelahnya.

min_by / max_by

Fungsi min_by dan max_by menemukan nilai maksimum atau minimum pada kolom expr2 dan mengembalikan nilai yang sesuai dari kolom expr1.

min/max_by(expr1, expr2)
  • Parameter: expr2 adalah kolom yang digunakan untuk perbandingan; expr1 adalah kolom terkait yang nilainya dikembalikan.

  • Nilai kembalian: Nilai expr1 dari baris yang memiliki nilai maksimum atau minimum pada expr2.

Untuk informasi selengkapnya, lihat Contoh Dynamic Table.

  • Hanya didukung di Hologres V4.0 dan versi setelahnya.

RB_BUILD_AGG


RB_BUILD_AGG(<column>)

Deskripsi: Parameter kolom mendukung tipe int32 dan int64. Untuk informasi selengkapnya, lihat Fungsi RoaringBitmap.

Lihat Solusi Perhitungan UV Periode Panjang Sembarang dengan Dynamic Table Hologres.

  • Hologres V3.1 dan versi setelahnya.

string_agg

string_agg([distinct] column_expr, const_expr)

Deskripsi:

  • Tipe parameter: column_expr harus bertipe text, char, atau varchar; const_expr harus berupa konstanta bertipe text.

  • Klausa order by tidak didukung.

  • Sintaksis string_agg([distinct]) didukung di Hologres V3.1.10 dan versi setelahnya.

CREATE DYNAMIC TABLE string_agg_test_dt  
  WITH (
    freshness = '3 minutes', 
    refresh_mode = 'incremental') 
  as 
  SELECT day,
         string_agg(gameversion, ',') AS gameversion_list
    FROM base_table group by day;
  • Hologres V3.1 dan versi setelahnya.

  • Sintaksis string_agg([distinct]) didukung di Hologres V3.1.10 dan versi setelahnya.

array_agg

array_agg([distinct] expr)

Deskripsi:

  • Tipe parameter expr: Mendukung boolean, semua tipe numerik, text, dan bytea.

  • Klausa order by tidak didukung.

  • Hologres V3.1.10 memperkenalkan dukungan untuk string_agg([distinct]).

CREATE DYNAMIC TABLE array_agg_test_dt  
  WITH (
    freshness = '3 minutes', 
    refresh_mode = 'incremental') 
  as 
  SELECT day,
         array_agg(gameversion) AS gameversion_list
    FROM base_table group by day;
  • Hologres V3.1 dan versi setelahnya.

  • Versi Hologres V3.1.10 dan setelahnya mendukung string_agg([distinct]).

any_value

Dalam kueri agregat yang mencakup klausa group by, fungsi ini secara acak memilih dan mengembalikan nilai dari suatu baris dalam setiap kelompok agregasi. Hasilnya bersifat non-deterministik.

CREATE  DYNAMIC TABLE dt_t0
WITH (
  -- Properties of the dynamic table
  freshness = '1 minutes', 
  auto_refresh_mode = 'auto'
)
AS 
select a,any_value(c),sum(b) from t0 group by a;
  • Didukung di Hologres V3.1.5 dan versi setelahnya.

  • Parameter input untuk any_value hanya mendukung tipe int dan binary.

hg_id_encoding_int32 / hg_id_encoding_int64

Hologres V4.1 dan versi setelahnya mendukung fungsi hg_id_encoding_int32 dan hg_id_encoding_int64. Fungsi-fungsi ini memetakan bidang UID bertipe text ke tipe int32 atau int64 dan secara otomatis menulis data ke tabel user_mapping. Anda dapat menggabungkan fungsi-fungsi ini dengan Pembaruan Bertahap Dynamic Table dan RoaringBitmap untuk menghitung UV dalam epoch yang panjang. Untuk informasi selengkapnya, lihat praktik terbaik untuk analisis perilaku pengguna.

Sintaksis

hg_id_encoding_int4(<user_id>, '<mapping_tablename>')
hg_id_encoding_int8(<user_id>, '<mapping_tablename>')

Parameter:

  • Parameter pertama: Kolom UID bertipe text.

  • Parameter kedua: Nama tabel user_mapping. Anda harus membuat tabel pemetaan pengguna terlebih dahulu untuk memetakan UID bertipe text ke tipe int.

Batasan

  • Tabel user_mapping harus memiliki primary key dan hanya satu bidang Serial selain primary key. Saat ini, hanya primary key satu kolom bertipe text yang didukung.

  • Parameter pertama hanya mendukung bidang UID bertipe text dan tidak mendukung nilai NULL. Jika tidak, akan terjadi error saat fungsi dieksekusi.

  • Saat fungsi dipanggil, data pemetaan secara otomatis ditulis ke tabel user_mapping. Jika UID sudah ada, entri tersebut akan diabaikan dan hanya data baru yang ditambahkan.

  • Hanya didukung di Hologres V4.1 dan versi setelahnya.

Contoh

CREATE TABLE base_table(user_id text);
INSERT INTO base_table VALUES('a');

-- Buat tabel user_mapping.
CREATE TABLE uid_mapping(user_id text PRIMARY KEY, id serial);

-- Petakan UID dari tabel dasar menggunakan hg_id_encoding_int4 dan tulis secara otomatis ke tabel pemetaan.
SELECT user_id, hg_id_encoding_int4(user_id, 'uid_mapping') AS res FROM base_table;

-- Kueri tabel pemetaan.
-- user_id | id
-- --------+----
--   a     |  1

min_by / max_by

Fungsi min_by dan max_by menemukan nilai minimum atau maksimum pada kolom expr2 dan mengembalikan nilai yang sesuai dari kolom expr1.

min_by(expr1, expr2)
max_by(expr1, expr2)

Parameter: expr2 adalah kolom yang digunakan untuk perbandingan, sedangkan expr1 adalah kolom terkait yang nilainya dikembalikan. Nilai kembalian: Nilai expr1 dari baris yang memiliki nilai minimum atau maksimum pada expr2. Batasan: Hanya didukung di Hologres V4.0 dan versi setelahnya.

Contoh Dynamic Table

DROP TABLE IF EXISTS detail;
CREATE TABLE detail (
  userid       text,
  event_id     text,
  create_time  timestamptz
);

INSERT INTO detail(userid, event_id, create_time) VALUES
  ('user_1', 'e1', '2024-12-20 10:00:00+08'),
  ('user_1', 'e2', '2024-12-20 11:30:00+08'),
  ('user_1', 'e3', '2024-12-21 09:15:00+08'),
  ('user_2', 'e4', '2024-12-20 08:05:00+08'),
  ('user_2', 'e5', '2024-12-22 14:20:00+08'),
  ('user_3', 'e6', '2024-12-21 16:45:00+08');

DROP TABLE IF EXISTS detail_user_first_last_event;

CREATE DYNAMIC TABLE detail_user_first_last_event
WITH (
  auto_refresh_mode = 'incremental',
  computing_resource = 'local',
  freshness = '3 minutes'
)
AS
SELECT
  userid,
  min_by(event_id, create_time) AS first_event_id,
  max_by(event_id, create_time) AS last_event_id,
  date_trunc('day', max(create_time))::date AS dt
FROM detail
GROUP BY userid;