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