Ich habe einen wöchentlichen Prozess, der einen vollständigen Ersetzungsvorgang an einigen Tabellen ausführt. Der Prozess erfolgt wöchentlich, da insgesamt große Datenmengen vorliegen. Wir möchten jedoch auch tägliche/stündliche Delta-Aktualisierungen durchführen, damit das System besser mit der Produktion synchronisiert ist.Deduplizieren einer Tabelle, während Datensatzstrukturen beibehalten werden
Wenn wir Daten aktualisieren, erstellen wir Duplikate von Zeilen (Updates einer vorhandenen Zeile), die ich loswerden möchte. Um dies zu erreichen, habe ich einen Python-Skript geschrieben, läuft die folgende Abfrage auf einer Tabelle, die Ergebnisse zurück in sie eingefügt:
QUERY = """#standardSQL
select {fields}
from (
select *
, max(record_insert_time) over (partition by id) as max_record_insert_time
from {client_name}_{environment}.{table} as a
)
where 1=1
and record_insert_time = max_record_insert_time"""
Die {fields}
Variable mit einer Liste aller Tabellenspalten ersetzt werden; Ich kann *
hier nicht verwenden, weil das nur für 1 Lauf funktionieren würde (das nächste wird bereits ein Feld haben, das max_record_insert_time
genannt wird und das ein Mehrdeutigkeits-Problem verursachen würde).
Alles funktioniert wie erwartet, mit einer Ausnahme - einige der Spalten in der Tabelle sind von RECORD
Datentypen; Obwohl sie keine Aliase für sie verwenden und ihren vollständig qualifizierten Namen auswählen (z. B. record_name.child_name
), werden die Ergebnisse bei der Rückkehr der Ausgabe in die Tabelle abgeflacht. Ich habe die flattenResults: False
Konfiguration zu meinem Code hinzugefügt, aber das hat das Ergebnis nicht geändert.
Ich würde gerne Gedanken darüber hören, wie dieses Problem gelöst werden kann, indem ich meinen bestehenden Plan, andere Methoden der Deduplizierung oder andere Methoden zur Handhabung von Delta-Updates insgesamt nutze.
Holy Moly! Ist das eine einzigartige BQ-Funktion? Ich bin noch nie auf diese Syntax gestoßen! Sehen Sie es auch nicht in der Dokumentation. –
Sie können darüber das Thema "Query Syntax" lesen (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-except). –