BigQueryCreateExternalTableOperator报autodetect参数未找到
问题背景
在Google Cloud Composer平台调用BigQueryCreateExternalTableOperator创建BigQuery外部表时,DAG导入阶段直接抛出autodetect参数不存在的错误。
复现代码如下:
create_external_table = BigQueryCreateExternalTableOperator( task_id="create_external_table", destination_project_dataset_table="<bq_dataset>.<bq_table>", bucket="data_exchange_bucket", autodetect=True, source_objects=["<filename>__part*.csv"], )

已完成的排查操作:
- 查阅Operator官方源码,确认
autodetect是公开文档中标注支持的合法参数 - 尝试调整
autodetect参数的传入位置,问题未解决(关键字参数的传入顺序不影响Python的参数识别逻辑)
问题根因
Cloud Composer环境内置的apache-airflow-providers-google依赖版本过低。autodetect参数是在apache-airflow-providers-google 5.0.0及以上版本中,才正式加入BigQueryCreateExternalTableOperator的显式参数列表,低版本的Operator类构造方法中没有定义该入参,直接传入就会触发参数不存在的报错。查阅的最新版本文档和当前环境实际运行的代码版本不一致,才会出现「文档有参数但环境不认」的现象。
解决方案
二选一即可:
- 升级环境依赖版本
进入Cloud Composer环境的配置页面,在PyPI软件包管理项中,指定安装apache-airflow-providers-google>=5.0.0版本,等待环境更新重启完成后,原有代码不需要修改即可正常运行。 - 低版本兼容写法(无需升级依赖)
不直接传递autodetect参数,通过通用入参table_resource透传外部表配置,兼容低版本provider,修改后的代码如下:
create_external_table = BigQueryCreateExternalTableOperator( task_id="create_external_table", destination_project_dataset_table="<bq_dataset>.<bq_table>", bucket="data_exchange_bucket", source_objects=["<filename>__part*.csv"], table_resource={ "externalDataConfiguration": { "autodetect": True, "sourceFormat": "CSV" } } )
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

