【问题标题】:Load DATE type to Google BigQuery with Dataflow使用 Dataflow 将 DATE 类型加载到 Google BigQuery
【发布时间】:2017-09-07 19:53:15
【问题描述】:

上下文

我对 Google Cloud Platform 还很陌生,我正在尝试 Google Dataflow。我读取了一个 CSV 文件并模拟了流数据。 CSV 行发布到主题 (PubSub) 中,Dataflow 读取它并将数据插入到 BigQuery 表中。

问题

当我的文件包含 STRING、FLOAT、INTEGER 类型时,我的流程已成功完成并且数据已加载到 BigQuery。但是,如果我将以下类型之一添加到我的流程中:DATETIME、TIME、DATE,它总是会失败。有很多代码示例,但我没有找到说明如何处理它的代码示例。

数据示例

2017-01-23 - 将其加载到 DATE 类型中

14:10:12 - 将其加载到 TIME 类型中

我希望你们能帮我解决这个问题......

【问题讨论】:

  • 请提供有关您的代码的更多详细信息以及失败的完整打印输出。仅仅知道管道失败并不足以帮助您进行调试。
  • 我们在 BQ 中使用时间戳作为日期格式。在从数据流向 BQ 添加数据时,我们将日期作为具有特定时间戳格式 yyyy-MM-dd hh:MM:ss.SSS 的字符串。这在我们构建的所有管道中都非常适合我们。希望这会有所帮助
  • 那么,对于 Date 和 DateTime 格式,您找到要发送到 BigQuery 的 POJO 了吗?

标签: google-bigquery google-cloud-dataflow


【解决方案1】:

我尝试了几件事:

//1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  String dateInString = info.getEventDate();
  Date date = sdf.parse(dateInString);

row.set("EventDate", date);


//2
row.set("EventDate", new DateTime("2017-01-23")); 


//3
public String getEventDate() {
return get(Field.EventDate);  }
...
...
...
row.set("EventDate", info.getEventDate());


//4
private static DateTimeFormatter dmt = DateTimeFormat.forPattern("yyyy-MM-dd");
....
....
....
DateTime ds = dmt.parseDateTime(info.getEventDate());

【讨论】:

  • 请提供您收到的错误消息的完整打印输出。目前尚不清楚您的代码的哪一部分失败了。如果您在 Dataflow 之外的本地计算机上执行 DateTime 解析代码,是否会重现故障?
  • 嗨,斯科特,感谢您的回复。大代码在这里分享。我向您发送 LinkedIn 邀请。我会通过电子邮件发送给您。
  • 请改为发送至 dataflow-feedback@google.com。
  • 嗨 Scott,我发送的邮件主题相同 - 使用 Dataflow 将 DATE 类型加载到 Google BigQuery
  • @HaimB 你能解决你的问题吗?如果是这样,建议将解决方案作为答案发布,以更好地帮助社区。如果不是,建议使用您遇到的错误的 sn-p 更新您的原始问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多