【问题标题】:How to reorder CSV columns in Apache NiFi如何在 Apache NiFi 中重新排序 CSV 列
【发布时间】:2020-01-30 14:06:50
【问题描述】:

在 apache nifi 中重新排序 csv 中的列。

输入 - 我有多个具有相同列但顺序不同的文件。

输出 - 抓取一些列并以相同的顺序存储。

【问题讨论】:

    标签: apache-nifi apache-nifi-registry


    【解决方案1】:

    您应该能够使用 ConvertRecord 执行此操作,您的 CSVRecordReader 的架构与输入的列(按顺序)匹配,而 CSVRecordSetWriter 的输出架构将具有包含所选列的架构所需的输出顺序。我没有尝试过,但我相信这就是它的工作原理。

    【讨论】:

    • 它有效。谢谢!! ConvertRecord 和 QueryRecord 都可以工作。所要做的就是在模式寄存器中创建输入和输出 Avro 模式。
    【解决方案2】:

    就我而言,因为我确信这些列将包含在所有 CSV 文件中,所以我只需要重新排序它们。所以我使用QueryRecord 重新排序我的 csv 文件。

    例如,这是我的 csv 文件:

    \\file1
    name, age, location, gender
    Jack, 40, TW, M
    Lisa, 30, CA, F 
    
    \\file2
    name, location, gender, age
    Mary, JP, F, 25
    Kate, DE, F, 23
    

    我想将列重新排序为location,name,gender,age,我在QueryRecord 中设置了一个名为reorder_data 的新属性,其值如下:

    SELECT location,name,gender,age FROM FLOWFILE

    那么flowfile中的数据会变成:

    \\file1 - reordered
    location, name, gender, age
    TW, Jack, M, 40
    CA, Lisa, F, 30
    
    \\file2 - reordered
    location, name, gender, age
    JP, Mary, F, 25
    DE, Kate, F, 23
    

    这样,我既可以得到QueryRecord输出的重新排序的数据,也可以得到原始数据,非常方便。

    顺便说一句,您还可以使用组变量或属性来设置列顺序以便更好地维护:

    //Group variable or attribute
    column_order   location,name,gender,age
    
    //Property in QueryRecord
    reorder_data   SELECT ${column_order} FROM FLOWFILE
    

    【讨论】:

    • 转换记录是一种简单的方法。您可以在特定于您的输入文件的 updateattribute 上添加模式,并添加一个通用输出模式。但是查询记录也像魅力一样起作用。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多