Big Query: converte una colonna int in float
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
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)
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:
applica ALTER TABLE ADD COLUMN per aggiungere una nuova colonna del tipo di dati necessario
applica UPDATE per la nuova colonna
UPDATE table SET new_column = CAST (old_column as float64) WHERE true
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 è:
- Crea una vista per sederti in cima e gestire la conversione del tipo di dati
- Crea una nuova colonna e imposta il tipo di dati su float64 e inserisci i valori al suo interno
- Sovrascrivi la tabella
Le opzioni 2 e 3 sono delineate bene, inclusi pro e contro nel link che ho condiviso sopra.
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.
È 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 aggiuntivatemp.