【问题标题】:How to append a new column to csv payload using dataweave如何使用 dataweave 将新列附加到 csv 有效负载
【发布时间】:2021-05-10 22:00:44
【问题描述】:

我正在从 Azure blob 下载一个巨大的 csv 文件,我想通过添加一个新列来转换数据,然后将转换后的 csv 文件上传到另一个位置。

由于它是一个包含大约 42 列的巨大文件,因此应用程序在尝试转换时会失败或重新启动。

有人可以建议我如何实现这个用例吗?

输入csv

col1,col2,col3....col41 10,23,asds....29 34,83,hdkd....57 so on

csv 中的预期输出

NewCol,col1,col2,col3.....col41 1023,10,23,asda......29
3483,34,83,hdkd......57 so on

提前致谢

【问题讨论】:

  • 能否告知文件是如何下载的? HTTP,SFTP,其他?谢谢。
  • 如何失败?请在日志中添加任何错误消息,完整的,作为文本。
  • 您的问题是关于如何解决错误还是关于如何添加列?
  • 我正在从 azure 存储连接器获取数据。我尝试转换以添加列,但是当我在 cloudhub 上运行它时出现此错误“[警告] PersistedLongArray(fileName: dw-buffer-index-5.tmp 正在被 GCed 但仍处于打开状态。它将被关闭以避免 tmp 泄漏。”并且应用程序重新启动。如前所述,我有 41 列。
  • 能否用您的流程截图更新您的问题?谢谢

标签: dataweave mule4


【解决方案1】:

要向 CSV 输出添加一列,您只需将字段添加到每一行:

%dw 2.0
output application/csv
---
payload map ($ ++ { NewCol: $.col1 ++ $.col2})

【讨论】:

  • 为了防止使用磁盘并改善流媒体,您应该可以在输入上添加streaming=true(您可以使用set-payload并通过添加此参数来替换mime-type)和@987654324 @ 作为 DW 脚本中的输出参数。 docs.mulesoft.com/mule-runtime/4.3/dataweave-streaming
  • 要添加到@JorgeGarcia 评论,您甚至可以尝试添加一个简单的 for-each 并在其中添加新列到有效负载并将其写入 csv。 for-each 的批量大小值是可配置的,这将帮助您将巨大的有效负载集中到更小的块中并执行您的逻辑,从而避免任何内存不足的问题。
  • 我会驱逐批次,除非它在更大的用例中有意义,因为它会破坏流。如果处理不当,for-each 也会发生同样的情况,因为如果逐行转换,则需要再次重建完整结构。此外,逐行转换非常慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
相关资源
最近更新 更多