Csv 如何使用Talend数据集成读取一列数据存在于另一列中的文件

Csv 如何使用Talend数据集成读取一列数据存在于另一列中的文件,csv,etl,talend,Csv,Etl,Talend,我每天从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 Atten

我每天从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\u leave\u id
emp\u leave\u reason
列数据被移动/分散到下一列中

因此,由于使用tFileInputDelimited和各种读取模式,我无法将数据正确加载到目标数据库中。主要是我无法正确读取Talend中该组件的数据


是否有一种方法可以正确解析此CSV以获得所需格式的数据?

这可能是一个TSV文件。不确定Talend,但可以为您解析这些文件:

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许可)。

我不确定我是否已经在这里正确整理了您的示例数据,最好在Excel(或其他电子表格程序)中发布数据截图的链接,或者将直接文本发布到代码块中,而不是尝试格式化它。您还可以看到如何配置tFileInputDelimited组件的屏幕截图。因此,您的直接文本可能看起来像
Emp\u ID、Emp\u leave\u ID、Emp\u leave\u reason、Emp\u leave\u Status、Emp\u lev\u appv\u cnt
如果您无法修复输入数据示例,我们无法帮助您。