我目前正在构建一个直接从数据库中提取数据的工具,因为SPSS Modeler太慢并且首先将它存储在Java ResultSet中。
但我尝试将数据导出为CSV(或类似)文件,尝试保留尽可能多的列类型。 目前我正在使用 opencsv ,但它会将Decimal和其他许多内容转换为String。当我将文件加载回SPSS Modeler时,我只得到整数和字符串。
是否有任何CSV库(可能带有特殊编码)或其他文件类型我可以用它来导出数据及其列类型(如IBM InfoSphere Data Architect可以做到的)所以我可以直接将它加载回SPSS Modeler而不用在那里手动更换它?
谢谢!
答案 0 :(得分:0)
如果数据当前存储在数据库中,则可以从信息架构中检索列类型。您需要做的就是在查询表后检索此信息并将其存储,以便以后可以重复使用。
// connect to DB as usual
Statement stmt = conn.createStatement();
// create your query
// Note that you can use a dummy query here.
//You only need to access the metadata schema of the table, regardless of the actual query.
ResultSet rse = stmt.executeQuery("Select A,B FROM table WHERE ..");
// get the ResultSetMetadata
ResultSetMetaData rsmd = rse.getMetaData();
// Get database specific type
rsmd.getColumnTypeName(1); // database specific type name for column 1 (e.g. VARCHAR)
rsmd.getColumnTypeName(2); // database specific type name for column 2 (e.g. DateTime)
....
// Get generic JDBC type http://docs.oracle.com/javase/7/docs/api/java/sql/Types.html
rsmd.getColumnType(1) // generic type for col 1 (e.g. 12)
rsmd.getColumnType(2) // generic type for col 2
您可以将此信息存储在CSV schema中,并在转换过程中对其进行处理。 我建议您使用此处提供的SuperCSV。 该库提供了所谓的单元处理器,允许您定义列的类型。
单元处理器是使用Super CSV进行读写的不可或缺的一部分 - 它们可以自动执行数据类型转换并强制执行约束。它们实现了责任链设计模式 - 每个处理器都有一个明确定义的目的,可以与其他处理器链接在一起,以完全自动化单个CSV列的所有必需转换和约束验证。