如何解析具有包含分隔符(逗号)作为值的某些字段的 csv 文件
How to parse a csv file which has some field containing seprator (comma) as-values
示例消息 - 111,222,333,444,555,val1in6th,val2in6th,777
第六列包含一个由逗号组成的值(val1in6th,val2in6th是第6列的示例值)。
当我使用简单的 csv 过滤器时,此消息被转换为 8 个字段。我希望能够告诉过滤器 val1in6th,val2in6th 应该被视为单个值并作为第 6 列的值放置(当作为第 6 列的输出放置时,val1in6th 和 val2in6th 之间不要有逗号是可以的)。
更改您的插件,不再是 csv 插件,而是 grok filter
- doc here。
然后你使用调试器为你的行创建一个解析器——就像这样:https://grokdebug.herokuapp.com/
对于你的台词,你可以使用这个 grok 表达式:
%{WORD:FIELD1},%{WORD:FIELD2},%{WORD:FIELD3},%{WORD:FIELD4},%{WORD:FIELD5},%{GREEDYDATA:FIELD6}
或:
%{INT:FIELD1},%{INT:FIELD2},%{INT:FIELD3},%{INT:FIELD4},%{INT:FIELD5},%{GREEDYDATA:FIELD6}
它改变了前 5 个字段的弹性数据类型。
要了解如何在弹性中使用 grok 过滤器解析 csv,您可以使用此 es official blog guide,它解释了如何将 grok 与摄取管道一起使用,但它与 logstash 相同
示例消息 - 111,222,333,444,555,val1in6th,val2in6th,777
第六列包含一个由逗号组成的值(val1in6th,val2in6th是第6列的示例值)。 当我使用简单的 csv 过滤器时,此消息被转换为 8 个字段。我希望能够告诉过滤器 val1in6th,val2in6th 应该被视为单个值并作为第 6 列的值放置(当作为第 6 列的输出放置时,val1in6th 和 val2in6th 之间不要有逗号是可以的)。
更改您的插件,不再是 csv 插件,而是 grok filter
- doc here。
然后你使用调试器为你的行创建一个解析器——就像这样:https://grokdebug.herokuapp.com/
对于你的台词,你可以使用这个 grok 表达式:
%{WORD:FIELD1},%{WORD:FIELD2},%{WORD:FIELD3},%{WORD:FIELD4},%{WORD:FIELD5},%{GREEDYDATA:FIELD6}
或:
%{INT:FIELD1},%{INT:FIELD2},%{INT:FIELD3},%{INT:FIELD4},%{INT:FIELD5},%{GREEDYDATA:FIELD6}
它改变了前 5 个字段的弹性数据类型。
要了解如何在弹性中使用 grok 过滤器解析 csv,您可以使用此 es official blog guide,它解释了如何将 grok 与摄取管道一起使用,但它与 logstash 相同