不一致的BigQuery数据类型通过Dataflow Java API返回客户端

时间:2015-03-20 11:14:22

标签: google-bigquery google-cloud-dataflow

给出BigQuery表:

enter image description here

以下客户端代码:

private void testTypes(Iterable<TableRow> table) {
        for(TableRow tr: table){
            Object x = tr.get("an_integer");
            Object y = tr.get("a_float");
            Object z = tr.get("a_string");
            System.out.println(x.getClass().getTypeName());
            System.out.println(y.getClass().getTypeName());
            System.out.println(z.getClass().getTypeName());
        }
}

它产生:

java.lang.String
java.lang.Double
java.lang.String

为什么返回INTEGER的字符串?

为什么要为FLOAT返回Double?

1 个答案:

答案 0 :(得分:3)

似乎你有两条评论解释这种行为。我会在这里复制它们以对你的问题做出真正的回答

来自Mosha Pasumansky

“我可以回答DOUBLE for FLOAT的事情 - 它只是一个术语。在BigQuery中,FLOAT意味着64位浮点数(在许多其他商业数据库中相同),而在Java中,Double意味着64位浮点数。”

来自Michael Sheldon
“我可以为INTEGER事件回答STRING。有些语言(Javascript)将所有数字都表示为浮点数,这意味着并非所有64位整数都可以表示。为了避免这种意外舍入,INTEGER总是在线路上引用。在它们中出现在Java中的字符串“