Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Top-N

Dernière mise à jour :Aug 09, 2026

Pour modifier une requête Top-N dans un job Flink en cours d'exécution, appliquez les règles suivantes afin de déterminer si votre modification est compatible avec les données d'état existantes et si vous pouvez redémarrer le job sans réinitialiser l'état.

Modification État compatible ?
Réorganiser les clés de partitionnement Oui
Inclure ou exclure le champ de position de classement (rk) Oui
Modifier la clé upsert en amont (lors de l'utilisation d'UpdateFastRank) Non
Ajouter, supprimer ou modifier des clés de partitionnement Non
Modifier la clause ORDER BY Non
Changer la valeur de N Non
Ajouter, supprimer ou modifier les champs sélectionnés Non

Modifications sûres

Les modifications suivantes sont entièrement compatibles avec les données d'état existantes.

Réorganiser les clés de partitionnement

Changer l'ordre des clés PARTITION BY n'affecte pas la compatibilité de l'état.

-- Original
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a, b ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Compatible: reorder partition keys
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY b, a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

Inclure ou exclure le champ de position de classement

Ajouter ou supprimer le champ rk dans la sortie n'affecte pas la compatibilité de l'état.

-- Original
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Compatible: include rk in the output
SELECT a, b, c, rk FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

Modifications incompatibles

Les modifications suivantes sont incompatibles avec les données d'état existantes.

Modifier la clé upsert en amont lors de l'utilisation d'UpdateFastRank

Si le job utilise l'algorithme UpdateFastRank pour le classement, toute modification de la clé upsert en amont rompt la compatibilité de l'état.

Ajouter, supprimer ou modifier des clés de partitionnement

Toute modification de la clause PARTITION BY — y compris l'ajout ou la suppression de clés, ou la modification de la logique de calcul d'un champ de clé — rompt la compatibilité de l'état.

-- Original
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: add d as a partition key
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a, d ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: remove a from partition keys
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: change partition key from a to 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;

Modifier la clause ORDER BY

Changer le champ de tri, sa logique de calcul ou l'ordre de tri rompt la compatibilité de l'état.

-- Original
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: change sort field from c to b
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY b) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: change sort field to an expression
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;

-- Incompatible: change sort order from ascending to descending
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c DESC) AS rk
    FROM MyTable)
WHERE rk < 3;

Changer la valeur de N

N détermine le nombre de résultats les mieux classés renvoyés par la requête. Toute modification de cette valeur rompt la compatibilité de l'état.

-- Original
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: change N from 3 to 5
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 5;

Ajouter, supprimer ou modifier les champs sélectionnés

Toute modification des champs sélectionnés par la requête externe — y compris l'ajout ou la suppression d'un champ, ou la modification de la logique de calcul d'un champ — rompt la compatibilité de l'état.

-- Original
SELECT a, b, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: add d to the selected fields
SELECT a, b, c, d FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: remove b from the selected fields
SELECT a, c FROM (
  SELECT *,
    ROW_NUMBER() OVER (PARTITION BY a ORDER BY c) AS rk
    FROM MyTable)
WHERE rk < 3;

-- Incompatible: change field b to 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;