2016-08-16 6 views
0

나는 logstash를 사용하여 elasticsearch에서 crate.io 로의 파이프 라인을 만듭니다. 아래는 설정입니다.java.sql.SQLException : <field_name>에 대한 유효성 검사에 실패했습니다. 'null'을 double 유형으로 변환 할 수 없습니다.

input{ 
elasticsearch { 
    hosts => "<host_name>:9200" 
    index => "index1" 
    query => '{ "size":10,"query": {"match_all": {} } }' 
    } 
} 
filter{ 
    if!([bench_pose][M_Body_t]) { 
      mutate{ 
        add_field => {"[bench_pose][M_Body_t]" => null} 
      } 
    } 
    if!([bench_pose][M_Jaw_t]) { 
      mutate{ 
        add_field => {"[bench_pose][M_Jaw_t]" => null} 
      } 
    } 
} 
output{ 
jdbc { 
     driver_class => "io.crate.client.jdbc.CrateDriver" 
     driver_auto_commit => false 
     driver_jar_path => "/etc/crate/crate-jdbc-standalone-1.12.3.jar" 
     connection_string => "crate://<host_ip>:4300" 
     statement => ["INSERT INTO table_name(path,bench_pose_m_Body_t,bench_pose_m_jaw_t) VALUES(?,?,?)",'path','%{[bench_pose][M_Body_t]}','%{[bench_pose][M_Jaw_t]}'] 
    } 
} 

소스 객체 데이터 유형이다 필드 'bench_pose'를 갖고, 아래 bench_pose 필드 M_Body_t 및 M_Jaw_t은 double 유형이다. 이 필드는 소스와 대상에서 NULL 가능합니다. 이 필드는 소스의 몇몇. 서에서 널 값을가집니다. 대상 테이블에 NULLable 필드가 있어도 insert 문에서 null 값이있는 문서가 발견되면 아래 오류가 발생합니다.

JDBC - Exception. Not retrying. {:exception=>java.sql.SQLException: Validation failed for bench_pose_m_body_t: 'null' cannot be cast to type double 

필터 플러그인을 제거하면 다음과 같은 오류가 발생합니다.

JDBC - Exception. Not retrying. {:exception=>java.sql.SQLException: Validation failed for bench_pose_m_body_t: '%{[bench_pose][M_Body_t]}' cannot be cast to type double 

삽입에 null 값을 하드 코딩하고 crate sql에서 쿼리를 실행하면 올바르게 실행됩니다. logstash에서이 필드의 null 값을 어떻게 파싱합니까?

+0

DB 필드 'bench_pose_m_body_t'는 (는) NULL 가능합니까? 그렇지 않은 경우에는 mutate 필터에 만들 때 0으로 초기화 할 수 있습니다. – Val

+0

예, bench_pose_m_body_t 필드는 NULL 가능입니다. – ashivan

+0

원본에서 오는 Null 값을 그대로 유지하고 대상으로 구문 분석 할 수 있습니까? – ashivan

답변

2

당신은이에 INSERT 문을 변경해야

statement => ["INSERT INTO table_name(path,benc‌​h_pose_m_Body_t,bench‌​_pose_m_jaw_t) VALUES(?,TRY_CAST(? as double),TRY_CAST(? as double))",'path','%{[bench_pose][M_Body_t]}','%{[bench_pose][M_Jaw_t]}'] 

TRY_CAST 호환되지 않는 유형 캐스트의 경우 오류를 던지는 대신 null를 돌려줍니다.

+0

예, INSERT에 대한 수정이 올바르게 작동합니다. – ashivan

+0

예. 고맙습니다! – ashivan