aliyun / aliyun-odps-java-sdk

ODPS SDK for Java Developers
Other
89 stars 50 forks source link

请问: 从查询结果record获得的字段类型为什么全部为String? #13

Closed LuVx21 closed 5 years ago

LuVx21 commented 5 years ago
String sql = "select * from "
                + odpsTableName
                + " where pt_dt = '" + formatter.format(yesterday.getTime()) + "';";
i = SQLTask.run(odps, sql);
i.waitForSuccess();
List<Record> records = SQLTask.getResult(i);
for (Record r : records) {
    com.aliyun.odps.Column[] columns = r.getColumns();
    for (int j = 0; j < columns.length; j++) {
        System.out.println(column.getName() + ":" + column.getTypeInfo().getTypeName());
    }
}

执行结果如下:

weight:STRING
updated_by:STRING
update_time:STRING

为什么这样获取到的columns 中的字段类型全部为String, 是特意这样设计还是bug? 而下面的这种是和实际相同的

String type = odps.tables().get("user").getSchema().getColumn("update_time").getTypeInfo().getTypeName();
System.out.println(type);

这个执行结果就是DATETIME

lyman commented 5 years ago

SQLTask.getResult 这是个比较古老的接口了,主要用于屛显,无 schema(所以你看到的 string 是 sdk 层面统一填进去的)

需要准确 schema 可以用较新的 SQLTask.getResultSet

LuVx21 commented 5 years ago

谢谢解答!