2014-12-17 2 views
4

Я пытаюсь передать данные в elasticsearch из csv-файлов через logstash. Эти файлы csv содержат первую строку в качестве имен столбцов. Есть ли какой-либо конкретный способ пропустить эту строку при разборе файла? Существуют ли какие-либо условные обозначения/фильтры, которые я мог бы использовать, чтобы в случае исключения он пропустил следующую строку?Селективный синтаксический анализ файла csv с помощью logstash

мой конфигурационный файл выглядит следующим образом:

input { 
     file { 
      path => "/home/sagnik/work/logstash-1.4.2/bin/promosms_dec15.csv" 
      type => "promosms_dec15" 
      start_position => "beginning" 
      sincedb_path => "/dev/null" 
     } 
} 
filter { 

    csv { 
     columns => ["Comm_Plan","Queue_Booking","Order_Reference","Generation_Date"] 
     separator => "," 
    } 
    ruby { 
      code => "event['Generation_Date'] = Date.parse(event['Generation_Date']);" 
    } 

} 
output { 
    elasticsearch { 
     action => "index" 
     host => "localhost" 
     index => "promosms-%{+dd.MM.YYYY}" 
     workers => 1 
    } 
} 

Первые несколько строк моего файла CSV выглядит

"Comm_Plan","Queue_Booking","Order_Reference","Generation_Date" 
"","No","FMN1191MVHV","31/03/2014" 
"","No","FMN1191N64G","31/03/2014" 
"","No","FMN1192OPMY","31/03/2014" 

Есть в любом случае я мог бы пропустить первую строчку? Кроме того, если мой файл csv заканчивается новой строкой, в ней ничего нет, тогда также я получаю сообщение об ошибке. Как пропустить эти новые строки, если они попадают в конец файла, или если thre является пустой строкой между двумя строками?

ответ

11

простой способ сделать это было бы добавить следующее к фильтру (после того, как CSV-файл, перед тем рубин): ​​

if [Comm_Plan] == "Comm_Plan" { 
    drop { } 
} 

Предполагая, что поле никогда не будет нормально иметь такое же значение, как заголовок столбца, его должны работать, как и следовало ожидать, однако, вы могли бы быть более конкретным, используя:

if [Comm_Plan] == "Comm_Plan" and [Queue_Booking] == "Queue_Booking" and [Order_Reference] == "Order_Reference" and [Generation_Date] == "Generation_Date" { 
    drop { } 
} 

Все это было бы сделать, чтобы проверить, если значение поля было, что особое значение, и если это так, уронить событие.

+0

спасибо за это. Не могли бы вы также рассказать мне, как пропустить пустые строки? Например, если мой файл csv заканчивается символом новой строки или если между двумя строками есть пробелы, как пропустить их? –

+0

Привет, это не то, к чему я уже обращался ранее, я рекомендую вам открыть новый вопрос об этом – Rumbles

+0

отлично работал для меня. – Gman

 Смежные вопросы

  • Нет связанных вопросов^_^