Cette rubrique indique si un job reste compatible avec ses données d'état après la modification d'une requête de type Regular Join, Interval Join, Temporal Join ou Lookup Join.
Regular Join
Une Regular Join conserve indéfiniment les deux flux d'entrée dans l'état. L'état de son opérateur ne peut pas être migré entre différentes versions du job.
Modifications incompatibles
Les modifications suivantes rendent le job incompatible avec ses données d'état :
|
Modification |
Effet |
|
Changement du type de jointure |
Incompatible |
|
Changement de la condition de jointure |
Incompatible |
|
Changement du schéma d'entrée |
Incompatible |
Exception compatible
Si vous modifiez des conditions d'égalité ou d'inégalité et que cette modification peut être propagée vers un flux d'entrée pour générer un nœud Calc avec des conditions, ajoutez table.optimizer.state-compatibility.ignore-filter: true à la section Parameters. Le job reste entièrement compatible avec les données d'état.
Interval Join
Une Interval Join limite l'état selon la fenêtre d'intervalle, ce qui permet à Flink de supprimer les anciennes valeurs une fois l'intervalle écoulé. L'état de son opérateur ne peut pas être migré entre différentes versions du job.
Modifications incompatibles
Les modifications suivantes rendent le job incompatible avec ses données d'état :
|
Modification |
Effet |
|
Changement du type de jointure |
Incompatible |
|
Changement de la condition de jointure |
Incompatible |
|
Changement de l'intervalle |
Incompatible |
|
Changement du schéma d'entrée |
Incompatible |
Modifications compatibles
Les modifications suivantes maintiennent la compatibilité totale du job avec ses données d'état :
|
Modification |
Condition |
|
Changement de l'unité de temps |
La valeur finale de l'intervalle doit rester identique. Par exemple, passer de |
|
Changement des conditions d'égalité ou d'inégalité |
La modification doit pouvoir être propagée vers un flux d'entrée pour générer un nœud Calc avec des conditions, et vous devez ajouter |
Temporal Join
Une Temporal Join met en corrélation un flux avec une table versionnée à un instant précis. L'état de son opérateur ne peut pas être migré entre différentes versions du job.
Modifications incompatibles
Les modifications suivantes rendent le job incompatible avec ses données d'état :
|
Modification |
Effet |
|
Changement du type de jointure |
Incompatible |
|
Changement de la condition de jointure |
Incompatible |
|
Changement du schéma d'entrée |
Incompatible |
Lookup Join
Par défaut, une Lookup Join s'exécute comme un opérateur sans état. La modification d'une Lookup Join n'affecte pas la compatibilité d'état de son propre opérateur. Toutefois, si vous changez la sortie d'une Lookup Join, la compatibilité d'état des opérateurs en aval peut être impactée.
Cas où une Lookup Join devient stateful
Une Lookup Join s'exécute comme un opérateur avec état dans l'un des cas suivants :
L'option
table.optimizer.non-deterministic-update.strategy: TRY_RESOLVEest configurée pour le job et le système détecte des mises à jour non déterministes provenant de la Lookup Join.La recherche asynchrone (asynchronous lookup) est configurée pour la Lookup Join.
Lorsqu'une Lookup Join s'exécute comme un opérateur avec état, le système peut ne pas détecter les problèmes de compatibilité et signaler à tort que les modifications sont totalement compatibles. Dans ce cas, le job ne parvient pas à démarrer car les données d'état ne peuvent pas être récupérées.