2014-04-24 5 views
5

J'ai une table source qui a des dates stockées sous forme de chaîne comme ci-dessous:chaîne à la conversion de date heure BigQuery

1984-10-28 00:00:00 
1988-11-22 00:00:00 
1990-01-08 00:00:00 
1983-06-22 00:00:00 

a ensuite créé un test1 de table comme ci-dessous:

mk -t xyz.test birthdate:timestamp 

Quand j'écris un interroger pour convertir toutes les dates de la table source timestamp et enregistrez-le test1 donne une erreur:

SELECT FORMAT_UTC_USEC(birthdate) AS birthdate FROM [sourcetable] LIMIT 10 

Error: Invalid schema update. Field birthdate has changed type 
Job ID: [Project]:job_5P4gFVl4wiYuyXL0vY5VZNtCZOU 

S'il vous plaît aide si je fais quelque chose de mal

Répondre

0

Vous lancez une requête qui met à jour une table en place? Utilisez-vous WRITE_TRUNCATE? Si ce n'est pas le cas, vous finirez par vous ajouter à la table avec un schéma différent.

+0

WRITE_TRUNCATE est le même que " Owerwrite table ", n'est-ce pas? Si je fais cela, cela écrase le schéma de la table. Fondamentalement je veux convertir la chaîne de date en timestamp et la stocker à la table de destination comme timestamp – user3513161

+0

que vous pourriez faire 'SELECT *, FORMAT_UTC_USEC (birthdate) comme birthdate_str FROM [source] –

+0

Je l'ai essayé plus tôt mais il sauve encore le champ" birthdate_str "en tant que" STRING "tapez dans la table de destination. Je voulais que le champ "birthdate_str" dans la table de destination soit "TIMESTAMP" pour que je puisse lancer les quries contre cela – user3513161

9

Peu importe. Je l'ai trouvé. Je négligeais une grande partie du document de référence de requête de bigquery.

TIMESTAMP()
Convertit une chaîne de date en un type de données TIMESTAMP.

SELECT TIMESTAMP ("2012-10-01 01:02:03");

Retours: 2012-10-01 01:02:03 UTC

Ainsi, la requête correcte comme ci-dessous: SELECT TIMESTAMP (date de naissance) AS DE date de naissance [sourcetable] LIMITE 10

+0

Avez-vous des problèmes avec la date de naissance étant donné que TIMESTAMP ne date que de 1970? Ne voudriez-vous pas utiliser DATETIME à la place (qui remonte à l'année 1000)? – Praxiteles