通过数据流 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"

中显示为字符串