TableRow.get(“field_name”)只能转换为Dataflow ParDo中的String

时间:2016-04-01 23:14:10

标签: google-bigquery google-cloud-dataflow

我正在通过数据流从BQ导出一个表,看起来当由ParDo处理时,我只能得到TableRow中每个字段的数据的“字符串”值,而不管BQ中最初的数据类型是什么架构。

例如,假设我的表格中有一个INTEGER类型的列“fieldA”:

     public void processElement(ProcessContext c) throws Exception {
         TableRow row = c.element();
         String str = (String) c.get("fieldA"); // OK
         Integer i = (Integer) c.get("fieldA"); // Throw "String cannot be cast to Integer" exception
     }

这是一个错误还是只有我?如果不仅仅是我,无论如何都可以绕过它吗?对于整数类型,我仍然可以执行Integer.valueOf(String)但是在解析Timestamp字段时它必须有点hacky且容易出错。

仅供参考,我正在使用BlockDataflowPipelineRunner

1 个答案:

答案 0 :(得分:0)

根据BigQueryTableRowIterator

  

请注意,整数被编码为字符串以匹配BigQuery的导出JSON格式。

所以你需要Integer.parseInt。很抱歉,我们应该在阅读TableRow时改进有关在BigQueryIO.Read中输入值的文档 - 此文档不是很容易被发现。