2017-04-12 3 views
1

Ich Abfrage BigQuery über google-cloud-python wie folgt:Erste Ergebnisse als JSON von BigQuery mit Google-Cloud-Python

client = bigquery.Client() 

query = """SELECT * FROM `{dataset}.{table}` 
    WHERE [email protected] LIMIT 1""".format(dataset=dataset, 
           table=table) 

param = ScalarQueryParameter('id', 'STRING', id) 
query = client.run_sync_query(query, query_parameters=[param]) 
query.use_legacy_sql = False 
query.timeout_ms = 1000 
query.run() 

assert query.complete 

try: 
    results = query.rows[0] 
except IndexError: 
    results = None 

Dies gibt Daten wie:

[ 
    "Tue, 11 Apr 2017 03:18:52 GMT", 
    "A132", 
    "United Kingdom", 
    [ 
     { 
      "endDate": "2012-12-05", 
      "startDate": "2011-12-27", 
      "statusCode": "Terminated" 
     } 
    ] 
] 

Das wiederholte Feld umgewandelt wurde zu JSON. Aber ich möchte, dass der Rest der Daten auch in JSON konvertiert wird. Ich könnte dies selbst implementieren, indem ich query.schema prüfe, aber es scheint, dass dies in der Bibliothek sein sollte, da es für wiederholte Elemente bereits passiert.

Wie kann ich mithilfe dieser Bibliothek BigQuery-Abfrageergebnisse erhalten, die als JSON formatiert sind? Z.B .:

{ 
    "timestamp": "Tue, 11 Apr 2017 03:18:52 GMT", 
    "id": "A132", 
    "country": "United Kingdom", 
    [ 
     { 
      "endDate": "2012-12-05", 
      "startDate": "2011-12-27", 
      "statusCode": "Terminated" 
     } 
    ] 
} 

Antwort

0

Wie sich herausstellt, ist der Code einfach:

field_names = [f.name for f in query.schema] 

try: 
    raw_results = query.rows[0] 
    zipped_results = zip(field_names, raw_results) 
    results = {x[0]: x[1] for x in zipped_results} 
except IndexError: 
    results = None