全部产品
Search
文档中心

Realtime Compute for Apache Flink:Deduplikasi

更新时间:Jun 19, 2025

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

Modifikasi yang kompatibel

  • Sepenuhnya kompatibel: Modifikasi kunci non-partisi dalam bidang terpilih untuk kueri deduplikasi berdasarkan urutan menaik dari bidang proctime.

    -- Pernyataan SQL asli: 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Sepenuhnya kompatibel: Tambahkan d ke bidang terpilih. 
    SELECT a, b, c, d FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Sepenuhnya kompatibel: Hapus b dari bidang terpilih. 
    SELECT a, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Sepenuhnya kompatibel: Ubah bidang terpilih dari c menjadi substring(c, 1, 5). 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk
       FROM (SELECT a, b, SUBSTRING(c,1,5) as c, proctime FROM MyTable))
    WHERE rk = 1;
  • Sepenuhnya kompatibel: Modifikasi urutan kunci partisi.

    -- Pernyataan SQL asli: 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY proctime ASC) as rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Sepenuhnya kompatibel: Modifikasi urutan kunci partisi.
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY c, a, b ORDER BY proctime ASC) as rk
       FROM MyTable)
    WHERE rk = 1;
  • Sepenuhnya kompatibel: Modifikasi bidang tanpa mengubah skema dalam kueri deduplikasi berdasarkan bidang rowtime atau urutan menurun dari bidang proctime.

    -- Pernyataan SQL asli: 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM MyTable)
    WHERE rk = 1 AND c > 10;
    
    -- Sepenuhnya kompatibel: Hapus bidang yang tidak mengubah skema. 
    SELECT a, b FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM MyTable)
    WHERE rk = 1 AND c > 10;

Modifikasi yang tidak kompatibel

  • Tambah, hapus, atau modifikasi kunci partisi, atau modifikasi logika perhitungan bidang yang termasuk dalam kunci partisi.

    -- Pernyataan SQL asli: 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Tambahkan d sebagai kunci partisi. 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a,d ORDER BY proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    
    -- Tidak kompatibel: Hapus a dari kunci partisi. 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (ORDER BY proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Ubah kunci partisi dari a menjadi a + 1. 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (ORDER BY proctime ASC) AS rk
       FROM (SELECT a + 1 AS a, b, c, proctime FROM MyTable))
    WHERE rk = 1;
  • Modifikasi 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 proctime ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Ubah bidang yang digunakan untuk pengurutan dari proctime menjadi ts. 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY ts ASC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Ubah urutan pengurutan dari menaik menjadi menurun. 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM MyTable)
    WHERE rk = 1;
  • Tambah, hapus, atau modifikasi bidang yang mengubah skema dalam kueri deduplikasi berdasarkan bidang rowtime atau urutan menurun dari bidang proctime.

    -- Pernyataan SQL asli: 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Tambahkan d ke bidang terpilih. 
    SELECT a, b, c, d FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Hapus c dari bidang terpilih. 
    SELECT a, b FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM MyTable)
    WHERE rk = 1;
    
    -- Tidak kompatibel: Ubah bidang terpilih dari c menjadi substring(c, 1, 5). 
    SELECT a, b, c FROM (
      SELECT *,
       ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk
       FROM (select a, b, substring(c, 1, 5) as c, ts from MyTable))
    WHERE rk = 1;