CCC*_*CCC 4 google-cloud-storage google-bigquery google-cloud-dataflow
我正在从GCS的CSV文件到BQ进行一些ETL,除日期外,其他一切都正常。我表中的字段名称为TEST_TIME,类型为DATE,因此在TableRow中,我尝试传递java.util.Date,com.google.api.client.util.DateTime,String,带数字的Long值。秒钟,但没有一个起作用。
我收到如下错误消息:无法将非字符串JSON值转换为DATE类型。栏位:TEST_TIME;值:...
使用DateTime时,出现以下错误:为非记录字段TEST_TIME指定了JSON对象。
//tableRow.set("TEST_TIME", date);
//tableRow.set("TEST_TIME", new DateTime(date));
//tableRow.set("TEST_TIME", date.getTime()/1000);
//tableRow.set("TEST_TIME", dateFormatter.format(date)); //e.g. 05/06/2016
Run Code Online (Sandbox Code Playgroud)
我认为您应该以String
格式传递YYYY-MM-DD
,这与您直接将REST API与JSON一起使用时类似。尝试这个:
tableRow.set("TEST_TIME", "2017-04-06");
Run Code Online (Sandbox Code Playgroud)
如果可行,则可以将实际的日期转换为该格式,并且它也应该有效。
在使用谷歌云数据流时,我使用了谷歌的时间戳包装器 - com.google.api.client.util.DateTime
。
在将行插入大查询表时,这对我有用。所以,而不是
tableRow.set("TEST_TIME" , "2017-04-07");
Run Code Online (Sandbox Code Playgroud)
我会推荐
tableRow.set("TEST_TIME" , new DateTime(new Date()));
Run Code Online (Sandbox Code Playgroud)
我发现这比将时间戳作为字符串传递要干净得多。
归档时间: |
|
查看次数: |
1587 次 |
最近记录: |