Regex 如何从CSV文件中仅提取和路由指定列,并删除所有其他列

Regex 如何从CSV文件中仅提取和路由指定列,并删除所有其他列,regex,apache,etl,apache-nifi,Regex,Apache,Etl,Apache Nifi,我想从CSV文件中提取几个字段及其值,并删除文件中的所有其他字段。请帮忙。我想我们可以使用RoutText处理器。请告诉我如何只为路由指定字段编写正则表达式,并删除所有其他内容。谢谢 示例-从附加的快照中,我只想将“Firstname、Lastname和兄弟姐妹”字段与hits值(每条记录/行)一起路由。删除其余列,如“州、年龄、Apt编号、国家、性别” 请告诉我什么是适用于此的正确处理器,以及为了实现此目的要使用什么配置属性。谢谢 正在附加快照以供参考 我认为使用正则表达式不是最好的解决方案

我想从CSV文件中提取几个字段及其值,并删除文件中的所有其他字段。请帮忙。我想我们可以使用RoutText处理器。请告诉我如何只为路由指定字段编写正则表达式,并删除所有其他内容。谢谢

示例-从附加的快照中,我只想将“Firstname、Lastname和兄弟姐妹”字段与hits值(每条记录/行)一起路由。删除其余列,如“州、年龄、Apt编号、国家、性别”

请告诉我什么是适用于此的正确处理器,以及为了实现此目的要使用什么配置属性。谢谢


正在附加快照以供参考

我认为使用正则表达式不是最好的解决方案:我应该这样做:

  • 首先,您需要浏览csv:

    $handle = fopen("test.csv", "r")
    
  • 通过数据映射

    $data = fgetcsv($handle, 1000, ",") 
    
  • 从已存在的带有所需字段的$data创建新的标头和数组

  • 将新数据放入新的csv

    $fp = fopen('file.csv', 'w');
    
    foreach ($data as $fields) {
        fputcsv($fp, $fields);
    }
    
    fclose($fp);
    

  • 我认为使用正则表达式并不是最好的解决方案:我应该这样做:

  • 首先,您需要浏览csv:

    $handle = fopen("test.csv", "r")
    
  • 通过数据映射

    $data = fgetcsv($handle, 1000, ",") 
    
  • 从已存在的带有所需字段的$data创建新的标头和数组

  • 将新数据放入新的csv

    $fp = fopen('file.csv', 'w');
    
    foreach ($data as $fields) {
        fputcsv($fp, $fields);
    }
    
    fclose($fp);
    

  • 您可以为此使用ConvertRecord。向CSVReader提供完整的模式,并在模式中仅提供要向CSVRecordSetWriter提供的字段。如果您不知道输入模式(但您知道它至少包含要发送的字段),您可以让读取器使用Header中的字符串字段,这将创建一个输入模式(使用Header行),并假设所有字段都是字符串。但是,输出模式将包含所选字段及其类型,ConvertRecord将处理其他字段的“删除”,以及每个所选字段从字符串到所需数据类型的任何转换。

    您可以使用ConvertRecord进行此操作。向CSVReader提供完整的模式,并在模式中仅提供要向CSVRecordSetWriter提供的字段。如果您不知道输入模式(但您知道它至少包含要发送的字段),您可以让读取器使用Header中的字符串字段,这将创建一个输入模式(使用Header行),并假设所有字段都是字符串。但是,输出模式将包含所选字段及其类型,ConvertRecord将处理其他字段的“删除”,以及从字符串到每个选定字段所需数据类型的任何转换。

    使用哪个处理器?此代码适用于PHPI有没有任何方法可以在NiFi中实现?我想你可以。请看这个,并遵循CSVReader docs使用哪个处理器?这段代码是为PHPI编写的,我可以用NiFi实现吗?我想你可以。请查看此内容并遵循CSVReader文档。谢谢!这就解决了我的问题:)@mattyb你能提到CSVRecordSetWriter中的哪个字段要修改以只选择特定的列吗?它将是输出模式,但这是指定的。如果它在Schema Text属性中,您只需要包含您想要输出的字段,其余字段将被忽略。谢谢!这就解决了我的问题:)@mattyb你能提到CSVRecordSetWriter中的哪个字段要修改以只选择特定的列吗?它将是输出模式,但这是指定的。如果它位于Schema Text属性中,则只包含那些要输出的字段,其余字段将被忽略。