Python 2.7 AssertionError:INTERNAL:未指定默认项目
新的气流。正在尝试运行sql并将结果存储在BigQuery表中 获取以下错误。不确定在何处设置默认项目id 请帮帮我 错误:Python 2.7 AssertionError:INTERNAL:未指定默认项目,python-2.7,airflow,apache-airflow,Python 2.7,Airflow,Apache Airflow,新的气流。正在尝试运行sql并将结果存储在BigQuery表中 获取以下错误。不确定在何处设置默认项目id 请帮帮我 错误: Traceback (most recent call last): File "/usr/local/bin/airflow", line 28, in <module> args.func(args) File "/usr/local/lib/python2.7/dist-packages/airflow/bin/cli.py", line
Traceback (most recent call last):
File "/usr/local/bin/airflow", line 28, in <module>
args.func(args)
File "/usr/local/lib/python2.7/dist-packages/airflow/bin/cli.py", line 585, in test
ti.run(ignore_task_deps=True, ignore_ti_state=True, test_mode=True)
File "/usr/local/lib/python2.7/dist-packages/airflow/utils/db.py", line 53, in wrapper
result = func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 1374, in run
result = task_copy.execute(context=context)
File "/usr/local/lib/python2.7/dist-packages/airflow/contrib/operators/bigquery_operator.py", line 82, in execute
self.allow_large_results, self.udf_config, self.use_legacy_sql)
File "/usr/local/lib/python2.7/dist-packages/airflow/contrib/hooks/bigquery_hook.py", line 228, in run_query
default_project_id=self.project_id)
File "/usr/local/lib/python2.7/dist-packages/airflow/contrib/hooks/bigquery_hook.py", line 917, in _split_tablename
assert default_project_id is not None, "INTERNAL: No default project is specified"
AssertionError: INTERNAL: No default project is specified
编辑:在一个单独的python脚本中运行下面的代码后,我最终通过在BigQueryOperator任务中添加
bigquery\u conn\u id='bigquery'
参数解决了这个问题
显然,您需要在UI中的Admin->Connection中指定项目ID。必须以JSON对象(如“project”)的形式执行此操作
就个人而言,我无法让Web服务器在GCP上工作,因此这是不可行的。这里有一个编程解决方案:
from airflow.models import Connection
from airflow.settings import Session
session = Session()
gcp_conn = Connection(
conn_id='bigquery',
conn_type='google_cloud_platform',
extra='{"extra__google_cloud_platform__project":"<YOUR PROJECT HERE>"}')
if not session.query(Connection).filter(
Connection.conn_id == gcp_conn.conn_id).first():
session.add(gcp_conn)
session.commit()
来自afflow.models导入连接
从airflow.settings导入会话
会话=会话()
gcp_conn=连接(
conn_id='bigquery',
conn_type='google_cloud_platform',
额外=“{”额外的谷歌云平台项目“:“}”)
如果不是session.query(连接).filter(
Connection.conn_id==gcp_conn.conn_id).first():
会话添加(gcp\U连接)
session.commit()
这些建议来自我在本地运行气流时也会遇到同样的错误。我的解决方案是将以下连接字符串添加为环境变量:
AIRFLOW_CONN_BIGQUERY_DEFAULT="google-cloud-platform://?extra__google_cloud_platform__project=<YOUR PROJECT HERE>"
AIRFLOW\u CONN\u BIGQUERY\u DEFAULT=“谷歌云平台://?额外的谷歌云平台项目=”
BigQueryOperator使用“bigquery\u默认”连接。未指定时,本地气流使用的连接的内部版本会丢失属性项目id
。如您所见,上面的连接字符串提供了project\u id
属性
启动时,Airflow将以“Airflow”开头的环境变量加载到内存中。此机制可用于覆盖气流特性,并在本地运行时提供连接,如气流文档中所述。注意:在不启动web服务器的情况下直接运行airflow时,此功能也有效
因此,我为我的所有连接设置了环境变量,例如aiffort\u CONN\u MYSQL\u DEFAULT
。我已经将它们放在一个.ENV文件中,该文件源于我的IDE,但是将它们放在你的.bash_配置文件中也可以
当您查看Cloud Composer上的airflow实例时,您会看到“bigquery\u default”连接中的具有project\u id
属性集。这就是为什么BigQueryOperator在运行CloudComposer时工作
(我使用的是airflow 1.10.2和BigQuery 1.10.2)您还可以通过CLI创建连接,从而实现连接自动化:
AIRFLOW_CONN_BIGQUERY_DEFAULT="google-cloud-platform://?extra__google_cloud_platform__project=<YOUR PROJECT HERE>"