我想将tom_test2 postgresql表导出为弹性搜索。该表有176805行:
=> select count(*) from tom_test2;
count
--------
176805
(1 row)
以下logstach配置文件将我的数据正确导入弹性搜索:
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_page_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行
答案 0 :(得分:0)
你面临这种情况的原因 - 你有订购问题:你的查询并没有控制收到数据的顺序,一般来说postgresql不应该保证在无序的后续寻呼电话中你不会这样做。 t获取相同的数据:这会产生一些情况,当某些数据根本不被提取,并且一些数据将被多次获取:(即使在这些调用期间未修改数据时,后台真空工作者可能会改变顺序物理文件中的数据,从而重现描述的情况。
在您的对帐单SELECT * FROM tom_test2 ORDER BY id
中添加订单并为您的数据分页。但请注意:在这种情况下,您上传到elasticsearch将无法确保表格的精确副本。其原因在于,在后续页面请求的logstash处理期间,在即将到来的页面中引入了数据更新,即您在第1页上传到10000并且更新发生在第10001页和第20000页上的数据,然后是否则...所以你的数据一致性有问题。
或者,如果您想获取所有数据并在logstash上慷慨地使用内存...,那么您需要控制jdbc_fetch_size
参数:即您执行相同的SELECT * FROM tom_test2
。使用这种方法,您将创建一个查询结果集,但是" pump"在你的"抽水"不会导致你:你将在查询开始时获取状态。
答案 1 :(得分:0)
因为jdbc_page_size
中的jdbc_page_size
中的查询之间的排序无法保证为documentation of jdbc_paging_enabled
中的警告。
我建议使用jdbc_fetch_size
而不是UserName nvarchar(50)
作为documentation also says that用于大型结果集。
P.S:有时;)在http://discuss.elastic.co询问你的问题,弹性维护者可以更好地回答