<p>另一个我经历过第二种情况(“其他任务的状态不是‘null’”),是任务实例发生了变化,特别是操作符类型发生了变化。在</p>
<p>我希望你已经得到了答案/能够继续前进。上个月我有几次被困在这个问题上,所以我想我应该记录下我最终为解决这个问题所做的事情。在</p>
<hr/>
<p>示例:</p>
<ul>
<li>任务实例最初是SubDag运算符的实例</li>
<li>需求导致运算符的类型从SubDag运算符更改为Python运算符</li>
<li>更改之后,Python操作符被设置为statenull</li>
</ul>
<hr/>
<p>我所能拼凑出的结果是:</p>
<ul>
<li>气流正在反省与每个任务相关的操作员</li>
<li>每个任务实例都被记录到数据库表<code>task_instance</code>
<ul>
<li>此表有一个名为<code>operator</code>的属性</li>
</ul></li>
<li>当调度程序重新检查代码时,它将查找具有正确运算符类型的<code>task_instance</code>;如果没有看到,它将更新关联的数据库记录,状态为state='removed'</li>
<li>当DAG随后调度时,气流</li>
</ul>
<p>您可以通过查询查看受此流程影响的任务:</p>
<pre><code>SELECT *
FROM task_instance
WHERE state = 'removed'
</code></pre>
<p>气流1.10的问题似乎已经解决了:</p>
<ul>
<li><a href="https://github.com/apache/airflow/pull/3137/commits/db29af4ffb3d120ad55cd089a44b99feb7b8bf38" rel="nofollow noreferrer">https://github.com/apache/airflow/pull/3137/commits/db29af4ffb3d120ad55cd089a44b99feb7b8bf38</a></li>
</ul>
<p>这就是说,我不能百分之百地肯定,根据提交,我可以发现,它可以解决这个问题。总的哲学似乎仍然是{a2}。在</p>
<p>我不喜欢这种解决方案,因为它使得在基本上是一条管道的迭代变得很困难。我使用的另一种方法是(部分地)遵循<a href="https://www.astronomer.io/guides/airflow-queries/" rel="nofollow noreferrer">recommendations from Astronomer</a>并“吹出”DAG历史。为此,您需要:</p>
<ul>
<li>停止调度程序</li>
<li><a href="https://stackoverflow.com/q/40651783/6591849">Delete the history from the dag</a>
<ul>
<li>这将导致DAG从webui中完全消失</li>
<li>如果它没有完全消失,那么调度程序仍在运行</li>
</ul></li>
<li>重新启动计划程序
<ul>
<li>注意:如果您正在按计划运行DAG,请为它回填/捕获/运行其最新计划做好准备,因为您已经删除了历史记录</li>
<li>如果您不想让它这样做,<a href="https://www.astronomer.io/guides/airflow-queries/" rel="nofollow noreferrer">Astronomer</a>的“快进DAG”建议可以应用</li>
</ul></li>
</ul>