尝试将日期时间值从Dataflow插入BigQuery时出现无效的DateTime错误

时间:2017-10-04 06:51:50

标签: google-bigquery google-cloud-dataflow

我们编写了一个Google数据流代码,可以将值插入到bigquery中  列的类型为DateTime。  逻辑在大多数时候运行良好。  但突然间我们得到了无效的DateTime问题。

Exception: java.lang.RuntimeException: java.io.IOException: Insert failed: [{"errors":[{"debugInfo":"generic::out_of_range: Invalid datetime string \"2017-09-26T21:16\"

目前尚不清楚上述值如何以及为何无效。 我们看到它遵守https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types

中提到的DateTime数据类型

另外还不清楚为什么它只是偶尔抛出这个错误。

我们编写了一个扩展DoFn的自定义转换代码 ProcessElement代码就像这样

 public void processElement(ProcessContext c) throws Exception {

    TableRow tableRow = c.element();
    try {
       // do some processing then 
      tableRow.set("PredictedDate",**LocalDateTime.now().toString()**);
      c.output(tableRow);
    }catch(Exception exc){
        LOG.error("Exception while processing and hence not attempting to write to bigquery");
    }
} 

enter code here

它工作正常但偶尔会在夜间失败(美国中部时区)。 能帮我们找到根本原因吗。

2 个答案:

答案 0 :(得分:4)

DateTime描述的格式表示需要秒字段。

YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDDDDD]]

具体来说,请注意第二个S未包含在方括号中,使其成为可选项。

答案 1 :(得分:0)

就我而言,我正在获取时间戳中的时间并将其转换为字符串:

new Date(event_timestamp_ms).toISOString().slice(0, -1);

由于DATETIME不包含有关时区的信息,因此有助于从UTC格式中删除Z符号。