首页 > 解决方案 > 具有多个表和 where 条件的 Logstash jdbc 语句

问题描述

logstash 是否可以从变量/数组执行循环以执行不同表的 jdbc 语句?

我想从多个表中执行这个示例 oracle 查询。

Example: 
strApp = App_A, App_B, App_C, App_D....App_Z
SQL Query: SELECT Count(1) As Count FROM DB." & strApp &"

目前我为每个表使用 1 个 jdbc 输入,这导致查询代码很长

input {
    jdbc {
    jdbc_driver_library => "/usr/share/logstash/custom/ojdbc8.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@<url>:<port>:<db>"
    jdbc_user => "xxx"
    jdbc_password => "xxx"
    statement => "SELECT  Count(1) As Count FROM DB.App_A"
    type => "App_A"
    codec => "json_lines"
    add_field => { "secret" => "123123" }
    schedule =>  "*/1 * * * *"
    }
    jdbc {
    jdbc_driver_library => "/usr/share/logstash/custom/ojdbc8.jar"
    jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
    jdbc_connection_string => "jdbc:oracle:thin:@<url>:<port>:<db>"
    jdbc_user => "xxx"
    jdbc_password => "xxx"
    statement => "SELECT  Count(1) As Count FROM DB.App_B"
    type => "App_B"
    codec => "json_lines"
    add_field => { "secret" => "123123" }
    schedule =>  "*/1 * * * *"  
    }

    #App_C--> App_Z onwards.....................
}

filter {
}

# Output section
output {
    if [secret] =="123123" {
  stdout {codec => json_lines}
  tcp {
    host => "<url>"
    port => "<port>"
    codec => "json_lines"   
  }
 }
}

有没有办法“简化”代码?由于需要查询的表范围很大。多个WHERE语句如何,也使用相同的概念?

标签: oraclejdbclogstash

解决方案


推荐阅读