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;