Игнорировать и регистрировать строку CSV в DataWeave, если выполняется условие

В DataWeave можно игнорировать определенную строку в файле CSV, если выполняется условие.

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

Я просмотрел документы, и самый близкий ответ, который я нашел, - это обернуть сопоставление в предложение when otherwise. Я не могу найти ничего о вызове регистратора или даже о передаче этой конкретной строки в поток для обработки (чтобы ее можно было зарегистрировать...)


person danw    schedule 06.04.2016    source источник


Ответы (1)


Вы можете выполнять фильтрацию и ведение журнала с помощью dataweave, но для этого потребуется дополнительный код -

Вот мой пример ввода csv -

Name,Gender
M1,Male
M2,Male
F1,Female
F2,Female

Вот полный Mule Flow, подробности мы рассмотрим ниже —

 <configuration doc:name="Configuration">
     <expression-language>
         <global-functions>
             def filterRecords(record,genderType){
                        if(record.Gender == genderType){
                            return true;
                        } else {
                            flowVars.filteredRecords.add(record);
                            return false;
                        }


                    }

         </global-functions>
     </expression-language>
 </configuration>

    <flow name="Sample_flow">
        <file:inbound-endpoint path="input" moveToDirectory="output" responseTimeout="10000" doc:name="File"/>
        <set-variable variableName="filteredRecords" value="#[[]]" doc:name="Set the "/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/csv header=false,separator="|"
---
payload filter (filterRecords($,"Male")) map {
    Name:$.Name,
    Gender:$.Gender
}
]]></dw:set-payload>
        </dw:transform-message>
        <object-to-string-transformer doc:name="Object to String"/>
        <logger message="#['Filtered Record:' + flowVars.filteredRecords]" level="INFO" doc:name="Logger"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
    </flow>
  • Установите переменную потока списка типов, мы будем использовать ее для хранения отфильтрованных записей.

  • Define a global MEL function that takes a record and some other data to create condition. In sample, filterRecords() function takes record and genderType to filter on. This is configured by adding Configuration element in mule-config. Global Functions. This Global function must return true or false. If the Gender type matches with the one we passed in then it will return true for including record in transformation otherwise it will add that record in filteredRecords flow variable and then return false.

  • Теперь давайте напишем код переплетения данных для фильтрации и регистрации. В приведенном ниже коде используется функция filter для фильтрации полезной нагрузки. Для критериев фильтрации мы будем вызывать только что созданную глобальную функцию. Для каждой записи, которая соответствует критериям в функции, должна быть строка в выводе dataweave.

  • После преобразования dataweave мы можем получить доступ к переменной потока filteredRecords, чтобы найти отфильтрованные записи, а затем вы можете делать с ними все, что хотите.

Вот вывод последних двух регистраторов в потоке. Вы можете видеть, что в отфильтрованном списке есть все женские записи, в то время как ваша полезная нагрузка, т.е. вывод DW, содержит все мужские записи, потому что мы отфильтровали по мужчинам.

org.mule.api.processor.LoggerMessageProcessor: Filtered Record:[{Name=F1, Gender=Female}, {Name=F2, Gender=Female}]
org.mule.api.processor.LoggerMessageProcessor: M1|Male
M2|Male

- Надеюсь, это поможет, Удачи!

P.S.: Спасибо за вопрос, он заставил меня понять, как это сделать, потому что я никогда не делал этого раньше :)

person Manik Magar    schedule 06.04.2016