将时间戳转换为不同的格式

时间:2015-11-16 18:02:06

标签: timestamp google-bigquery

我有一个很大的CSV文件并且包含错​​误的时间戳格式(8/1/2014 0:03:00)并且想要导入到BigQuery中。如何将其转换为不同的格式(2014-08-19 07:41:35.220)??

过程中的错误

File: 0 / Line:1 / Field:1, Could not parse '8/1/2014 0:03:00' as a timestamp. Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]]

4 个答案:

答案 0 :(得分:1)

使用UDF转换为时间戳,或使用regexp将其转换为BigQuery的预期字符串格式,然后再转换为时间戳。

答案 1 :(得分:1)

以下是使用参考时间戳的示例。我遇到了类似的问题,并想出了类似的东西。

SELECT
    CONCAT(year,"-",month,"-",day," ",clock) as bq_formatted_date,
FROM
    (
    SELECT
        IF(LENGTH(REGEXP_EXTRACT(date_orig, r'([^\/]+)\/')) = 1, CONCAT("0",REGEXP_EXTRACT(date_orig, r'([^\/]+)\/')), REGEXP_EXTRACT(date_orig, r'([^\/]+)\/')) as month,
        IF(LENGTH(REGEXP_EXTRACT(date_orig, r'.*?\/([^\/]+)\/')) = 1, CONCAT("0",REGEXP_EXTRACT(date_orig, r'.*?\/([^\/]+)\/')),REGEXP_EXTRACT(date_orig, r'.*?\/([^\/]+)\/')) as day,
        REGEXP_EXTRACT(date_orig, r'.*\/([0-9]+)') as year,
        REGEXP_EXTRACT(date_orig, r'([0-9]+:[0-9]+:[0-9]+)') as clock
    FROM (SELECT "8/1/2014 0:03:00" as date_orig)
    )

这会将此作为输出2014-08-01 0:03:00。此正则表达式将填充前导零的单个数字月或日。

答案 2 :(得分:1)

您可以使用PARSE_DATETIME

SELECT PARSE_DATETIME("%m/%d/%Y %H:%M:%S",'8/1/2014 0:03:00')

答案 3 :(得分:0)

或者,由于这是一个CSV文件,您可以使用我们的联合数据源(https://cloud.google.com/bigquery/federated-data-sources)直接查询CSV文件,并在导入数据时进行转换。查询仍然与史蒂夫建议的相同。