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>
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.
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. –
@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. –