当前位置: 首页 > 知识库问答 >
问题:

如何根据特定条件以 CSV 格式打印记录值而不重复数据编织中的某些字段

从阎宝
2023-03-14

请考虑CSV中的以下输入示例

Company,FirstName,LastName,Email
Rate,Manule,Reaya,Reaya@egetmetus.org
Rate,sholy,Bonvgy,Bonvage@mollis.org

输出应如下:

Company,FirstName,LastName,Email
Rate,Manule,Reaya,Reaya@egetmetus.org
,sholy,Bonvgy,Bonvage@mollis.org

条件是:如果公司名称在输入中的不同记录中重复,则在输出 CSV 中应为空。

请让我知道这是否可以在 Mule 的数据编织组件中处理

下面是更新的代码

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd">

    <configuration doc:name="Configuration">
     <expression-language>
         <global-functions>
            def getCompanyName(Company){
                 if (flowVars.companyList contains Company) {
                    return "";
                 }  else {
                    flowVars.companyList.add(Company);
                    return Company;
                 }
            }
          </global-functions>
     </expression-language>
 </configuration>
    <file:connector name="File" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
    <file:connector name="File1" autoDelete="true" outputAppend="true" streaming="true" validateConnections="true" doc:name="File"/>
    <flow name="csvtocsvrecordemptyFlow">
        <file:inbound-endpoint path="src\test\resources\input" connector-ref="File" responseTimeout="10000" doc:name="File"/>
        <set-variable variableName="companyList" value="[[]]" doc:name="Variable"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/csv header=true
---
payload map {
    CompanyName: getCompanyName($.Company),
    name:$.FirstName
}]]></dw:set-payload>
        </dw:transform-message>

        <file:outbound-endpoint path="src\test\resources\output" outputPattern="test.csv" connector-ref="File1" responseTimeout="10000" doc:name="File"/>
    </flow>
</mule>

共有2个答案

宗乐池
2023-03-14

@Akil Karthik:当我尝试解决方案时,它仍然显示强制二进制到数组错误。我已经在变量声明中提供了MIME类型application/csv。

宗增
2023-03-14

然而,问题是将使用的公司名称存储在内存中,仅使用DataWeave。我认为这是做不到的。但是如果你结合MEL Global函数和DataWeave,你应该能够实现这一点。

在mule配置中添加一个全局MEL函数,如下所示

<configuration doc:name="Configuration">
     <expression-language>
         <global-functions>
            def getCompanyName(name){
                 if (flowVars.companyList contains name) {
                    return "";
                 }  else {
                    flowVars.companyList.add(name);
                    return name;
                 }
            }
          </global-functions>
     </expression-language>
 </configuration>

在流程中,在数据编织之前初始化一个空数组。

<set-variable value="#[[]]" variableName="companyList" doc:name="Variable" />

然后,在dataweave中,使用MEL函数-

...
companyName: getCompanyName($.name)
...

您可以在 MEL 函数中编写任何自定义逻辑,这些逻辑可以计算名称并向 DataWeave 返回一些值。

 类似资料:
  • 问题内容: 我有一个这样的表: 我正在尝试删除具有3个以上具有相同ID的名称的记录,但要删除所有记录。因此,我试图得到这样的东西: 我不了解如何编写此查询。我已经达到了保留一个记录但没有记录阈值的程度: 给我: 有什么建议?哦,对了,我不在乎合并时会保留哪些记录。 问题答案: 您可以使用CTE做到这一点

  • 问题内容: ls命令以以下格式打印时间: 我如何转换,从接收到的时间的这个格式的本地时间? 问题答案: 使用strftime(您需要先转换为): 格式: 这是完整的代码:

  • 问题内容: 在我的数据库中,我有两个表,一个是政治(politics_id,policy,policy_type_id),另一个是tipo_politics(politics_type_id,policy_type)。 这是餐桌 政治 这是表 tipo_politics 我需要的是在视图中显示以政治类型为标题的政治表格的记录,但是标题不会重复。这样的事情。 我希望通过group by进行查询,但只

  • 问题内容: 我正在编写一个小的AngularJS应用,该应用具有登录视图和主视图,其配置如下: 我的LoginController检查用户/密码组合,并在$ rootScope上设置一个属性,以反映此情况: 一切正常,但是如果我访问,最终将绕过登录屏幕。我想写一些类似的内容,“每当路由更改时,如果$ rootScope.loggedUser为null,则重定向到/ login” … …等等。我可以

  • 我有一个csv,我需要能够打印记录的总数,这是如何做到的?我尝试使用总和语句和计数,但似乎没有工作

  • 问题内容: 这是我对源数据的插入语句。 我有我的源数据 该数据已经排序,和。 我正在尝试从中生成此输出: 这是从原始数据得出结果的逻辑: 对于带有,或的每个记录 A* :如果以下记录 B 具有,则: * 如果记录 乙 具有相同的日期部分如 甲 (忽略时间),同时消除记录 甲 和 乙 从结果。这就是为什么删除记录4、5、8和9的原因; 否则,如果记录 B 的值早于记录 A ,则将 A 的值更新为 B