2016-07-20 16 views
4

Ich versuche, eine BigQuery-Tabelle in ein neues Schema zu verschieben, das einige zusätzliche neue NULLABLE Felder aufweist und in dem ein Feld f ERFORDERLICH geworden ist (sie waren NULLABLE in dem alten Schema).Port-Feld von NULLABLE zu ERFORDERLICH in BigQuery

ich habe versucht, die Tabelle mit dem neuen Schema durch den

bq update <table> <new_schema>

Befehl zu aktualisieren und ich erhalte die Fehler

BigQuery error in update operation: Provided Schema does not match Table

Als zweiter Versuch, habe ich eine temporäre leere Tabelle mit dem neuen Feld und dann versucht es, die Daten aus einer Abfrage kommenden anhängen (SELECT * aus der alten Tabelle), aber ich habe den Fehler:

Invalid schema update. Field f has changed mode from REQUIRED to NULLABLE

Gibt es eine Möglichkeit, diese Migration einfach durchzuführen? Natürlich bin ich damit einverstanden, Zeilen der Tabelle zu ignorieren, wo das Feld f eigentlich NULL ist. Es wäre cool, wenn BigQuery das aus der Abfrage ableiten könnte. Ich habe versucht,

SELECT * FROM old_table WHERE f IS NOT NULL

und fügen Sie das Ergebnis an den Tisch mit dem neuen Schema zu tun, aber das funktioniert nicht.

+0

Wenn Sie die Ergebnisse einer Abfrage an eine Tabelle anhängen, erfordert BigQuery, dass das Schema der Abfrage mit der Tabelle kompatibel ist. REQUIRED to NULLABLE ist nicht kompatibel und "WHERE f IS NOT NULL" ändert das Schema der Abfrage nicht. Entschuldigung, ich konnte mir keine Lösung für dieses Problem vorstellen. –

+0

@HuaZhang Danke für Ihren Kommentar. Wenn Sie darüber nachdenken, ist es sinnvoll, dass eine Klausel in der Abfrage das Schema der Abfrage nicht ändert. In der Tat kann ich mir Fälle vorstellen, in denen es schwierig wäre, das Schema nur aus den Klauseln der Abfrage abzuleiten. Ich denke, die Lösung, die mir geblieben ist, besteht darin, ein Skript zu schreiben, das Zeilen aus der Abfrage liest und sie in der Tabelle mit dem neuen Schema ablegt. –

Antwort

0

Verwenden Sie den zweiten Ansatz - erstellen Sie eine neue Tabelle und fügen Sie dort Daten an. Aber verwenden Sie StandardSQL dialect. Es wird der Fehler "Geänderter Modus" vermieden. Wenn Sie versuchen, NULL einzufügen, würde die Abfrage natürlich weiterhin fehlschlagen.