Big Query: converte una colonna int in float

Oct 21 2020

Vorrei convertire una colonna chiamata lauderda inta floatin Big Query. Il mio tavolo si chiama historical. Sono stato in grado di utilizzare questa query SQL

 SELECT *, CAST(lauder as float64) as temp 
FROM sandbox.dailydev.historical

La query funziona ma le modifiche non vengono salvate nella tabella. Cosa dovrei fare?

Risposte

1 MFR Oct 21 2020 at 10:13

Vuoi salvarli in una tabella temporanea per usarla in seguito?

Puoi salvarlo in una tabella temporanea come di seguito e quindi fare riferimento a "temp"

with temp as
( SELECT *, CAST(lauder as float64) 
FROM sandbox.dailydev.historical)
2 MikhailBerlyant Oct 21 2020 at 15:30

Se lo usi SELECT *, scansionerai l'intera tabella e quindi sarà il costo. Se la tabella è piccola questo non dovrebbe essere un problema, ma se è abbastanza grande da preoccuparsi dei costi, di seguito è riportato un altro approccio:

  1. applica ALTER TABLE ADD COLUMN per aggiungere una nuova colonna del tipo di dati necessario

  2. applica UPDATE per la nuova colonna

    UPDATE table SET new_column = CAST (old_column as float64) WHERE true

1 DanielZagales Oct 21 2020 at 14:04

Non è possibile modificare il tipo di dati di una colonna in una tabella https://cloud.google.com/bigquery/docs/manually-changing-schemas#changing_a_columns_data_type

Quello che puoi fare è:

  1. Crea una vista per sederti in cima e gestire la conversione del tipo di dati
  2. Crea una nuova colonna e imposta il tipo di dati su float64 e inserisci i valori al suo interno
  3. Sovrascrivi la tabella

Le opzioni 2 e 3 sono delineate bene, inclusi pro e contro nel link che ho condiviso sopra.

1 DiegoQueiroz Oct 21 2020 at 13:00

La tua dichiarazione è corretta. Ma le colonne delle tabelle in Big Query non sono modificabili. È necessario eseguire la query e salvare i risultati in una nuova tabella con la colonna modificata.

Fai clic su "Altro"> "Impostazioni query" e in "Destinazione" seleziona "Imposta una tabella di destinazione per i risultati della query" e inserisci il nome della tabella. Puoi anche selezionare se vuoi sovrascrivere la tabella esistente con quella generata.

Dopo aver impostato queste impostazioni, "Esegui" la query come al solito.

1 SoumendraMishra Oct 21 2020 at 14:56

È possibile utilizzare CREATE o REPLACE TABLE per scrivere le modifiche strutturali insieme ai dati nella stessa tabella:

CREATE OR REPLACE TABLE sandbox.dailydev.historical
AS SELECT *, CAST(lauder as float64) as temp FROM sandbox.dailydev.historical;

In questo esempio, la historicaltabella verrà ristrutturata con una colonna aggiuntiva temp.