Große Abfrage - Konvertiert eine int-Spalte in float
Ich möchte eine Spalte mit dem Namen laudervon intin floatin Big Query konvertieren . Mein Tisch heißt historical. Ich konnte diese SQL-Abfrage verwenden
SELECT *, CAST(lauder as float64) as temp
FROM sandbox.dailydev.historical
Die Abfrage funktioniert, aber die Änderungen werden nicht in der Tabelle gespeichert. Was soll ich machen?
Antworten
Möchten Sie sie in einer temporären Tabelle speichern, um sie später zu verwenden?
Sie können es in einer temporären Tabelle wie unten speichern und dann auf "temp" verweisen.
with temp as
( SELECT *, CAST(lauder as float64)
FROM sandbox.dailydev.historical)
Wenn Sie verwenden SELECT *, scannen Sie die gesamte Tabelle und damit die Kosten. Wenn der Tisch klein ist, sollte dies kein Problem sein, aber wenn er groß genug ist, um sich Gedanken über die Kosten zu machen, ist unten ein anderer Ansatz:
anwenden ALTER TABLE ADD COLUMN neue Spalte der benötigten Datentyp hinzufügen
Wenden Sie UPDATE für neue Spalte an
UPDATE-Tabelle SET new_column = CAST (old_column als float64) WHERE true
Sie können einen Spaltendatentyp in einer Tabelle nicht ändern https://cloud.google.com/bigquery/docs/manually-changing-schemas#changing_a_columns_data_type
Was Sie tun können, ist entweder:
- Erstellen Sie eine Ansicht, um oben zu sitzen und die Datentypkonvertierung durchzuführen
- Erstellen Sie eine neue Spalte, setzen Sie den Datentyp auf float64 und fügen Sie Werte ein
- Überschreiben Sie die Tabelle
Die Optionen 2 und 3 sind gut beschrieben, einschließlich Vor- und Nachteile in dem Link, den ich oben geteilt habe.
Ihre Aussage ist richtig. Tabellenspalten in Big Query sind jedoch unveränderlich. Sie müssen Ihre Abfrage ausführen und die Ergebnisse in einer neuen Tabelle mit der geänderten Spalte speichern.
Klicken Sie auf "Mehr"> "Abfrageeinstellungen" und wählen Sie unter "Ziel" die Option "Zieltabelle für Abfrageergebnisse festlegen" und geben Sie den Tabellennamen ein. Sie können sogar auswählen, ob Sie die vorhandene Tabelle mit der generierten überschreiben möchten.
Nachdem diese Einstellungen vorgenommen wurden, führen Sie Ihre Abfrage wie gewohnt aus.
Mit CREATE oder REPLACE TABLE können Sie die strukturellen Änderungen zusammen mit den Daten in dieselbe Tabelle schreiben:
CREATE OR REPLACE TABLE sandbox.dailydev.historical
AS SELECT *, CAST(lauder as float64) as temp FROM sandbox.dailydev.historical;
In diesem Beispiel wird die
historicalTabelle mit einer zusätzlichen Spalte umstrukturierttemp.