【问题标题】:jdbc_static: Getting a sql syntax error I did'nt writejdbc_static:得到一个我没有写的 sql 语法错误
【发布时间】:2019-07-03 08:40:26
【问题描述】:

我正在尝试使用 logstash 提取一些表,在 logstash mashine 上本地转换它们,然后将结果加载到 ElasticSearch。采用这种解决方案的原因是源服务器 MariaDB 上的计算能力非常有限。

  • 我已经单独测试了输入{},它可以工作,因此与 mariadb 的连接是可靠的。

  • 我已经针对 microsoftSQL 服务器测试了 jdbc_static 过滤器。所以logstash在当前环境下是有写权限的。

  • 我已经直接在 MariaDB 服务器上测试了 SQL 语法

  • 我正在运行 logstash 6.8 和 java 8(java 版本“1.8.0_211”)

  • 我已经尝试过早期版本的 mariadb jdbc 连接 (mariadb-java-client-2.4.2.jar, mariadb-java-client-2.2.6-sources, mariadb-java-client-2.3.0-sources)

我的配置文件

input {
  jdbc {

    jdbc_driver_library => "C:/Logstash/logstash-6.8.0/plugin/mariadb-java-client-2.4.2.jar"
    jdbc_driver_class => "Java::org.mariadb.jdbc.Driver"

    jdbc_connection_string => "jdbc:mariadb://xx.xx.xx
    jdbc_user => "me"
    jdbc_password => "its secret"

    schedule => "* * * * *"
    statement => "SELECT unqualifiedversionid__ FROM   AuditEventFHIR WHERE myUnqualifiedId = '0000134b-fc7f-4c3a-b681-8150068d6dbb'"

  }
}
filter {
   jdbc_static {
        loaders => [ 
          {
            id => "auditevent"
            query => "SELECT  
                    myUnqualifiedId
                    ,unqualifiedversionid__
                    ,type_
                    FROM AuditEventFHIR
                    where myUnqualifiedId = '0000134b-fc7f-4c3a-b681-8150068d6dbb'
                    "
            local_table => "l_ae"
          } 
        ]

        local_db_objects => [ 

          {
            name => "l_ae"
            index_columns => ["myUnqualifiedId"]
            columns => [
              ["myUnqualifiedId", "varchar(256)"],
              ["unqualifiedversionid__", "varchar(24)"],
              ["type_", "varchar(256)"]
            ]
          }

        ]

        local_lookups => [ 
          {
            id => "rawlogfile"
            query => "
               select myUnqualifiedId from l_ae
                "  
            target => "sql_output"
          }
        ]

        jdbc_driver_library => "C:/Logstash/logstash-6.8.0/plugin/mariadb-java-client-2.4.2.jar"
        jdbc_driver_class => "Java::org.mariadb.jdbc.Driver"     
        jdbc_connection_string => "jdbc:mariadb://xx.xx.xx.xx"
        jdbc_user => "me"
        jdbc_password => "its secret"
        }
}


output {
    stdout { codec => rubydebug }
}

我遇到了这个错误和其他几个错误,但我怀疑修复第一个错误将修复其余错误。但关键是我的代码中没有“LIMIT 1”这个词

[ERROR][logstash.filters.jdbc.readonlydatabase] Exception occurred when executing loader Jdbc query count {:exception=>"Java::JavaSql::SQLSyntaxErrorException: (conn=1490) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\"T1\" LIMIT 1' at line 8", :backtrace=>["org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(org/mariadb/jdbc/internal/util/exceptions/ExceptionMapper.java:242)", "org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(org/mariadb/jdbc/internal/util/exceptions/ExceptionMapper.java:171)", "org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(org/mariadb/jdbc/MariaDbStatement.java:248)", "org.mariadb.jdbc.MariaDbStatement.executeInternal(org/mariadb/jdbc/MariaDbStatement.java:338)", "org.mariadb.jdbc.MariaDbStatement.executeQuery(org/mariadb/jdbc/MariaDbStatement.java:512)", "java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:498)", "org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(org/jruby/javasupport/JavaMethod.java:425)", "org.jruby.javasupport.JavaMethod.invokeDirect(org/jruby/javasupport/JavaMethod.java:292)"]}

【问题讨论】:

    标签: logstash logstash-configuration logstash-jdbc


    【解决方案1】:

    jdbc_static 加载器在下载表时进行隐藏 SQL 查询select count(*) from table limit 1 以获取校验和。此查询包含 " 并且 mariaDB 不喜欢那样。

    除非您将“ANSI_QUOTES”添加到 sql_mode

    批处理命令

    SET GLOBAL sql_mode = 'ANSI_QUOTES'
    

    另一个选项是将会话设置为允许 ansi_quotes

    jdbc_connection_string => "jdbc:mariadb://xx.xx.xx/databasename?sessionVariables=sql_mode=ANSI_QUOTES"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多