2017-08-11 4 views
3

Nouveau dans le flux d'air. Essayer d'exécuter le sql et stocker le résultat dans une table BigQuery.AssertionError: INTERNAL: Aucun projet par défaut n'est spécifié

Obtention d'une erreur de suivi. Vous ne savez pas où installer default_rpoject_id.

S'il vous plaît aidez-moi.

Erreur:

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 

code:

sql_bigquery = BigQueryOperator(
     task_id='sql_bigquery', 
     use_legacy_sql=False, 
     write_disposition='WRITE_TRUNCATE', 
     allow_large_results=True, 
     bql=''' 
      #standardSQL 
       SELECT ID, Name, Group, Mark, RATIO_TO_REPORT(Mark) OVER(PARTITION BY Group) AS percent FROM `tensile-site-168620.temp.marks` 
       ''', 
     destination_dataset_table='temp.percentage', 
     dag=dag 
     ) 

Répondre

2

EDIT: Je fixe enfin ce problème en ajoutant simplement le paramètre bigquery_conn_id='bigquery' dans la tâche BigQueryOperator, après l'exécution du code ci-dessous dans un script python séparé .

Apparemment, vous devez spécifier votre ID de projet dans Admin -> Connexion dans l'interface utilisateur Airflow. Vous devez le faire en tant qu'objet JSON tel que "project": "".

Personnellement, je n'arrive pas à faire fonctionner le serveur Web sur GCP, donc c'est irréalisable. Il ya une solution programmatique ici:

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() 

Mais je ne sais pas où mettre cela. Ces suggestions proviennent de a similar question here.

+1

Vous pouvez également créer des connexions via l'interface de ligne de commande, ce qui permet de les automatiser: http://airflow.readthedocs.io/fr/v1-9-stable/cli.html#connections –