Große Abfrage - Konvertiert eine int-Spalte in float

Oct 21 2020

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

1 MFR Oct 21 2020 at 10:13

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)
2 MikhailBerlyant Oct 21 2020 at 15:30

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:

  1. anwenden ALTER TABLE ADD COLUMN neue Spalte der benötigten Datentyp hinzufügen

  2. Wenden Sie UPDATE für neue Spalte an

    UPDATE-Tabelle SET new_column = CAST (old_column als float64) WHERE true

1 DanielZagales Oct 21 2020 at 14:04

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:

  1. Erstellen Sie eine Ansicht, um oben zu sitzen und die Datentypkonvertierung durchzuführen
  2. Erstellen Sie eine neue Spalte, setzen Sie den Datentyp auf float64 und fügen Sie Werte ein
  3. Ü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.

1 DiegoQueiroz Oct 21 2020 at 13:00

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.

1 SoumendraMishra Oct 21 2020 at 14:56

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 umstrukturiert temp.