【问题标题】:String to date time conversion Bigquery字符串到日期时间转换 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

如果我做错了什么请帮忙

【问题讨论】:

    标签: google-bigquery


    【解决方案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”,这样我就可以针对它运行查询
    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多