我每天都会从CSV格式获取数据。
示例数据如下:
Emp_ID emp_leave_id EMP_LEAVE_reason Emp_LEAVE_Status Emp_lev_apprv_cnt
E121 E121- 21 Head ache, fever, stomach-ache Approved 16
E139 E139_ 5 Attending a marraige of my cousin Approved 03
您可以在此处看到emp_leave_id
和EMP_LEAVE_reason
列数据已移位/分散到下一列。
因此使用tFileInputDelimited和各种读取模式的问题我无法正确地将数据加载到我的目标数据库中。主要是我无法在Talend中使用该组件正确读取数据。
有没有办法可以正确解析此CSV以获取我想要的格式的数据?
答案 0 :(得分:0)
这可能是TSV文件。不确定Talend,但uniVocity可以为您解析这些文件:
TsvDataStoreConfiguration tsv = new TsvDataStoreConfiguration("my_TSV_datastore");
tsv.setLimitOfRowsLoadedInMemory(10000);
tsv.addEntities("/some/dir/with/your_files", "ISO-8859-1"); //all files in the given directory path will accessible entities.
JdbcDataStoreConfiguration database = new JdbcDataStoreConfiguration("my_Database", myDataSource);
database.setLimitOfRowsLoadedInMemory(10000);
Univocity.registerEngine(new EngineConfiguration("My_ETL_Engine", tsv, database));
DataIntegrationEngine engine = Univocity.getEngine("My_ETL_Engine");
DataStoreMapping dataStoreMapping = engine.map("my_TSV_datastore", "my_Database");
EntityMapping entityMapping = dataStoreMapping.map("your_TSV_filename", "some_database_table");
entityMapping.identity().associate("Emp_ID", "emp_leave_id").toGeneratedId("pk_leave"); //assumes your database does not keep the original ids.
entityMapping.value().copy("EMP_LEAVE_reason", "Emp_LEAVE_Status").to("reason", "status"); //just copies whatever you need
engine.executeCycle(); //executes the mapping.
不要使用CSV解析器来解析TSV输入。它不会正确处理转义序列(比如\ t里面的值,你将获得转义序列而不是制表符),如果你的值中有引号,肯定会中断(CSV解析器会尝试查找结束引号字符并将继续读取字符,直到找到另一个引号)
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。