2017-11-06 2 views
1

Ich versuche, eine Abfrage mit Google BigQuery Python API zu schreiben. Ich setze die Projekt-ID und den Datensatznamen als Parameter. Ich habe die Implementierung der parametrisierten Abfragen unter Google Github.io untersucht. Aber wenn die Abfrage ausgeführt wird bekomme ich folgende FehlerFehler bei der parametrisierten Abfrage in Google BigQuery

google.api_core.exceptions.BadRequest: 400 Invalid table name: @project:@dataset.AIRPORTS 

Ich bin verwirrt, ob wir das Projekt ersetzen können, Dataset-Namen mit den Parametern.

Unten ist mein Code

from google.cloud import bigquery 

client = bigquery.Client.from_service_account_json('service_account.json') 
project = client.project 

datasets = list(client.list_datasets()) 
dataset = datasets[0] 
dataset_id = dataset.dataset_id 

QUERY = (
     'SELECT * ' 
     'FROM `{}.{}.AIRPORTS`'.format(project, dataset_id) 
    ) 

query = (
     'SELECT * ' 
     'FROM `@[email protected]`' 
    ) 

TIMEOUT = 30 
param1 = bigquery.ScalarQueryParameter('project', 'STRING', project) 
param2 = bigquery.ScalarQueryParameter('dataset', 'STRING', dataset_id) 
job_config = bigquery.QueryJobConfig() 
job_config.query_parameters = [param1, param2] 

query_job = client.query(
    query, job_config=job_config) 

iterator = query_job.result(timeout=TIMEOUT) 
rows = list(iterator) 

print(rows) 

Antwort

1

Sie nur Parameter anstelle von Ausdrücken, wie column_name = @param_value in einer WHERE-Klausel verwenden können. Ein Tabellenname ist kein Ausdruck, daher können Sie keine Parameter anstelle der Projekt- oder Datasetnamen verwenden. Beachten Sie auch, dass Sie Standard-SQL verwenden müssen, um Parameter zu verwenden.

Verwandte Themen