通过Logstash将 CSV 文档到 Elasticsearch

准备文件cars.csv

 

将csv文件导入elasticsearch

logstash_cars.config 文件的内容如下:

input {
    file {
        path => "/Users/liuxg/data/cars.csv"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
 
filter {
    csv {
        separator => ","
 
        columns => [ "maker", "model", "mileage", "manufacture_year", "engine_displacement",
        "engine_power", "body_type", "color_slug", "stk_year", "transmission", "door_count",
        "seat_count", "fuel_type", "date_created", "date_last_seen", "price_eur" ]
    }
 
    mutate { convert => ["mileage", "integer"] }
    mutate { convert => ["price_eur", "float"] }
    mutate { convert => ["engine_power", "integer"] }
    mutate { convert => ["door_count", "integer"] }
    mutate { convert => ["seat_count", "integer"] }
}
 
output {
    elasticsearch {
        hosts => "localhost:9200"
        index => "cars"
        document_type => "sold_cars"
    }
 
    stdout {}
}

这里有几点需要说明的:

  • 在 input 中,我们定义了一个文件,它的path指向我们的 csv 文件的位置。start_position 指向beginning。如果对于一个实时的数据源来说,它通常是 ending,这样表示它每次都是从最后拿到那个数据。sincedb_path 通常指向一个文件。这个文件保存上次操作的位置。针对我们的情况,我们设置为 /dev/null,表明,我们不存储这个数据
  • 在 filter 中,CSV filter 是非常直接的,不太需要很多的解释。这里的 column 都来自于我们的 csv 表格。通常 Logstash 会把每个数据都当做是字符串。针对我们的情况,我们可看到 mileage 是一个整型数,price_eur 是一个浮点数。这些我们都需要进行调整。这个调整我们可以通过 mutate 来完成
  • 在 output 之中,我们制定本地的 Elasticsearch 为我们的数据库,它的 index 是 cars,同时 document_type 为_doc。我们也同时使用 stdout,这样我们可以在terminal屏幕中看出数据在处理之中

 

posted @ 2021-01-28 11:42  fat_girl_spring  阅读(325)  评论(0编辑  收藏  举报