Topik ini menjelaskan bagaimana kompatibilitas antara penyebaran dan data status terpengaruh setelah Anda memodifikasi fungsi tabel berbasis jendela (TVF) dalam pernyataan SQL untuk penyebaran tersebut.
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 fungsi agregat untuk metrik statistik ke dalam 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 dalam pernyataan SQL untuk penyebaran dan 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. 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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- 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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- 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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- 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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end;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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- 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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end;Jika logika komputasi suatu 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 table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- Ubah metrik statistik max(c) menjadi max(substring(c,1, 5)). Setelah modifikasi ini, penyebaran menjadi 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. create temporary view MyView select a, b, substring(c, 1, 5) as c, ts from MyTable; select a, sum(b), max(c) from table (tumble(table MyView, descriptor(ts), interval '1' minute)) group by a, window_start, window_end;Menambah atau menghapus atribut jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c), window_start from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- Tambahkan atribut akhir jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. select a, sum(b), max(c), window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- Hapus atribut awal jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. select a, sum(b), max(c) from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end;Jika tidak ada metrik statistik yang termasuk dalam pernyataan SQL sebelum dan sesudah penyebaran dimodifikasi, penyebaran tetap sepenuhnya kompatibel dengan data status.
Mengubah urutan kunci grup. Jika hanya urutan kunci grup yang terkait dengan fungsi jendela yang diubah dan urutan kunci grup lainnya tetap tidak berubah, penyebaran tetap sepenuhnya kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c) from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, c, window_end, window_start; -- Ubah urutan kunci grup yang terkait dengan fungsi jendela. Setelah modifikasi ini, penyebaran tetap sepenuhnya kompatibel dengan data status. select a, sum(b), max(c) from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_end, c, window_start;
Modifikasi yang menyebabkan ketidaksesuaian 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), window_start from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, window_start, window_end; -- 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); -- Ubah ukuran jendela dari '1' menit menjadi '2' menit. Setelah modifikasi ini, 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 kunci grup atau mengubah logika komputasi suatu bidang yang digunakan sebagai kunci grup dalam pernyataan SQL untuk penyebaran, 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); -- Tambahkan kunci grup 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 grup dalam "Fungsi agregat yang digunakan dengan GROUP BY."Jika Anda menambah, menghapus, atau memodifikasi metrik statistik distinct atau mengubah logika komputasi suatu 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 distinct.
-- 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); -- Tambahkan metrik statistik distinct count(distinct b). Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. 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); -- 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, termasuk 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);Mengubah urutan kunci dalam klausa GROUP BY. Jika urutan kunci grup selain kunci yang terkait dengan fungsi jendela diubah, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c) from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, c, window_end, window_start; -- Ubah urutan kunci grup selain kunci yang terkait dengan fungsi jendela. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, sum(b), max(c) from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by c, a, window_end, window_start;Jika Anda menambahkan metrik statistik ke dalam pernyataan SQL untuk penyebaran yang awalnya tidak mencakup metrik statistik, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, b from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, b, window_end, window_start; -- Tambahkan metrik statistik baru. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. select a, b, count(a) from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) group by a, b, window_end, window_start;Jika hanya satu metrik statistik yang ada dalam pernyataan SQL dan logika perhitungan metrik statistik tersebut diubah, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: insert into MySink select a, sum(b) from table(tumble(table MyTable, descriptor(ts), interval '1' second)) group by a, window_start, window_end; -- Hanya satu metrik statistik yang ada dalam pernyataan SQL untuk penyebaran dan logika perhitungan metrik statistik tersebut diubah. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. create temporary view MyView as select a, b + 1 as b, ts from MyTable; insert into MySink select a, sum(b) from table(tumble(table MyView, descriptor(ts), interval '1' second)) group by a, window_start, window_end;Jika metrik statistik sebelum dan sesudah penyebaran dimodifikasi berbeda, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: insert into MySink select a, sum(b) from table(tumble(table MyTable, descriptor(ts), interval '1' second)) group by a, c, window_start, window_end; -- Metrik statistik sebelum dan sesudah penyebaran dimodifikasi berbeda. Setelah modifikasi ini, penyebaran menjadi tidak kompatibel dengan data status. insert into MySink select a, min(b) from table(tumble(table MyTable, descriptor(ts), interval '1' second)) group by a, c, window_start, window_end;Menambah atau menghapus klausa untuk perhitungan bidang window_start, window_end, dan window_time antara fungsi jendela dan klausa GROUP BY.
Jika Anda menambahkan klausa untuk perhitungan bidang ke dalam pernyataan SQL untuk penyebaran, penyebaran menjadi tidak kompatibel dengan data status.
Jika Anda menghapus klausa untuk perhitungan bidang dari pernyataan SQL untuk penyebaran, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c), window_start,window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start, window_end; -- Tambahkan klausa untuk perhitungan bidang. select a, sum(b), max(c), window_start,window_end from (select a, b, c, window_start + (INTERVAL '1' SECOND) as window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start, window_end;
Klausa GROUP BY tidak mencakup kedua bidang window_start dan window_end.
Jika klausa GROUP BY dari penyebaran mencakup kedua bidang window_start dan window_end sebelum modifikasi dan tidak mencakup kedua bidang tersebut setelah modifikasi, penyebaran menjadi tidak kompatibel dengan data status.
Jika klausa GROUP BY dari penyebaran tidak mencakup kedua bidang window_start dan window_end sebelum modifikasi dan mencakup kedua bidang tersebut setelah modifikasi, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c), window_start from (select a, b, c, window_start from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start; -- Klausa GROUP BY mencakup kedua bidang window_start dan window_end. select a, sum(b), max(c), window_start,window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start, window_end;
GROUPING SETS, CUBE, atau ROLLUP digunakan dalam klausa GROUP BY. Dalam hal ini, data dikelompokkan secara terpisah oleh bidang window_start dan window_end.
Jika GROUPING SETS, CUBE, atau ROLLUP digunakan dalam klausa GROUP BY dari penyebaran setelah modifikasi, penyebaran menjadi tidak kompatibel dengan data status.
Jika GROUPING SETS, CUBE, atau ROLLUP dihapus dari klausa GROUP BY dari penyebaran setelah modifikasi, penyebaran menjadi tidak kompatibel dengan data status.
-- Pernyataan SQL asli: select a, sum(b), max(c), window_start, window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start, window_end; -- Tambahkan GROUPING SETS ke dalam pernyataan SQL. select a, sum(b), max(c), window_start, window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by GROUPING sets((a), (window_start), (window_end));
Modifikasi yang menyebabkan kompatibilitas tidak diketahui
Menambah atau menghapus klausa untuk perhitungan bidang window_start, window_end, dan window_time antara fungsi jendela dan klausa GROUP BY.
Jika klausa untuk perhitungan bidang ada dalam pernyataan SQL untuk penyebaran sebelum dan sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Filter bidang window_start, window_end, dan window_time antara fungsi jendela dan klausa GROUP BY.
Jika klausa filter ditambahkan ke dalam pernyataan SQL untuk penyebaran, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika klausa filter dihapus dari pernyataan SQL untuk penyebaran, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika klausa filter ada dalam pernyataan SQL untuk penyebaran sebelum dan sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
-- Pernyataan SQL asli select a, sum(b), max(c), window_start,window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start, window_end; -- Tambahkan klausa filter ke dalam pernyataan SQL. select a, sum(b), max(c), window_start,window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) WHERE window_start >= TIMESTAMP '2024-04-15 08:06:00.000') group by a, window_start, window_end;
Fungsi jendela digunakan bersama dengan fungsi tabel yang didefinisikan pengguna (UDTF).
Jika UDTF ditambahkan ke dalam pernyataan SQL untuk penyebaran setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika UDTF dihapus dari pernyataan SQL untuk penyebaran setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika UDTF ada dalam pernyataan SQL untuk penyebaran sebelum dan sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
-- Pernyataan SQL asli: select a, sum(b), length(c), window_start,window_end from ( select a, b, c, window_start,window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a,c, window_start,window_end; -- Tambahkan UDTF. select a, sum(b), length(c), window_start, window_end, c1, c2 from (select a, b, c, window_start, window_end, c1, c2 from table (tumble(table MyTable, descriptor(ts), interval '1' minute)), LATERAL TABLE(split(c)) as T(c1, c2)) group by a,c, window_start, window_end, c1, c2;
Fungsi agregat yang didefinisikan pengguna Python (UDAF) digunakan.
Jika Python UDAF ditambahkan ke dalam pernyataan SQL untuk penyebaran setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika Python UDAF dihapus dari pernyataan SQL untuk penyebaran setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika Python UDAF ada dalam pernyataan SQL untuk penyebaran sebelum dan sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
-- Pernyataan SQL asli: select a, sum(b), max(c), window_start from (select a, b, c, window_start from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start; -- Tambahkan Python UDAF. select a, sum(b), c, window_start from (select a, b, weighted_avg(c) as c, window_start from table (tumble(table MyTable, descriptor(ts), interval '1' minute)) GROUP by a,b,window_start) group by a,c, window_start;
Lakukan agregasi pada bidang window_start, window_end, dan window_time menggunakan fungsi agregat.
Jika agregasi ditambahkan dalam pernyataan SQL untuk penyebaran setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika agregasi dihapus dari pernyataan SQL untuk penyebaran setelah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
Jika agregasi ada dalam pernyataan SQL untuk penyebaran sebelum dan sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.
-- Pernyataan SQL asli: select a, sum(b), max(c), window_start, window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by a, window_start, window_end; - Tambahkan fungsi agregat untuk perhitungan data. select a, sum(b), max(c), MAX(window_start) as ag, window_end from (select a, b, c, window_start, window_end from table (tumble(table MyTable, descriptor(ts), interval '1' minute))) group by (a, window_start, window_end);
GROUPING SETS, CUBE, atau ROLLUP digunakan dalam klausa GROUP BY. Dalam hal ini, data dikelompokkan secara terpisah oleh bidang window_start dan window_end.
Jika GROUPING SETS, CUBE, atau ROLLUP digunakan dalam klausa GROUP BY dari penyebaran sebelum dan sesudah modifikasi, kompatibilitas antara penyebaran dan data status tidak diketahui.