如何在使用dataweave 2.0将数据附加到csv时删除标题



我有一个要求,我从数据库读取数据并将其写入文件,但该文件应该只有一个头。我在这里使用批处理,因为我需要读取大量数据并将数据附加到同一文件。然而,对于每个事务头添加,我怎么能只写头一次,而写记录多次?

我知道我们可以使用for-each来实现这一点,但是我想知道是否可以使用批处理。

当前输出:

col1  col2  col3  col4
abc  333  5ad  gag
col1  col2  col3  col4
ddd  455  d44  ggg

预期输出:

col1  col2  col3  col4
abc  333  5ad  gag
ddd  455  d44  ggg

Thanks in advance

你所面临的问题是因为你总是用头写CSV。需要在"CSV Writer"选项中设置"header=false"。除此之外,我还建议在写入之前聚合行,这样性能会更高,您甚至可以尝试设置deferred=true来改善时间。这是一个示例代码,让您了解如何继续。唯一的"丑"字部分是在开头写标题。

<flow name="AppendFileInBatch">
<ee:transform doc:name="Create headers">
<ee:message >
</ee:message>
<ee:variables >
<ee:set-variable variableName="headers" ><![CDATA[%dw 2.0
output application/java
var cols = ["col1","col2","col3"]
---
(cols joinBy ",") ++ "n"
]]></ee:set-variable>
</ee:variables>
</ee:transform>
<file:write doc:name="Create file with headers" path="out.csv">
<file:content ><![CDATA[#[vars.headers]]]></file:content>
</file:write>
<batch:job jobName="fileAppenderJob">
<batch:process-records >
<batch:step name="Batch_Step" >
<batch:aggregator doc:name="Batch Aggregator" size="1000">
<ee:transform doc:name="Create CSV part">
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/csv header=false
---
payload]]></ee:set-payload>
</ee:message>
</ee:transform>
<file:write doc:name="Append CSV" path="out.csv" mode="APPEND"/>
</batch:aggregator>
</batch:step>
</batch:process-records>
</batch:job>
</flow>

CSV格式ref: https://docs.mulesoft.com/dataweave/2.3/dataweave-formats-csv#writer_properties

最新更新