2016-10-25 1 views
1

Ich benutze Python und möchte in BigQuery in eine Tabelle schreiben. Das Schema der Tabelle wie folgt aussieht:Wie man Daten zu einer Spalte vom Typ RECORD mit Python in bigquery hinzufügt

test  RECORD REPEATED  
test.foo STRING NULLABLE  
test.bar STRING NULLABLE  

ich wie einen Befehl ausführen möchten:

table = dataset.table(name='test_table') 
table.insert_data(rows_to_insert) 

Was die Eingabe tut rows_to_insert aussehen. Ich erhalte immer wieder den Fehler: Wiederholter Wert außerhalb eines Arrays.

Antwort

2

Ihr Schema Angenommen wurde wie folgt definiert:

full_name = SchemaField('full_name', 'STRING', mode='REQUIRED') 
area_code = SchemaField('area_code', 'STRING', 'REQUIRED') 
local_number = SchemaField('local_number', 'STRING', 'REQUIRED') 
rank = SchemaField('rank', 'INTEGER', 'REQUIRED') 
phone = SchemaField('phone', 'RECORD', mode='NULLABLE', 
        fields=[area_code, local_number, rank]) 

dann Ihre Daten aussehen würde einzufügen:

rows_to_insert = [ 
     ('Phred Phlyntstone', {'area_code': '800', 
           'local_number': '555-1212', 
           'rank': 1}), 
     ('Bharney Rhubble', {'area_code': '877', 
          'local_number': '768-5309', 
          'rank': 2}), 
     ('Wylma Phlyntstone', None), 
    ] 
+0

Kopieren Sie Ihr Beispiel ich bekomme invalid_argument: Fehlende erforderliche Feld: full_name. – cgustad

+0

Sorry, ich hatte Probleme beim Laden des Schemas, das habe ich jetzt behoben und erhalte folgende Fehlermeldung: Datensatzblatttypen werden nicht unterstützt – cgustad

0

ich die Repeated value added outside of an array heute bekam und konnte nicht verstehen, warum, scheine ich zu haben befolgte die Beispiele ziemlich genau. Es stellte sich heraus, dass es für ein paar begrenzte Fälle funktionieren würde, und etwas mit der Reihenfolge der Tasten zu tun zu haben scheint ...

Es ist ein bisschen komisch und nach dem Stoßen für eine Weile habe ich herausgefunden, dass Top-Level-Attribut json musste eingestellt werden, so was funktioniert, ist dies:

table.insert_data([{"json": row} for row in data]) 

und data im Grunde eine Liste von einem oder mehreren dicts ist.

+0

Nachdem ich das gesagt habe, habe ich jetzt erkannt, dass ich falsch lag. Ich werde aktualisieren, sobald ich eine funktionierende Lösung habe. – errordeveloper

Verwandte Themen