如何告诉Elasticsearch从文件的第一行获取列名?

时间:2016-02-07 12:49:33

标签: elasticsearch logstash logstash-grok logstash-configuration logstash-file

我刚开始使用Elasticsearch / logstash。

我有3个不同的文件,共同的ID。每个文件都包含第一行的列名称,例如:

header1,header2,header3,header4
1234,data2,data3,data4
1235,data2,data3,data4
1236,data2,data3,data4

如何告诉Elasticsearch将第一行作为列名?

另外,如何使用文件之间的公共ID在Elastic中进行一些研究,例如q:column=data group by id

3 个答案:

答案 0 :(得分:1)

看起来你有csv数据。 Logstash提供了一个csv过滤器,但它不处理标题行。

有一个新的csv codec,但它已被列为尚未准备好投放。

答案 1 :(得分:1)

从CSV过滤器插件版本 3.0.8 (可能更早)开始,其他答案已过时。现在您可以执行以下操作:

filter { csv { autodetect_column_names => true } }

万一它无法按预期工作,则必须将pipeline.workers: 1添加到您的logstash.yml文件中。

请参阅:https://github.com/logstash-plugins/logstash-filter-csv/issues/65

答案 2 :(得分:0)

您可以在.confgig文件中添加以下提到的代码。您必须在配置文件中明确提及列名。

filter {
csv {
    columns => [
      "YearMonth",
      "ProjectCode",
      "EmpNo",
      "RevenueCreditUnit",
      "Revenue",
      "dtLoad"

    ]
    separator => ","
    remove_field => ["message"]
    }
}

继续搜索,可能有更好的方法。