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

how to parse a csv file in nifi whose field contains a delimited value

我需要解释和解析内容以逗号分隔的日志文件。日志文件的内容如下所示。文件中没有 header 列。为了方便起见,我把它放了。

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并配置了CSVRecordReaderCSVSetRecordWriter到read/interpret数据并将数据分别写入流文件。 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 是否适合在这里使用。任何人都可以帮助我如何阅读 comma-separated 的日志文件,但是,一个或几个字段在文本中有逗号。非常感谢任何帮助。

QueryText 字段值在单引号中 ('),因此请配置您的 CSVRecordReader 属性 Quote Character = ' 默认值为 "

同时设置属性CSV Parser = Jackson CSV