我有一个csv,其中一列可能包含多行值。
ID,Name,Address
1, ABC, "Line 1
Line 2
Line 3"
根据我的知识,以上根据CSV标准编写的数据是一条记录。
我有以下用于logstash的过滤器
filter {
csv {
separator => ","
quote_char => "\""
columns => ["ID","Name", "Address"]
}
}
output {
elasticsearch {
host => "localhost"
port => "9200"
index => "TestData"
protocol => "http"
}
stdout {}
}
但是当我执行它时,它会创建三个记录。 (原则上都是错误的,因为前一个包含两个列数据ID和Name以及Address的部分数据,接下来的两个记录包含第2行和第3行,但没有ID和Name
我怎样才能解决这个问题?我在文件解析中丢失了什么吗?
最佳答案
您尝试过multiline codec吗?
您应该在输入插件中添加以下内容:
codec => multiline {
pattern => "^[0-9]"
negate => "true"
what => "previous"
}
它告诉logstash,每个不以数字开头的行都应与前一行合并
关于elasticsearch - 使用Logstash在ElasticSearch中加载CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303531/