dataweave - 如何在使用 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
提前致谢
解决方案
您面临的问题是因为您总是使用标题编写 CSV。您需要header=false
在 CSV Writer 选项中进行设置。除此之外,我还建议在编写之前聚合行,因此它会更高效,您甚至可以尝试设置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 格式参考:https ://docs.mulesoft.com/dataweave/2.3/dataweave-formats-csv#writer_properties
推荐阅读
- javascript - 如何使用下拉列表计算jQuery中的总数
- javascript - 用户未登录时的ajax ridirecting不起作用
- android - FastLane:有没有办法从 bitbucket 中的远程分支生成 android/iOS 构建?
- python - 如何导入自定义面料文件夹
- angular - 如何以角度而不是从正文发送参数和url
- django-models - Django Rest Framework + allauth + dj_rest_auth - 更新自定义用户模型而不是电子邮件地址部分
- angular - 未绑定断点 - Angular、VS Code、Chrome、PWA
- javascript - 将 2 个 3d 文件合并为一个
- python - 如何计算列中的总和 f 值和这些值总和的百分比,并在此基础上在 Python Pandas 中创建新列?
- python - 在 Pandas 中透视包含表单回复的表格