Apache nifi 如何解析nifi中字段包含分隔值的csv文件

Apache nifi 如何解析nifi中字段包含分隔值的csv文件,apache-nifi,Apache Nifi,我需要解释和解析一个日志文件,其内容由逗号分隔。日志文件的内容如下所示。文件中没有标题列。我把它放在我们方便的地方 Event_TimeStamp, Target_IP, UserName, Source_IP, DatabaseName, Activity, QueryText, Flag 202101xxxx, 10.2.x.x, u1, 172.5.x.x, DB1, Connect,

我需要解释和解析一个日志文件,其内容由逗号分隔。日志文件的内容如下所示。文件中没有标题列。我把它放在我们方便的地方

Event_TimeStamp, Target_IP, UserName, Source_IP, DatabaseName, Activity, QueryText,            Flag
202101xxxx,       10.2.x.x,     u1,   172.5.x.x,    DB1,       Connect,                       ,   0
202101xxxx,       10.2.x.x,     u1,   172.5.x.x,    DB1,       Query,   'select * from table1',   0
202101xxxx,       10.2.x.x,     u1,   172.5.x.x,    DB1,       Query,   'select * from table2',   0
202101xxxx,       10.2.x.x,     u1,   172.5.x.x,    DB1,       Query,   'select colname1,colname2,colname3,colname4 from table1',  0
202101xxxx,       10.2.x.x,     u1,   172.5.x.x,    DB1,       Query,   'select colname1,\'some Stringliteral\' as colname2,colname3,colname4 from table2',  0
202101xxxx,       10.2.x.x,     u1,   172.5.x.x,    DB1,       DisConnect,                    ,   0
我使用了
convertRecord
并分别配置了
CSVRecordReader
CSVSetRecordWriter
来读取/解释数据并将数据写入流文件。CSV读取模式如下所示

{
     "type": "record",
     "namespace": "nifi",
     "name": "db",
     "fields": [
       { "name": "Event_Timestamp", "type": "string" },
       { "name": "SourceIP", "type": "string" },
       { "name": "UserName", "type": "string" },
       { "name": "TargetIP", "type": "string" },
       { "name": "DatabaseName", "type": "string" },
       { "name": "Activity", "type": "string" },
       { "name": "QueryText", "type": "string" },
       { "name": "Flag", "type": "int" },      
     ]
} 
nifi流读取数据失败,因为在设置
CSVRecordReader
时配置的分隔符为“,”(逗号),并且QueryText在文本中也包含逗号。如果我只在新的日志文件中放入前3行并运行流,那么作业就成功了,因为Querytext中不包含任何逗号


我不知道CSVReader是否适合在这里使用。有谁能帮我读一个用逗号分隔的日志文件,但是有一个或几个字段的文本中有逗号。非常感谢您的帮助。

QueryText字段值位于单引号(
)中,因此请配置CSVRecordReader属性
quote Character='
默认值为


同时设置属性
CSV Parser=Jackson CSV

QueryText字段值在单引号(
'
)中,因此配置CSVRecordReader属性
quote Character='
默认值为
同时设置属性
CSV Parser=Jackson CSV
嗨,Vikram,它工作得很好。谢谢。现在,虽然我们在单引号(')中有QueryText字段值,但解决方案已经奏效。如果QueryText字段不包含单引号,并且字段值包含逗号,那么在这种情况下,是否有方法解析CSV文件?如果
QueryText
字段值未包含在任何引号字符中,则CSV解析器将混淆是将逗号视为分隔符还是数据的一部分。在这种情况下,您必须在
ConvertRecord
处理器之前编写自定义清理脚本,以转义逗号属于数据部分,但您的自定义脚本如何知道逗号是分隔符还是数据的一部分呢。因此,生成CSV的源代码应该至少遵守CSV规范的最小规则集。非常感谢Vikram。这回答了我的问题。谢谢你的帮助。