Lorsque vous modifiez une clause WHERE dans un déploiement en cours d'exécution, l'état interne de l'opérateur WHERE lui-même n'est pas affecté, car il est sans état. En revanche, la compatibilité d'état des opérateurs en aval, tels que les agrégations GROUP BY, est rompue, car ces opérateurs reçoivent un ensemble différent de lignes en entrée. Pour contourner cet impact en aval et permettre à votre déploiement de continuer à s'exécuter à partir de l'état existant, définissez le paramètre table.optimizer.state-compatibility.ignore-filter=true.
Pourquoi les modifications de la clause WHERE affectent l'état des opérateurs en aval
Une clause WHERE filtre les lignes sans accumuler d'état : chaque ligne en sortie dépend d'une seule ligne en entrée. L'opérateur WHERE est donc sans état, ce qui signifie que la modification de sa condition n'affecte pas la restauration de son propre état.
Les opérateurs en aval qui consomment la sortie filtrée, par exemple une agrégation GROUP BY, maintiennent un état. Lorsque la condition WHERE change, ces opérateurs reçoivent un jeu de données différent, rendant leur état existant incompatible avec la nouvelle entrée.
Les exemples SQL suivants illustrent la différence de compatibilité selon la valeur du paramètre table.optimizer.state-compatibility.ignore-filter :
-- Original: no WHERE clause
SELECT a, sum(b), max(c) FROM MyTable GROUP BY a;
-- After adding WHERE, with ignore-filter=false (default):
-- The deployment becomes incompatible with existing state data.
SELECT a, sum(b), max(c) FROM (SELECT * FROM MyTable WHERE a > 10) GROUP BY a;
-- After adding WHERE, with ignore-filter=true:
-- The deployment remains fully compatible with existing state data.
SELECT a, sum(b), max(c) FROM (SELECT * FROM MyTable WHERE a > 10) GROUP BY a;
Ignorer l'impact sur la compatibilité d'état des opérateurs en aval
Si vous devez modifier une condition WHERE, par exemple pour filtrer des données incorrectes, configurez la propriété suivante afin que le système ignore l'impact sur la compatibilité d'état des opérateurs en aval.
Ajoutez la configuration suivante dans le champ Other Configuration de la section Paramètres de l'onglet Configuration du déploiement. Pour plus d'informations, consultez la rubrique Comment configurer les paramètres pour l'exécution du déploiement ?
table.optimizer.state-compatibility.ignore-filter=true
La valeur par défaut du paramètre table.optimizer.state-compatibility.ignore-filter est false.
Lorsque cette propriété est définie sur true, le système ignore l'impact de la modification de la clause WHERE sur la compatibilité des données d'état des opérateurs en aval.