通过数据流 Java API 客户端返回不一致的 BigQuery 数据类型
Inconsistent BigQuery datatypes returned client side via Dataflow Java API
鉴于 BigQuery table:
以及以下客户端代码:
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?
您似乎收到了两条解释该行为的评论。我会把它们复制到这里来真正回答你的问题
来自 Mosha Pasumansky :
"I can answer DOUBLE for FLOAT thing - it is just a terminology. In BigQuery, FLOAT means 64 bit floating number (same in many other commercial databases), and in Java, Double means 64 bit floating number."
来自 Michael Sheldon :
" 我可以为 INTEGER 回答 STRING。某些语言 (Javascript) 将所有数字表示为浮点数,这意味着并非所有 64 位整数都可以表示。为避免这种意外舍入,INTEGER 总是在打开时被引用电线。这导致它们在 Java"
中显示为字符串
鉴于 BigQuery table:
以及以下客户端代码:
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?
您似乎收到了两条解释该行为的评论。我会把它们复制到这里来真正回答你的问题
来自 Mosha Pasumansky :
"I can answer DOUBLE for FLOAT thing - it is just a terminology. In BigQuery, FLOAT means 64 bit floating number (same in many other commercial databases), and in Java, Double means 64 bit floating number."
来自 Michael Sheldon :
" 我可以为 INTEGER 回答 STRING。某些语言 (Javascript) 将所有数字表示为浮点数,这意味着并非所有 64 位整数都可以表示。为避免这种意外舍入,INTEGER 总是在打开时被引用电线。这导致它们在 Java"