全部产品
Search
文档中心

Realtime Compute for Apache Flink:Top-N

更新时间:Jul 02, 2025

Topik ini menjelaskan kompatibilitas antara pekerjaan dan data status yang digunakan untuk memulai pekerjaan setelah Anda memodifikasi kueri Top-N untuk pekerjaan tersebut.

Modifikasi yang kompatibel

  • Sepenuhnya kompatibel: Modifikasi urutan kunci partisi.

    -- Pernyataan SQL asli:
    select a, b, c from (
      select *,
       row_number() over (partition by a, b order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Sepenuhnya kompatibel: Modifikasi urutan kunci partisi. 
    select a, b, c from (
      select *,
       row_number() over (partition by b, a order by c) as rk
       from MyTable)
    where rk < 3;
  • Sepenuhnya kompatibel: Menambah atau menghapus bidang yang menentukan posisi peringkat dari hasil kueri.

    -- Pernyataan SQL asli: 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Sepenuhnya kompatibel: Sertakan bidang rk dalam hasil kueri. 
    select a, b, c, rk from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;

Modifikasi yang tidak kompatibel

  • Gunakan algoritma UpdateFastRank untuk peringkat dan ubah kunci upsert upstream.

  • Menambah, menghapus, atau memodifikasi kunci partisi atau logika komputasi bidang yang termasuk dalam kunci partisi.

    -- Pernyataan SQL asli: 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Tambah d sebagai kunci partisi. 
    select a, b, c from (
      select *,
       row_number() over (partition by a, d order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Hapus a dari kunci partisi. 
    select a, b, c from (
      select *,
       row_number() over (order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Ubah kunci partisi dari a menjadi a + 1. 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from (select a + 1 as a, b, c from MyTable))
    where rk < 3;
  • Memodifikasi bidang atau urutan yang ditentukan dalam klausa ORDER BY.

    -- Pernyataan SQL asli: 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Ubah bidang yang digunakan untuk pengurutan dari c menjadi b. 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by b) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Ubah bidang yang digunakan untuk pengurutan dari c menjadi substring(c, 1, 5). 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from (select a, b, substring(c, 1, 5) as c from MyTable))
    where rk < 3;
    
    -- Tidak kompatibel: Ubah urutan pengurutan dari naik menjadi turun. 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c desc) as rk
       from MyTable)
    where rk < 3;
  • Memodifikasi nilai N. Dalam kueri Top-N, N menentukan jumlah hasil peringkat teratas yang akan dikembalikan.

    -- Pernyataan SQL asli: 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Ubah nilai N dari 3 menjadi 5. 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 5;
  • Menambah, menghapus, atau memodifikasi bidang terpilih untuk kueri Top-N.

    -- Pernyataan SQL asli: 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Tambah d ke bidang terpilih. 
    select a, b, c, d from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Hapus b dari bidang terpilih. 
    select a, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from MyTable)
    where rk < 3;
    
    -- Tidak kompatibel: Ubah bidang terpilih dari b menjadi b + 1. 
    select a, b, c from (
      select *,
       row_number() over (partition by a order by c) as rk
       from (select a, b + 1 as b, c from MyTable))
    where rk < 3;