Airflow 气流宏能否与CloudSqlInstanceExportOperator一起使用?

Airflow 气流宏能否与CloudSqlInstanceExportOperator一起使用?,airflow,Airflow,我们正在使用Airflow来计划使用的每日数据库导出。这似乎不适用于气流宏。我们正在尝试使用执行日期宏或where子句中的{ds}导出1天的数据。使用宏很重要,因为我们希望回填DAG 示例代码由两部分组成。首先,我们定义: 接下来,将导出上下文传递给任务: cloudsql_export_task = CloudSqlInstanceExportOperator( project_id=PROJECT_ID, body = export_b

我们正在使用Airflow来计划使用的每日数据库导出。这似乎不适用于气流宏。我们正在尝试使用执行日期宏或where子句中的{ds}导出1天的数据。使用宏很重要,因为我们希望回填DAG

示例代码由两部分组成。首先,我们定义:

接下来,将导出上下文传递给任务:

    cloudsql_export_task = CloudSqlInstanceExportOperator(
            project_id=PROJECT_ID,
            body = export_body,
            instance='instance',
            task_id='cloudsql_export_task',
            dag=dag)
任务运行并被标记为成功,但是,创建的Google云存储文件中没有数据。当我们硬编码日期时,查询按预期工作。因此,我们知道问题是由未填充宏值引起的


如有任何建议,将不胜感激。如何修复此任务或实现相同目标的替代方法注意:查询太大,占用太多内存,mysqltologlecloudstorageoperator无法工作

请确保operator在template_字段中包含body

您还可以将Jinja模板用于嵌套字段,只要 嵌套字段在其所属的结构中标记为模板: 在template_fields属性中注册的字段将提交给 模板替换

有关模板的详细信息:

您可以像下面这样扩展操作符

class CloudSqlInstanceExportTemplatedOperator(CloudSqlInstanceExportOperator):
    template_fields = CloudSqlInstanceExportOperator.template_fields + ('body',)

确保操作员在模板字段中包含正文

您还可以将Jinja模板用于嵌套字段,只要 嵌套字段在其所属的结构中标记为模板: 在template_fields属性中注册的字段将提交给 模板替换

有关模板的详细信息:

您可以像下面这样扩展操作符

class CloudSqlInstanceExportTemplatedOperator(CloudSqlInstanceExportOperator):
    template_fields = CloudSqlInstanceExportOperator.template_fields + ('body',)

尽管您使用的是弃用运算符,但答案是正确的。在更新版本中,不需要建议的修改

CloudSqlInstanceExportOperator已重命名为CloudSQLExportInstanceOperator并移动到提供程序

对于气流=2.0,您需要安装:

您可以将操作员导入为:

from airflow.providers.google.cloud.operators.cloud_sql import CloudSQLExportInstanceOperator

由于运算符已在中列出了正文,因此您可以继续使用。

答案是正确的,但您使用的是弃用运算符。在更新版本中,不需要建议的修改

CloudSqlInstanceExportOperator已重命名为CloudSQLExportInstanceOperator并移动到提供程序

对于气流=2.0,您需要安装:

您可以将操作员导入为:

from airflow.providers.google.cloud.operators.cloud_sql import CloudSQLExportInstanceOperator

由于操作员的身体已经在列表中列出,您可以走了。

谢谢。我是否添加该代码以将运算符扩展到DAG文件中?回答上述问题:是。但是您还需要更新任务以使用下一个扩展运算符。谢谢。我是否添加该代码以将运算符扩展到DAG文件中?回答上述问题:是。但您还需要更新任务以使用下一个扩展运算符。此解决方案看起来最好,但我们得到了错误:ModuleNotFoundError:没有名为“airflow.providers.mysql”的模块。我们使用的是Airflow 1.10.10,并在虚拟环境中安装了apache Airflow backport providers google包。@请注意pypi中与交叉依赖项相关的部分:交叉提供程序包依赖项。因此,您可能还需要添加pip安装apache airflow backport providers google[mysql]取决于您是否安装了所有依赖项或选择了一些手册。此解决方案看起来最好,但我们得到的错误是:ModuleNotFoundError:没有名为“airflow.providers.mysql”的模块。我们使用的是Airflow 1.10.10,并在虚拟环境中安装了apache Airflow backport providers google包。@请注意pypi中与交叉依赖项相关的部分:交叉提供程序包依赖项。因此,如果您安装了所有依赖项或手动选择了一些依赖项,那么您可能还需要添加pip安装apache airflow后端口提供程序google[mysql]。
from airflow.providers.google.cloud.operators.cloud_sql import CloudSQLExportInstanceOperator