Сообщение о преобразовании мула не отображается в точке с запятой (;) Список ‹csv› в csv

У меня есть большой файл (csv), в котором данные выглядят как

"Data Definition Catalog"|"Accounting Entry **;** sda Message Id"|"dsds"|"6/23/2016"|"Pdas"|"Paytrtr"|"faasd"|"Betalen & Sparen"|"CNA"|"8/1/2016"|"Data Attribute"|"Bok"|"Unsdfdsf"|""|"fdsfdfdsf"|"fdsfdsfsdggrrg"|""|"**hello semicolon ; kskdsldss.**"|"dsasa"|"Payment Engine"|"A35"|""|"Approved"|"No"|"No"|"N"|"N"|"N"|"N"|"N"|"ffrr"|""|"8/1/2016"|""|""|""|""|""|""|""|""|""

Я использую компонент сообщения преобразования для преобразования этого списка в формат csv, но получаю сообщение об ошибке, что null не может быть приведен к строке. При дальнейшем просмотре ввода я чувствую: (символ точки с запятой выделен жирным шрифтом) создает проблему и делает все последующие кортежи пустыми. Я немного смущен. Кто-нибудь может сообщить мне, как это решить?

Ошибка преобразования сообщения в дату отправки (null не может быть приведено к строке), потому что после точки с запятой все становится нулевым / пустым, я предполагаю из ввода

%dw 1.0
%output application/csv separator=",",escape=";", quoteValues=true
%function getBoolean(aString) (
    aString match {
        :null -> null,
        s is :string -> ((s contains "Yes") or (s contains "Y")),
        default -> null
    }
)
%function convertToBoolean(s) (
    s match {
        "Yes" -> "true",
        "No"  -> "false",
        "Y"   -> "true",
        "N"   -> "false"
    }
)
---
payload map ((payload01 , indexOfPayload01) -> {
    Name: payload01.Attribute_Name,
    TechnicalName: payload01.Technical_Name,
    SubmissionDate: (payload01.Submission_Date as :date{format:"M/d/yyyy"} as :string{format:"yyyy-MM-dd"}) when (payload01.Submission_Date as :string) contains "/" otherwise (payload01.Submission_Date as :date{format:"d-M-yyyy"} as :string{format:"yyyy-MM-dd"}),
    DefinitionOwner: payload01.Definition_Owner,
    DataSteward: payload01.Data_Steward,
    SubmittedBy: payload01.Submitted_By,
    SourceHub: payload01.Source_Hub,
    SourceApplicationEntity: payload01.Source_Application_Entity,
    PublicationDate: (payload01.Publication_Date as :date{format:"M/d/yyyy"} as :string{format:"yyyy-MM-dd"}) when (payload01.Publication_Date as :string) contains "/" otherwise (payload01.Publication_Date as :date{format:"d-M-yyyy"} as :string{format:"yyyy-MM-dd"}),
    ObjectType: payload01.Object_Type,
    Nameinnativelanguage: payload01.Name_in_native_language,
    Descriptioninnativelanguage: payload01.Description_in_native_language,
    BusinessRuleinnativelanguage: payload01.Business_Rule_in_native_language,
    Notesinnativelanguage: payload01.Notes_in_native_language,
    Description: payload01.Description,
    BusinessRule: payload01.Business_Rule,
    Notes: payload01.Notes,
    PrimaryDomain: payload01.Primary_Domain,
    Subdomain: payload01.Subdomain,
    LogicalDataType: payload01.Technical_Data_Type,
    ValueRange: payload01.Value_Range,
    Status: "Legacy" when payload01.Status contains "Legacy" otherwise payload01.Status,
    IsCritical: getBoolean(payload01.Is_Critical) as :string as :boolean,
    IsPrivacySensitive: getBoolean(payload01.Is_Privacy_Sensitive) as :string as :boolean,
    IndirectlyIdentifyingPersonalInformation: getBoolean(payload01.Indirectly_Identifying_Personal_Information) as :string as :boolean,
    DirectlyIdentifyingPersonalInformation: getBoolean(payload01.Directly_Identifying_Personal_Information) as :string as :boolean,
    SensitivePersonalInformation: getBoolean(payload01.Sensitive_Personal_Information) as :string as :boolean,
    SensitiveFinancialInformation: getBoolean(payload01.Sensitive_Financial_Information) as :string as :boolean,
    SensitiveSecurityInformation: getBoolean(payload01.Sensitive_Security_Information) as :string as :boolean,
    PrivacyStatus: payload01.Privacy_Status,
    PrivacyComment: payload01.Privacy_Comment,
    LastUpdateDate: (payload01.Last_Update_Date as :date{format:"M/d/yyyy"} as :string{format:"yyyy-MM-dd"}) when (payload01.Last_Update_Date as :string) contains "/" otherwise (null when (payload01.Last_Update_Date as :string) == "" otherwise payload01.Last_Update_Date as :date{format:"d-M-yyyy"} as :string{format:"yyyy-MM-dd"}),
    ReviewRemarks : payload01.Review_Remarks,
    AssetType:p('asset.dataAttributes.type.id'),
    Domain: p('domain.name'),
    Community:p('community.name'), 
    DataModel:payload01.Name,
    PhysicalcolumnName: payload01.Technical_Name,
    DomainColumn:p('domain.name.PhysicalDataDictionary'),
    CommunityColumn:"DIH",
    DeepLink:p('powerdesigner.deeplink'),
    ExampleValue:payload01.Example_Value                                               
})

person U Bhargava    schedule 03.12.2020    source источник


Ответы (1)


Проблема в том, что DataWeave не знает, что ввод - это CSV с разделителем |. Вы должны явно указать это, используя элемент <dw:input-payload>:

<dw:transform-message doc:name="Transform Message">
  <dw:input-payload mimeType="application/csv" >
        <dw:reader-property name="separator" value="|" />
  </dw:input-payload>
    <dw:set-payload><![CDATA[
    ...

Обратите внимание, что ваш ввод не имеет заголовков, поэтому он не удастся из-за этого, но я предполагаю, что это не настоящий ввод, а просто фрагмент.

person aled    schedule 04.12.2020