给出BigQuery表:
以下客户端代码:
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?
答案 0 :(得分:3)
似乎你有两条评论解释这种行为。我会在这里复制它们以对你的问题做出真正的回答
“我可以回答DOUBLE for FLOAT的事情 - 它只是一个术语。在BigQuery中,FLOAT意味着64位浮点数(在许多其他商业数据库中相同),而在Java中,Double意味着64位浮点数。”
来自Michael Sheldon:
“我可以为INTEGER事件回答STRING。有些语言(Javascript)将所有数字都表示为浮点数,这意味着并非所有64位整数都可以表示。为了避免这种意外舍入,INTEGER总是在线路上引用。在它们中出现在Java中的字符串“