2014-12-17 2 views
4

logstash를 통해 CSV 파일에서 elasticsearch로 데이터를 공급하려고합니다. 이러한 csv 파일에는 첫 번째 행이 열 이름으로 포함됩니다. 파일을 구문 분석하는 동안 해당 행을 건너 뛰는 특별한 방법이 있습니까? 예외의 경우에는 다음 행으로 건너 뛸 수 있도록 사용할 수있는 조건부/필터가 있습니까 ??logstash를 사용하여 CSV 파일의 선택적 구문 분석

내 설정 파일은 다음과 같습니다 내 csv 파일의

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 
    } 
} 

처음 몇 행은 내가 첫 번째 줄을 건너 뛸 수 어쨌든 거기

"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이 2 행 사이의 빈 행인 경우 어떻게 새 행을 건너 뛸 수 있습니까?

답변

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 파일이 개행 문자로 끝나거나 2 행 사이에 빈 행이있는 경우이를 건너 뛰는 방법은 무엇입니까? –

+0

안녕하세요, 이전에 살펴본 내용이 아닙니다. 새로운 질문을 열어 두는 것이 좋습니다. – Rumbles

+0

나를 위해 잘되었습니다. – Gman