Airflow dag中特定任务的执行时间和状态

Airflow dag中特定任务的执行时间和状态,airflow,google-cloud-composer,Airflow,Google Cloud Composer,我想在Dag中提取特定任务的所有执行时间。我更愿意写另一个Dag 我已使用以下Dag提取另一个Dag的状态和执行时间 作为pd进口熊猫 将numpy作为np导入 进口熊猫(gbq) 从google.cloud导入存储作为gcs 从google.cloud导入bigquery dag_id='my_dag' dag_runs=DagRun.find(dag_id=my_dag) #声明空数组 arr=[] arr1=[] 对于dag_管路中的dag_管路: arr.append(dag_run.

我想在Dag中提取特定任务的所有执行时间。我更愿意写另一个Dag

我已使用以下Dag提取另一个Dag的状态和执行时间


作为pd进口熊猫
将numpy作为np导入
进口熊猫(gbq)
从google.cloud导入存储作为gcs
从google.cloud导入bigquery
dag_id='my_dag'
dag_runs=DagRun.find(dag_id=my_dag)
#声明空数组
arr=[]
arr1=[]
对于dag_管路中的dag_管路:
arr.append(dag_run.state)
arr1.append(dag运行执行日期)
dag_info={'time':arr1,'dag_status':arr}
df=pd.数据帧(dag_信息)
##保持失败和成功的dag运行
df_status=df[(df.dag_status==“失败”)|(df.dag_status==“成功”)]
df_status.loc[df_status['dag_status']=='success','flag']=0
df_status.loc[df_status['dag_status']=='failed','flag']=1
###在Bigquery中保存表的代码
一无所获
我也希望这样做,但这次是为了提取“my_dag”的任务信息。我尝试过给定的解决方案,但它返回“无”,尽管我知道任务和dag正在运行

def任务状态检查(**kwargs):
#####测试####
作为pd进口熊猫
导入日期时间
my_date=datetime.datetime(2020,9,28)
my_dag_id='my_dag'
我的任务id='我的任务'
dag_folder=conf.get('core','DAGS_folder')
dagbag=dagbag(dag_文件夹)
检查\u dag=dagbag.dags[我的\u dag\u id]
我的任务=检查任务。获取任务(我的任务id)
对于范围(1500,2)内的n:
时间增量=时间增量(分钟=n)
my_date_1=my_date+time_delta
ti=TaskInstance(我的任务、我的日期)
印刷品(印刷品)
打印(ti.current_state())
我们将非常感谢您的帮助


谢谢

我怀疑模型中存在问题,但不是
task\u status\u check()
函数中包含的自定义代码逻辑。基本上,
TaskInstance()
class提供了多种气流任务管理功能,利用Python工具对整个气流元数据数据库执行查询,从
task\u实例
SQL表中获取记录,查看可能得到的反映这一点的源代码

我已经在非常常见的类似场景中尝试了您的代码,并且遇到了相同的
None
返回状态。回顾初始问题堆栈中提到的用户努力,深入问题,我调整了
get\u task\u instance()
以检查行为,并指向此函数以提取特定任务的状态。只要
get\u task\u instance()
是实验性的,它似乎在调用
TaskInstance()
类来发现任务状态:

def任务检查(**kwargs):
导入日期时间
从日期时间导入时区
从气流导入配置为conf
导入日志记录
从afflow.api.common.experimental.get_task_实例导入get_task_实例
my_date=datetime.datetime('yyyy','mm','dd','hour','min','sec'))
my_date=my_date.replace(tzinfo=timezone.utc)
my_dag_id=“dag_id”
my\u task\u id=“task\u id”
ti=获取任务实例(我的任务id、我的任务id、我的日期)
我已经检查了对Airflow DB的请求是否成功,但是
get\u task\u instance
函数返回相同的
None
状态:

{python_operator.py:114}INFO-Done。返回值为:无

同时,做进一步的研究,考虑到其他提取气流任务状态的方法,他们只是保持了这项工作

  • 气流执行器,调整为在其中一个 作曲工人:

    kubectl -it exec $(kubectl get po -l run=airflow-worker -o jsonpath='{.items[0].metadata.name}' \
        -n $(kubectl get ns| grep composer*| awk '{print $1}')) -n $(kubectl get ns| grep composer*| awk '{print $1}') \
        -c airflow-worker airflow task_state <Dag_ID> <Task_ID> 2020-09-27T23:59:21+00:00
    

    TaskInstance(我的任务,我的日期1)
    返回什么?您是否可以检查循环中某些迭代的此值
    print(ti)
    ?您是否还可以提供Composer图像版本?@Nick\u Kh感谢您的回复。我确实检查了指纹(ti)。这里是一个示例输出,因此print(ti.current_state())之所以为none是有意义的,因为它是[none]。我想知道是否有可能获得任务信息而不提及时间,就像我为Dag做的那样。作曲家版本为“composer-1.7.3-airflow-1.10.2”,感谢您对本期的深入研究。我将尝试你提到的其他有效方法。我完全不知道在GCP Composer上哪里可以执行SQL查询。我将感谢你的意见。谢谢,我相信我已经在回答中解释了连接MySQL Ailrflow元数据模式的过程,希望它能帮助您克服这个问题。如果你发现我的答案很容易给问题提供更多的细节,那么就考虑它,帮助其他贡献者进行研究。我会调查的。由于我仍然无法提出解决方案,因此我投票支持你的努力。再次感谢