Big Query - Convertir une colonne int en float
Je souhaite convertir une colonne appelée lauderde inten floatdans Big Query. Ma table s'appelle historical. J'ai pu utiliser cette requête SQL
SELECT *, CAST(lauder as float64) as temp
FROM sandbox.dailydev.historical
La requête fonctionne mais les modifications ne sont pas enregistrées dans la table. Que devrais-je faire?
Réponses
Voulez-vous les enregistrer dans une table temporaire pour les utiliser plus tard?
Vous pouvez l'enregistrer dans une table temporaire comme ci-dessous, puis vous référer à "temp"
with temp as
( SELECT *, CAST(lauder as float64)
FROM sandbox.dailydev.historical)
Si vous utilisez, SELECT *vous numériserez toute la table et vous en coûtera donc. Si la table est petite, cela ne devrait pas être un problème, mais si elle est suffisamment grande pour être préoccupée par le coût - voici une autre approche:
appliquer ALTER TABLE ADD COLUMN pour ajouter une nouvelle colonne du type de données requis
appliquer UPDATE pour la nouvelle colonne
UPDATE table SET new_column = CAST (old_column as float64) WHERE true
Vous ne pouvez pas modifier le type de données d'une colonne dans une table https://cloud.google.com/bigquery/docs/manually-changing-schemas#changing_a_columns_data_type
Ce que vous pouvez faire est soit:
- Créez une vue pour vous asseoir au sommet et gérer la conversion du type de données
- Créez une nouvelle colonne et définissez le type de données sur float64 et insérez-y des valeurs
- Écraser le tableau
Les options 2 et 3 sont bien décrites, y compris les avantages et les inconvénients dans le lien que j'ai partagé ci-dessus.
Votre déclaration est correcte. Mais les colonnes de tables dans Big Query sont immuables. Vous devez exécuter votre requête et enregistrer les résultats dans une nouvelle table avec la colonne modifiée.
Cliquez sur "Plus"> "Paramètres de requête", et dans "Destination" sélectionnez "Définir une table de destination pour les résultats de la requête" et remplissez le nom de la table. Vous pouvez même choisir si vous souhaitez remplacer la table existante par une table générée.
Une fois ces paramètres définis, «Exécutez» simplement votre requête comme d'habitude.
Vous pouvez utiliser CREATE ou REPLACE TABLE pour écrire les modifications structurelles avec les données dans la même table:
CREATE OR REPLACE TABLE sandbox.dailydev.historical
AS SELECT *, CAST(lauder as float64) as temp FROM sandbox.dailydev.historical;
Dans cet exemple, la
historicaltable sera restructurée avec une colonne supplémentairetemp.