全部产品
Search
文档中心

Realtime Compute for Apache Flink:Window Top-N

更新时间:Jul 02, 2025

Kueri Window Top-N mendukung lebih sedikit modifikasi yang kompatibel karena harus mengikuti aturan modifikasi dari fungsi nilai tabel berbasis jendela (TVF) dan kueri Top-N. Topik ini menjelaskan kompatibilitas antara pekerjaan dan data status yang digunakan untuk memulai pekerjaan setelah Anda memodifikasi kueri Window Top-N untuk pekerjaan tersebut.

Modifikasi yang kompatibel

  • Sepenuhnya kompatibel: Menambah atau menghapus atribut jendela.

    -- Pernyataan SQL asli: 
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, window_start, window_end)
      ) where rk < 3;
    
    
    -- Sepenuhnya kompatibel: Menambahkan bidang window_end dalam hasil kueri.
    select a, b, c, window_start, window_end from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, window_start, window_end)
      ) where rk < 3;
  • Sepenuhnya kompatibel: Memasukkan atau mengecualikan bidang yang menentukan posisi peringkat dalam hasil kueri.

    -- Pernyataan SQL asli: 
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, window_start, window_end)
      ) where rk < 3;
    
    
    -- Sepenuhnya kompatibel: Memasukkan bidang rk dalam hasil kueri.
    select a, b, c, window_start, rk from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, window_start, window_end)
      ) where rk < 3;
  • Sepenuhnya kompatibel: Mengubah urutan kunci partisi.

    -- Pernyataan SQL asli: 
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by a, b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, b, window_start, window_end)
      ) where rk < 3;
    
    -- Sepenuhnya kompatibel: Mengubah urutan kunci partisi.
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, a, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, b, window_start, window_end)
      ) where rk < 3;

Modifikasi yang tidak kompatibel

  • Mengubah atribut terkait jendela, seperti tipe jendela, ukuran jendela, atau atribut waktu.

    Untuk informasi tentang contoh modifikasi, lihat Modifikasi yang menyebabkan ketidaksesuaian penuh.

  • Menambah, menghapus, atau memodifikasi bidang dalam klausa group by atau memodifikasi logika komputasi dari bidang-bidang tersebut.

    Untuk informasi tentang contoh modifikasi, lihat Modifikasi yang menyebabkan ketidaksesuaian penuh.

  • Menambah, menghapus, atau memodifikasi bidang agregat atau mengubah input kueri TOP-N.

    -- Pernyataan SQL asli: 
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, window_start, window_end)
      ) where rk < 3;
    
    -- Tidak kompatibel: Menambahkan min(d) sebagai d, yang merupakan bidang agregat.
    -- Modifikasi ini mengakibatkan perubahan pada input kueri TOP-N.
    select a, b, c, d, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
          min(d) as d,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, window_start, window_end)
      ) where rk < 3;
  • Menambah, menghapus, atau memodifikasi kunci partisi atau memodifikasi logika komputasi dari bidang yang termasuk dalam kunci partisi.

    Untuk informasi tentang contoh modifikasi, lihat Modifikasi yang tidak kompatibel.

  • Memodifikasi bidang atau urutan yang ditentukan untuk klausa order by.

    Untuk informasi tentang contoh modifikasi, lihat Modifikasi yang tidak kompatibel.

  • Memodifikasi nilai N. Dalam kueri Top-N, N menentukan jumlah hasil peringkat teratas yang akan dikembalikan.

    Untuk informasi tentang contoh modifikasi, lihat Modifikasi yang tidak kompatibel.

  • Hanya memodifikasi urutan bidang terkait TVF jendela dalam klausa group by atau hanya memodifikasi urutan bidang lain dalam klausa group by.

    -- Pernyataan SQL asli: 
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, b, window_start, window_end)
      ) where rk < 3;
    
    -- Tidak kompatibel: Hanya memodifikasi urutan bidang terkait TVF jendela dalam klausa group by.
    -- Modifikasi ini mengakibatkan perubahan pada hasil peringkat berbasis jendela.
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by a, b, window_end, window_start)
      ) where rk < 3;
    
    -- Tidak kompatibel: Hanya memodifikasi urutan bidang lain dalam klausa group by.
    select a, b, c, window_start from (
      select *,
          row_number() over (partition by b, window_start, window_end order by c) as rk
      from (
        select a,
          sum(b) as b,
          max(c) as c,
            window_start,
            window_end
        from table (tumble(table MyTable, descriptor(ts), interval '1' minute))
          group by b, a, window_start, window_end)
      ) where rk < 3;