2017-10-02 2 views
0

Je viens de commencer mon POC dans Big Query. Je voudrais savoir comment mettre à jour/modifier la définition de colonne/schéma dans une table existante.Comment mettre à jour le type de données dans la grande table de requête?

bq mk -t market.cust custid: entier, grp: entier, Odate: string bq update -t ​​market.cust custid: string, grp: entier, Odate: string

**Error: 
[email protected]:~/data$ bq update -t market.cust custid:string,grp:integer,odate:string 
BigQuery error in update operation: Provided Schema does not match Table arboreal-height-175822:market.cust. Field custid has changed type from INTEGER to STRING** 

Tableau Schema :

Dernière modification du schéma total des lignes Nombre total d'octets expiration Temps Cloisonnement Labels


02 oct 13:38:29 | - custid: integer 0 0 | - grp: entier | - Odate: string

+0

Vous avez un faible taux. Important sur SO - vous pouvez «voter sur la réponse». Votez pour les réponses utiles. ... Vous pouvez vérifier ce qu'il faut faire quand quelqu'un répond à votre question - http://stackoverflow.com/help/someone-answers. En suivant ces règles simples, vous augmentez votre propre score de réputation et en même temps vous nous gardez motivés pour répondre à vos questions: o) considérez svp! –

Répondre

0

en utilisant SELECT peuvent engager des co $ t que vous devrez scanner toute la table

Bel OW est super approche simple qui coûte 0,00 $

  1. Exportez votre table existante dans GCS
  2. charge de GCS à la nouvelle table avec la même schéma que votre table d'origine à l'exception de cette colonne pour être de type fixe
  3. Vous terminé. $ 0 coût !!

Je viens de faire cela pour la santé mentale vérification et il fonctionne comme un charme

quand vous obtiendrez à l'aise avec cette approche - vous pouvez même charger dans la même table - avec WRITE_TRUNCATE pour les biens writeDisposition

+0

C'est une façon de faire.Mais https://cloud.google.com/bigquery/docs/tables#append-overwrite dit Émettez la commande de mise à jour bq et fournissez la définition du schéma: bq update [DATASET]. [TABLE] [ SCHÉMA]. Je me demande pourquoi ça ne marche pas. – user3858193

+0

Vous pouvez mettre à jour le schéma d'une table existante en y ajoutant de nouveaux champs. Les nouveaux champs doivent être NULLABLE ou REPEATED. Vous ne pouvez pas ajouter un champ REQUIRED à un schéma de table existant. - Donc, quand la documentation dit à propos de la mise à jour du schéma, cela ressemble à l'ajout de nouveaux champs. - https://cloud.google.com/bigquery/docs/tables#update-schema –

+0

Rappel. Votez pour des réponses utiles! Vous pouvez vérifier ce qu'il faut faire lorsque quelqu'un répond à votre question - http://stackoverflow.com/help/someone-answers. En suivant ces règles simples vous augmentez votre propre score de réputation et en même temps vous nous gardez motivés pour répondre à vos questions: o) considérez s'il vous plaît –

0

Exécuter une requête qui remplace la table existante avec les résultats d'une requête qui jette les données que vous souhaitez:

#standardSQL 
SELECT a, b, c, CAST(d as INT64) AS d 
FROM `p.t.d` 

mise à jour, sur la base commentaire - Si je veux changer un entier en chaîne:

#standardSQL 
SELECT a, b, c, CAST(d as STRING) AS d 
FROM `p.t.d` 
+0

Je voudrais mettre à jour la structure de la table. Ma colonne est entière mais je veux la changer en chaîne. En SQL normal, nous écrivons la table alter .. – user3858193

+0

J'ai ajouté un exemple sur la façon de changer un entier en une chaîne dans BigQuery. Il suffit d'écraser votre table avec les résultats de cette requête. –

+0

Voir market.cust custid: integer. Je ne peux pas insérer de valeur de chaîne dans l'identificateur de client (la valeur est CU101). Donc je dois changer la structure de la table. SQL traditionnel: ALTER TABLE nom_table. ALTER COLUMN nom_colonne type_données; Big Query: bq mise à jour -t market.cust custid: chaîne, grp: entier, odate: chaîne .. C'est l'erreur de lancement – user3858193