我正在通过数据流从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
答案 0 :(得分:0)
请注意,整数被编码为字符串以匹配BigQuery的导出JSON格式。
所以你需要Integer.parseInt
。很抱歉,我们应该在阅读TableRow
时改进有关在BigQueryIO.Read
中输入值的文档 - 此文档不是很容易被发现。