我从不同来源获得不同长度的 CSV 文件。CSV 中的列是不同的,唯一的例外是每个 CSV 文件总是有一个 Id 列,可用于绑定不同 CSV 文件中的记录。一次需要处理两个这样的 CSV 文件。该过程是从第一个文件中获取 Id 列并匹配第二个 CSV 文件中的行,并创建第三个文件,其中包含来自第一个和第二个文件的内容。id 列可以在第一个文件中重复。例如下面给出。请注意,第一个文件我可能有 18 到 19 个不同数据列的组合,因此,我无法在 dataweave 中对转换进行硬编码,并且每次都会添加一个新文件。动态方法是我想要完成的。所以一旦写出来,即使添加了新文件,该逻辑也应该起作用。这些文件也变得相当大。
下面给出了示例文件。
CSV1.csv
--------
id,col1,col2,col3,col4
1,dat1,data2,data3,data4
2,data5,data6,data6,data6
2,data9,data10,data11,data12
2,data13,data14,data15,data16
3,data17,data18,data19,data20
3,data21,data22,data23,data24
CSV2.csv
--------
id,obectId,resid,remarks
1,obj1,res1,rem1
2,obj2,res2,rem2
3,obj3,res3,rem3
Expected file output -CSV3.csv
---------------------
id,col1,col2,col3,col4,objectid,resid,remarks
1,dat1,data2,data3,data4,obj1,res1,rem1
2,data5,data6,data6,data6,obj2,res2,rem2
2,data9,data10,data11,data12,obj2,res2,rem2
2,data13,data14,data15,data16,obj2,res2,rem2
3,data17,data18,data19,data20,obj3,res3,rem3
3,data21,data22,data23,data24,obj3,res3,rem3
我正在考虑使用 pluck 来获取第一个文件的列值。我的想法是在不对其进行硬编码的情况下获取转换中的列。但是我遇到了一些错误。在此之后,我的任务是搜索 id 并从第二个文件中获取值
{(
using(keys = payload pluck $$)
(
payload map
( (value, index) ->
{
(keys[index]) : value
}
)
)
)}
使用 pluck 时出现以下错误
Type mismatch for 'pluck' operator
found :array, :function
required :object, :function
我正在考虑在第二个文件的 id 上使用 groupBy 以促进更好的搜索。但是需要关于如何在一个转换中附加内容以形成第三个文件的建议。