Topik ini menjelaskan bagaimana kompatibilitas antara penyebaran dan data status terpengaruh setelah Anda memodifikasi fungsi agregat jendela yang digunakan dengan GROUP BY dalam pernyataan SQL untuk penyebaran.
Modifikasi yang tidak memengaruhi atau sebagian memengaruhi kompatibilitas
Menambah, menghapus, atau memodifikasi metrik statistik non-distinct. Metrik statistik dihitung menggunakan fungsi agregat.
Jika Anda menambahkan metrik statistik ke pernyataan SQL untuk penyebaran, penyebaran menjadi sebagian kompatibel dengan data status. Nilai dari metrik statistik yang ditambahkan bertambah saat penyebaran dimulai.
Jika Anda menghapus metrik statistik dari pernyataan SQL untuk penyebaran, penyebaran tetap sepenuhnya kompatibel dengan data status. Data status dari metrik statistik yang dihapus dibuang.
Jika Anda menambahkan metrik statistik ke pernyataan SQL untuk penyebaran dan juga menghapus metrik statistik dari pernyataan tersebut, penyebaran menjadi sebagian kompatibel dengan data status. Nilai dari metrik statistik yang ditambahkan bertambah saat penyebaran dimulai. Data status dari metrik statistik yang dihapus dibuang.
Jika Anda memodifikasi metrik statistik dalam pernyataan SQL untuk penyebaran, metrik statistik asli dihapus dan metrik statistik baru ditambahkan selama modifikasi. Penyebaran menjadi sebagian kompatibel dengan data status. Nilai dari metrik statistik yang ditambahkan bertambah saat penyebaran dimulai. Data status dari metrik statistik yang dihapus dibuang.
nullUntuk metrik statistik yang tidak Anda modifikasi, hasil perhitungan penyebaran setelah data status penyebaran digunakan kembali sama dengan hasil perhitungan penyebaran yang berjalan berdasarkan data historis.
-- Pernyataan SQL asli: select a, sum(b), max(c) from MyTable group by a, tumble(ts, interval '1' minute); -- Tambahkan metrik statistik count(c). Setelah modifikasi ini, penyebaran menjadi sebagian kompatibel dengan data status. -- Hasil perhitungan sum(b) dan max(c) tidak terpengaruh. Nilai count(c) bertambah dari 0 saat penyebaran dimulai. select a, sum(b), max(c), count(c) from MyTable group by a, tumble(ts, interval '1' minute); -- Hapus metrik statistik sum(b). Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. -- Hasil perhitungan max(c) tidak terpengaruh. select a, max(c) from MyTable group by a, tumble(ts, interval '1' minute); -- Ubah metrik statistik max(c) menjadi min(c). Setelah modifikasi ini, penyebaran menjadi sebagian kompatibel dengan data status. -- Hasil perhitungan sum(b) tidak terpengaruh. max(c) dianggap dihapus dan data statusnya dibuang. -- min(c) dianggap sebagai metrik baru, dan nilainya dihitung saat penyebaran dimulai. select a, sum(b), min(c) from MyTable group by a, tumble(ts, interval '1' minute);Mengubah posisi metrik statistik non-distinct. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c) from MyTable group by a, tumble(ts, interval '1' minute); -- Ubah posisi metrik statistik sum(b) dan max(c). Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. -- Hasil perhitungan metrik statistik sum(b) dan max(c) tidak terpengaruh. select a, max(c), sum(b) from MyTable group by a, tumble(ts, interval '1' minute);Jika logika perhitungan bidang dalam metrik statistik non-distinct berubah, metrik statistik dianggap dimodifikasi. Setelah modifikasi ini, penyebaran menjadi sebagian kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c) from MyTable group by a, tumble(ts, interval '1' minute); -- Ubah metrik statistik max(c) menjadi max(substring(c,1, 5)). Setelah modifikasi ini, penyebaran sebagian kompatibel dengan data status. -- Hasil perhitungan sum(b) tidak terpengaruh. max(c) dianggap dihapus dan data statusnya dibuang. -- max(substring(c, 1, 5)) dianggap sebagai metrik statistik baru. Nilai max(substring(c, 1, 5)) bertambah saat penyebaran dimulai. select a, sum(b), max(c) from (select a, b, substring(c, 1, 5) as c from MyTable) group by a, tumble(ts, interval '1' minute);Menambah atau menghapus atribut jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute); -- Tambahkan atribut akhir jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. select a, sum(b), max(c), tumble_start(ts, interval '1' minute) as window_start, tumble_end(ts, interval '1' minute) as window_end from MyTable group by a, tumble(ts, interval '1' minute); -- Hapus atribut awal jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. select a, sum(b), max(c) from MyTable group by a, tumble(ts, interval '1' minute);Mengubah urutan kunci klausa GROUP BY. Jika hanya urutan kunci fungsi jendela yang diubah dan urutan kunci lainnya tetap tidak berubah, penyebaran tetap sepenuhnya kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(distinct b), max(distinct c), count(c) from MyTable group by a, b, tumble(rowtime, interval '15' minute); -- Ubah urutan kunci klausa GROUP BY. Hanya urutan kunci fungsi jendela yang diubah dan urutan kunci lainnya tetap tidak berubah. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. select a, sum(distinct b), max(distinct c), count(c) from MyTable group by a, tumble(rowtime, interval '15' minute), b;Tidak ada metrik statistik yang terlibat dalam pernyataan SQL sebelum dan sesudah modifikasi pada penyebaran. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status.
Modifikasi yang menyebabkan ketidakcocokan penuh
Jika Anda memodifikasi atribut terkait jendela, seperti tipe jendela, ukuran jendela, dan atribut terkait waktu, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute); -- Ubah tipe jendela dari TUMBLE menjadi HOP. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(b), max(c), hop_start(ts, interval '1' minute, interval '2' minute) as window_start from MyTable group by a, hop(ts, interval '1' minute, interval '2' minute); -- Jika Anda mengubah ukuran jendela dari '1' menit menjadi '2' menit, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(b), max(c), tumble_start(ts, interval '2' minute) as window_start from MyTable group by a, tumble(ts, interval '2' minute); -- Ubah atribut terkait waktu dari ts menjadi proctime. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(b), max(c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(proctime, interval '1' minute);Jika Anda menambah, menghapus, atau memodifikasi dimensi statistik atau mengubah logika perhitungan bidang yang terkait dengan dimensi statistik dalam pernyataan SQL untuk penyebaran, penyebaran menjadi tidak kompatibel dengan data status. Dimensi statistik ditentukan oleh kunci klausa GROUP BY.
-- Pernyataan SQL asli: select a, sum(b), max(c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute); -- Tambahkan dimensi statistik d. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(b), max(c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, d, tumble(ts, interval '1' minute); -- Untuk contoh lainnya, lihat contoh mengubah kunci dalam "Fungsi agregat yang digunakan dengan GROUP BY."Jika Anda menambah, menghapus, atau memodifikasi metrik statistik distinct atau mengubah logika perhitungan bidang yang terkait dengan metrik statistik distinct dalam pernyataan SQL untuk penyebaran, penyebaran menjadi tidak kompatibel dengan data status. Metrik statistik distinct dihitung menggunakan fungsi agregat.
-- Pernyataan SQL asli: select a, sum(b), max(c), count(distinct c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute); -- Tambahkan metrik statistik distinct count(distinct b). Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(b), count(distinct b), max(c), count(distinct c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute); -- Untuk contoh lainnya, lihat contoh memodifikasi metrik statistik distinct dalam "Fungsi agregat yang digunakan dengan GROUP BY."Jika Anda menghapus semua metrik statistik dari pernyataan SQL untuk penyebaran, penyebaran menjadi tidak kompatibel dengan data status. Data status dari semua metrik statistik dibuang dan tidak ada data status yang digunakan kembali.
-- Pernyataan SQL asli: select a, sum(b), count(distinct b), max(c), count(distinct c), tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute); -- Hapus semua metrik statistik sum(b) dan max(c). Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, tumble_start(ts, interval '1' minute) as window_start from MyTable group by a, tumble(ts, interval '1' minute);Jika Anda menambah, menghapus, atau memodifikasi early-fire atau late-fire jendela dalam pernyataan SQL untuk penyebaran, penyebaran menjadi tidak kompatibel dengan data status.
Mengubah urutan kunci klausa GROUP BY. Jika urutan kunci klausa GROUP BY selain kunci fungsi jendela diubah, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(distinct b), max(distinct c), count(c) from MyTable group by a, b, tumble(rowtime, interval '15' minute); -- Ubah urutan kunci klausa GROUP BY. Urutan kunci klausa GROUP BY selain kunci fungsi jendela diubah. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(distinct b), max(distinct c), count(c) from MyTable group by b, a, tumble(rowtime, interval '15' minute);Jika Anda menambahkan metrik statistik ke pernyataan SQL untuk penyebaran yang tidak memiliki metrik statistik apa pun, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, b, c from MyTable group by a, b, c, tumble(rowtime, interval '15' minute); -- Tambahkan metrik statistik. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, b, c, count(c) from MyTable group by a, b, c, tumble(rowtime, interval '15' minute);Jika hanya satu metrik statistik yang ada dalam pernyataan SQL dan logika perhitungan diubah setelah modifikasi pada penyebaran, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(b), max(c) from MyTable group by b, a, tumble(ts, interval '15' minute); -- Hanya satu metrik statistik yang ada dalam penyebaran dan logika perhitungan diubah. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, max(c) from (select a, b, c + 1 as c, ts from MyTable) group by b, a, tumble(ts, interval '15' minute);Jika metrik statistik sebelum dan sesudah modifikasi pada penyebaran berbeda, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(b), max(c) from MyTable group by a, tumble(ts, interval '1' second); -- Metrik statistik sebelum dan sesudah modifikasi berbeda. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, min(b), avg(b) from MyTable group by a, tumble(ts, interval '1' second);Jika pernyataan SQL untuk penyebaran berisi konfigurasi
'table.exec.emit.early-fire.enabled' = 'true'atau'table.exec.emit.late-fire.enabled' = 'true'sebelum atau sesudah modifikasi pada penyebaran, penyebaran menjadi tidak kompatibel dengan data status.-- Pernyataan SQL asli: select a, max(c) from (select a, b, c + 1 as c, ts from MyTable) group by b, a, TUMBLE(ts, interval '15' minute); -- Tambahkan konfigurasi. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. set 'table.exec.emit.early-fire.enabled' = 'true'; set 'table.exec.emit.early-fire.delay' = '500ms'; -- atau set 'table.exec.emit.late-fire.enabled' = 'true'; set 'able.exec.emit.late-fire.delay' = '1s'; set 'table.exec.emit.allow-lateness' = '5s'; select a, max(c) from (select a, b, c + 1 as c, ts from MyTable) group by b, a, TUMBLE(ts, interval '15' minute);Jika pernyataan SQL untuk penyebaran berisi fungsi agregat yang didefinisikan pengguna Python (UDAF) sebelum atau sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
-- Pernyataan SQL berisi UDAF Python, seperti fungsi weighter_avg, sebelum atau sesudah modifikasi. Setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui. SELECT COUNT(DISTINCT b), a, SUM(DISTINCT b),weighted_avg(a, b) FROM MyTable GROUP BY a, c;