代码之家  ›  专栏  ›  技术社区  ›  woshitom

logstach:jdbc\u page\u size不会将所有数据转储到弹性搜索

  •  7
  • woshitom  · 技术社区  · 7 年前

    => select count(*) from tom_test2;
     count  
    --------
     176805
    (1 row)
    

    以下logstach conf文件将我的数据正确导入弹性搜索:

    input {
        jdbc {
            # Postgres jdbc connection string to our database, mydb
            jdbc_connection_string => "xxx"
            # The user we wish to execute our statement as
            jdbc_user => "xxx"
            jdbc_password => "xxx"
            # The path to our downloaded jdbc driver
            jdbc_driver_library => "xxx"
            # The name of the driver class for Postgresql
            jdbc_driver_class => "org.postgresql.Driver"
            # our query
            statement => "select * from tom_test2"
        }
    }
    
    
    output {
        elasticsearch {
            hosts => ["xxx"]
            index => "tom"
            document_type => "tom_test"
        }
    }
    

    GET tom/tom_test/_search
    
      "hits": {
        "total": 176805,
        "max_score": 1,
    }
    

    我正在弹性搜索中删除索引:

    delete tom
    

    我现在想使用jdbc\u page\u size执行相同的操作,如果我的数据变大,我的logstach conf文件现在是:

    input {
        jdbc {
            # Postgres jdbc connection string to our database, mydb
            jdbc_connection_string => "xxx"
            # The user we wish to execute our statement as
            jdbc_user => "xxx"
            jdbc_password => "xxx"
            # The path to our downloaded jdbc driver
            jdbc_driver_library => "xxx"
            # The name of the driver class for Postgresql
            jdbc_driver_class => "org.postgresql.Driver"
            # our query
            statement => "select * from tom_test2"
    
            jdbc_page_size => 1000
            jdbc_paging_enabled => true
        }
    }
    
    
    output {
        elasticsearch {
            hosts => ["xxx"]
            index => "tom"
            document_type => "tom_test"
        }
    }
    

    GET tom/tom_test/_search
    
      "hits": {
        "total": 106174,
        "max_score": 1,
    }
    

    由于176805-106174=70631行缺失

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ilya Dyoshin    7 年前

    要么在声明中添加顺序 SELECT * FROM tom_test2 ORDER BY id 并分页您的数据。但请注意:在这种情况下,您上传到elasticsearch将无法确保此时表的精确副本。其原因是,在后续分页请求的日志存储处理过程中,引入了下一页中的数据更新,即您正在上传第1页到10000页的数据,更新发生在第10001页和第20000页上的数据,然后。。。因此,您的数据的一致性存在问题。

    jdbc_fetch_size 参数:即,您正在执行相同的操作 SELECT * FROM tom_test2 . 使用这种方法,您将创建单个查询结果集,但会将其“泵送”成碎片,并且在“泵送”期间的数据修改不会导致您:您将在查询开始时获取状态。

        2
  •  1
  •   mjalil    7 年前

    jdbc_page_size 正如在 documentation of jdbc_paging_enabled

    我建议使用 jdbc_fetch_size 而不是使用 jdbc\u页面大小 documentation also says that

    P、 S:有时;)询问您的问题 http://discuss.elastic.co 由弹性维护者更好地回答