字符串到日期时间转换 Bigquery

Posted

技术标签:

【中文标题】字符串到日期时间转换 Bigquery【英文标题】:String to date time conversion Bigquery 【发布时间】:2014-04-24 21:36:18 【问题描述】:

我有一个以字符串格式存储日期的源表,如下所示:

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

然后创建一个表test1如下:

mk -t xyz.test birthdate:timestamp

当我编写查询以将源表中的所有日期转换为时间戳并将其保存到 test1 时,它会给出错误:

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

如果我做错了什么请帮忙

【问题讨论】:

【参考方案1】:

没关系。我找到了。我忽略了 bigquery 的查询参考文档的很大一部分。

TIMESTAMP() 将日期字符串转换为 TIMESTAMP 数据类型。

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

返回:2012-10-01 01:02:03 UTC

所以正确的查询如下: SELECT TIMESTAMP(birthdate) AS 生日 FROM [sourcetable] LIMIT 10

【讨论】:

鉴于 TIMESTAMP 只能追溯到 1970 年,您是否遇到了生日问题?您不想改用 DATETIME(可以追溯到 1000 年)吗?【参考方案2】:

您正在运行一个更新表的查询?你在使用 WRITE_TRUNCATE 吗?如果没有,您最终将使用不同的架构追加到表中。

【讨论】:

WRITE_TRUNCATE 与“Owerwrite 表”相同,对吧?如果我这样做,那么它也会覆盖表模式。基本上我想将日期字符串转换为时间戳并将其作为时间戳存储到目标表中 你可以做 `SELECT *, FORMAT_UTC_USEC(birthdate) asbirthdate_str FROM [sourcetable] 我之前尝试过,但它仍然将“birthdate_str”字段保存为目标表中的“STRING”类型。我希望目标表中的“birthdate_str”字段为“TIMESTAMP”,这样我就可以针对它运行查询

以上是关于字符串到日期时间转换 Bigquery的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 将字符串转换为日期时间

BigQuery 将 RFC 1123 日期格式字符串转换为 unixtime

从字符串转换 BigQuery 日期

BigQuery 帮助 - 如何转换并转换为浮点和日期格式

列类型 TIMESTAMP 的 BigQuery 导入转换日期时间偏移量/时区,但列类型 DATETIME 失败并显示“无效的日期时间字符串”

BigQuery 将字符串转换为日期