Anda dapat menggunakan Dynamic Table untuk membangun pipeline data dan hierarki data yang efisien, hemat biaya, serta otomatis. Topik ini menjelaskan dukungan dan batasan Dynamic Table.
Incremental refresh
Dynamic Table dalam mode incremental refresh memiliki fitur dan batasan berikut.
Batasan
-
Penggunaan Sumber Daya
Mulai dari Hologres V3.1, tabel baru secara default menggunakan resource serverless untuk menjalankan tugas refresh. Jika instans tidak memiliki resource serverless yang diaktifkan, sistem akan beralih secara otomatis ke resource lokal. Tabel yang dibuat di Hologres V3.0 tetap menggunakan resource yang ditentukan saat pembuatan dan tidak beralih otomatis ke resource serverless.
-
Batasan pada tabel dasar
-
Hanya tabel internal Hologres, tabel eksternal Paimon, dan Dynamic Table lain yang didukung sebagai tabel dasar. Untuk membuat Dynamic Table, Anda harus memiliki izin SELECT pada tabel dasar tersebut.
-
Secara default, Hologres V3.1 mengonsumsi data tabel dasar secara inkremental menggunakan metode stream. Dibandingkan dengan metode Binlog, metode stream menawarkan performa lebih baik dan tidak menimbulkan biaya penyimpanan tambahan. Jika tabel dasar Anda sebelumnya menggunakan metode Binlog sebelum V3.1, kami menyarankan agar Anda segera menonaktifkan Binlog untuk mencegah konsumsi penyimpanan tambahan. Untuk menonaktifkan Binlog, lihat Subscribe to Hologres Binlog.
-
Di Hologres V3.0, saat membuat Dynamic Table dalam mode incremental refresh, Binlog harus diaktifkan pada tabel dasar. Namun, hal ini tidak diperlukan untuk tabel dimensi. Untuk informasi lebih lanjut tentang cara mengaktifkan Binlog, lihat Subscribe to Hologres Binlog.
-
-
Batasan pada kueri
-
Skenario yang didukung
-
Ekspresi skalar apa pun
-
Kondisi WHERE
-
Subkueri
-
Common Table Expressions (CTEs)
-
GROUP BY
-
CUBE
-
GROUPING SETS
-
Klausa HAVING
-
Filter agregat
-
UNION ALL
-
UNNEST
-
-
Fungsi jendela: hanya fungsi berikut yang didukung. Semua fungsi jendela lain, seperti dense_rank, first_value, dan last_value, serta jendela agregat seperti SUM dan COUNT, tidak didukung.
-
row_number dan rank: didukung di Hologres V4.2 dan versi lebih baru. Kueri harus menyertakan filter TopN di kueri luar (
WHERE rownum <= N) dan menentukan PARTITION BY serta ORDER BY. -
lead dan lag: didukung di Hologres V5.0 dan versi lebih baru. Anda harus menentukan PARTITION BY dan ORDER BY, serta hanya bentuk satu argumen
lead(expr)danlag(expr)yang didukung. -
Satu definisi jendela biasanya hanya mendukung satu fungsi jendela. lead dan lag merupakan pengecualian: keduanya dapat digunakan dalam definisi jendela yang sama.
-
Untuk sintaks dan batasan lengkap, lihat Supported functions for incremental refresh.
-
-
Skenario yang tidak didukung
-
Subkueri IN
-
EXISTS atau NOT EXISTS
-
EXCEPT atau INTERSECT
-
ORDER BY
-
LIMIT atau OFFSET
-
-
Penggabungan multi-tabel:
-
Hologres V3.0 hanya mendukung equi-join (INNER JOIN atau LEFT JOIN) pada tabel dimensi, dan join tersebut harus menggunakan sintaks
FOR SYSTEM_TIME AS OF PROCTIME(). Penggabungan double-stream multi-tabel tidak didukung. Untuk informasi lebih lanjut, lihat Lookup join statements.CatatanLookup join mengaitkan setiap record dengan versi terbaru data tabel dimensi pada waktu pemrosesan. Jika data tabel dimensi berubah setelah join dilakukan, data yang telah di-join sebelumnya tidak diperbarui.
-
Mulai dari Hologres V3.0.26, penggabungan double-stream multi-tabel didukung. Ini setara dengan join OLAP standar atau double-stream join di Flink, termasuk INNER JOIN dan LEFT/RIGHT/FULL OUTER JOIN. Untuk informasi lebih lanjut, lihat CREATE DYNAMIC TABLE.
-
-
Fungsi: fungsi agregat seperti COUNT, SUM, MIN/MAX, dan COUNT DISTINCT didukung. Fungsi yang berjalan di Parallel Query Engine (PQE) tidak didukung. Tabel berikut menjelaskan fungsi lain yang didukung.
Function
Syntax
Example
Supported version
RB_BUILD_AGG
RB_BUILD_AGG(<column>)CatatanParameter
columnmendukung tipe dataINT32danINT64. Untuk informasi lebih lanjut, lihat RoaringBitmap functions.CREATE DYNAMIC TABLE daily_uv PARTITION BY list (day) WITH ( freshness = '5 minutes', refresh_mode = 'incremental') AS SELECT day, game_id, gameversion, RB_BUILD_AGG(user_id) AS user_rb FROM base_table GROUP BY day, game_id, gameversion;V3.1 dan versi lebih baru
STRING_AGG
STRING_AGG([DISTINCT] column_expr, const_expr)Catatan-
Tipe data:
column_exprharus bertipeTEXT,CHAR, atauVARCHAR.const_exprharus berupa konstantaTEXT. -
Klausa
ORDER BYtidak didukung. -
Mulai dari Hologres V3.1.10,
STRING_AGG([DISTINCT]didukung.
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;-
V3.1 dan versi lebih baru
-
Mulai dari V3.1.10,
STRING_AGG([DISTINCT]didukung.
ARRAY_AGG
ARRAY_AGG([DISTINCT] expr)Catatan-
Tipe data: Parameter
exprmendukungBOOL, semua tipe numerik,TEXT, danBYTEA. -
Klausa
ORDER BYtidak didukung. -
Mulai dari Hologres V3.1.10,
ARRAY_AGG([DISTINCT]didukung.
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;-
V3.1 dan versi lebih baru
-
Mulai dari Hologres V3.1.10,
ARRAY_AGG([DISTINCT]didukung.
ANY_VALUE
Dalam kueri agregat yang berisi klausa
GROUP BY, fungsi ini mengembalikan nilai dari salah satu baris dalam setiap kelompok secara non-deterministik.ANY_VALUE(expr)Fungsi
ANY_VALUEhanya menerima tipe dataINTdanBINARY.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;V3.1.5 dan versi lebih baru
-
-
Mulai dari Hologres V3.1, Anda dapat mengonfigurasi Dynamic Table sebagai partisi logis. Properti partisi terkait dan pengaturan manajemen juga didukung.
-
Full refresh
Dynamic Table dalam mode full refresh memiliki fitur dan batasan berikut.
Fitur yang didukung
-
Tabel dasar: Fungsionalitasnya sama dengan tabel Hologres standar. Anda dapat menggunakan tabel internal Hologres dan tabel eksternal, seperti dari MaxCompute, Data Lake Formation (DLF), dan Paimon, sebagai tabel dasar. Anda harus memiliki izin yang diperlukan pada tabel dasar untuk membuat Dynamic Table. Untuk informasi lebih lanjut, lihat Dynamic Table permissions.
-
Kueri: Semua fungsi, ekspresi SQL, dan tipe data yang saat ini didukung oleh Hologres juga didukung dalam mode full refresh.
-
Resource refresh: Secara default, tugas refresh menggunakan resource serverless. Anda juga dapat mengonfigurasi tugas agar menggunakan resource instans Anda saat ini.
Batasan
-
Anda tidak dapat mengubah mode refresh dari full refresh ke incremental refresh.
-
Di Hologres V3.0, jika Anda membuat VIEW pada Dynamic Table yang berada dalam mode full refresh, proses refresh Dynamic Table tersebut gagal. Masalah ini telah diselesaikan di V3.1 dan versi lebih baru. Kami menyarankan agar Anda melakukan upgrade instans Anda.
Batasan umum
Batasan pada tabel dinamis
-
Instans Hologres Anda harus V3.0 atau lebih baru.
-
Batasan pada properti tabel: Anda tidak dapat menetapkan primary key atau nilai field default. Mesin secara otomatis melakukan inferensi indeks tabel, tetapi Anda juga dapat menyetelnya secara manual sesuai kebutuhan bisnis Anda.
-
Hanya mode full refresh dan incremental refresh yang didukung. Fitur dan batasan yang didukung berbeda-beda tergantung pada mode. Untuk detailnya, lihat Full refresh dan Incremental refresh.
-
Refresh cascading (
freshness = 'upstream') memiliki batasan berikut, yang berlaku untuk mode full refresh maupun incremental refresh:-
Hanya didukung di Hologres V5.0 dan versi lebih baru.
-
Saat Anda menetapkan
freshness = 'upstream', minimal satu dari tabel dasar harus berupa dynamic table. -
Dependensi cascading tidak boleh membentuk siklus.
-
Jika refresh upstream gagal, refresh downstream tidak dipicu. Kegagalan tidak menyebar ke downstream, dan tabel downstream tetap menyimpan data dari refresh terakhir yang berhasil.
-
Jika sebuah dynamic table memiliki dependensi downstream, operasi DROP pada tabel tersebut ditolak. Anda harus terlebih dahulu menghapus tabel downstream atau menghapus dependensinya.
-
Hanya satu refresh cascading yang berjalan dalam satu waktu untuk tabel downstream tertentu. Jika pemicu upstream datang terlalu sering, putaran antara dilewati, dan interval refresh efektif tabel downstream sama dengan nilai terbesar antara durasi refresh satu putaran miliknya sendiri dan interval pemicu upstream.
-
Batasan pada operasi DDL dan DML
|
Operation |
Supported |
|
CREATE DYNAMIC TABLE |
Yes |
|
RENAME DYNAMIC TABLE |
Yes |
|
RENAME DYNAMIC TABLE column |
Yes |
|
SELECT |
Yes |
|
Refresh |
|
|
DROP DYNAMIC TABLE |
Yes. Ditolak jika tabel memiliki dependensi cascading downstream. |
|
DROP DYNAMIC TABLE column |
No |
|
TRUNCATE DYNAMIC TABLE |
No |
|
DML (INSERT/UPDATE/DELETE) DYNAMIC TABLE |
No |
|
ADD column |
No |
|
Resharding |
No Catatan
Resharding pada tabel dasar tidak didukung. |
|
CREATE TABLE AS/LIKE |
No |
Persyaratan izin
|
Operation |
Required permissions |
|
CREATE DYNAMIC TABLE |
|
|
ALTER DYNAMIC TABLE |
|
|
DROP DYNAMIC TABLE |
Anda harus menjadi pemilik Dynamic Table tersebut. |
|
SELECT DYNAMIC TABLE |
Izin |
|
REFRESH DYNAMIC TABLE |
Izin Catatan
Refresh pada tabel partisi induk tidak didukung. |
Untuk informasi lebih lanjut tentang pemberian izin pada Dynamic Table, lihat Hologres permission model.
Dampak operasi pada tabel dasar
|
Base table operation |
Impact |
|
RENAME <basetable_name> |
|
|
RENAME <column not used by the Dynamic Table> |
|
|
RENAME <column used by the Dynamic Table> |
|
|
DROP <basetable_name> |
|
|
DROP <basetable_name> CASCADE |
Dynamic Table juga dihapus, dan tugas refresh-nya dibatalkan. |
|
DROP <column not used by the Dynamic Table> |
|
|
DROP <column used by the Dynamic Table> |
Operasi |
|
TRUNCATE <basetable_name> |
|
|
INSERT/DELETE/UPDATE/UPSERT <basetable_name> |
Perubahan muncul di Dynamic Table setelah refresh berikutnya. |