Как отфильтровать 2 файла CSV в Mule? - PullRequest
0 голосов
/ 15 октября 2019

Я использовал компонент ParseTemplate в студии Anypoint для получения данных из файла .csv. Я использовал два CSV-файла в этом сценарии. Например: my flows

Я хочу отфильтровать эти 2 полезные нагрузки, в которых содержимое, отсутствующее в первом файле, но во втором файле, должно отображаться как окончательный ответ JSON. ,

Подобно тому, как 1-й CSV-файл имеет 10 полей с идентификатором от 1 до 10, второй файл состоит из полей, присутствующих в 1-м CSV-файле, и еще 5 полей с идентификаторами 11-15.

Я хочу отобразить только эти 5 уникальных полей, которых нет в 1-м файле. Как этого добиться?

1 Ответ

3 голосов
/ 15 октября 2019

Намного проще, если вы предоставите входные данные и ожидаемый результат. Более того, я не уверен, хотите ли вы код DW 1.0 или 2.0. Итак, вот код DW 2.0:

%dw 2.0
output application/csv
// Get the headers to remove--I assume the 1st file is in the payload
var hs2rm = payload[0] pluck $$
// Read the second CSV--not sure how you do it since I do not see the details
// of parseTemplate.
var csv = readUrl("classpath://other.csv","application/csv")
---
// Iterate over the records of the second CSV file
csv map (
    // Remove the headers of the 2nd CSV that match the headers of the 1st
    $ -- hs2rm
)

Вот выражение DW 1.0, чтобы сделать то же самое, что и выше:

%dw 1.0
%output application/csv

// Get the headers to remove--I assume the 1st file is in the payload
%var fs2rm = payload[0] pluck $$
// Read the second CSV
%var csv = readUrl("classpath://other.csv","application/csv")
// Define a function to iterate over the object and remove fields
// passed in a list of :key types (i.e. not :string)
%function rmFields(o,fs) 
    o mapObject (
        {}  when (fs contains $$)
            otherwise {($$):$}
    )
---
// Iterate over the records of the second CSV file
csv map (
    // Remove the headers of the 2nd CSV that match the headers of the 1st
    // There is no convenient way to do it in DW 1.0 as in DW 2.0
    rmFields($, fs2rm)
)

Теперь, когда вы предоставили образец для входных данных и ожидаемогоВывод Я знаю, что вы ищете - потому что оригинальное описание вверху по крайней мере не ясно - и я могу предоставить вам код. Вот оно:

%dw 1.0
%output application/json
%var firstcsv = flowVars.set_1stpayload
%var secondcsv = flowVars.set_2ndpayload
---
secondcsv -- firstcsv
...