如何解析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
并配置了CSVRecordReader
和CSVSetRecordWriter
到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
我需要解释和解析内容以逗号分隔的日志文件。日志文件的内容如下所示。文件中没有 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
并配置了CSVRecordReader
和CSVSetRecordWriter
到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