Python 2.7 AssertionError:INTERNAL:未指定默认项目

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

新的气流。正在尝试运行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 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>"