首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Logstash-JDBC插件:将数百万条记录从Oracle导入到ElasticSearch

Logstash-JDBC插件:将数百万条记录从Oracle导入到ElasticSearch
EN

Stack Overflow用户
提问于 2016-06-27 18:47:57
回答 3查看 6.7K关注 0票数 5

场景:-我正在尝试从Oracle (几百万个记录)导入一个大型数据集到ElasticSearch中。-我能够使用logstash输入插件导入数据。

发布:-它需要很长时间(5小时)才能完成。

  • 有没有更好的办法来减少这一次?在这种情况下的良好做法
EN

回答 3

Stack Overflow用户

发布于 2016-06-27 19:01:59

您可以首先使用jdbc_fetch_size,下一步是在几个节点上运行导入,因为每个节点将sql查询拆分为不重叠的集合,如select * from XX where id between 0 and 1000000

您还可以在索引大容量之前将ES索引副本的数量设置为0,然后再将其更改。当然,使用批量索引API具有良好的批处理大小和并行性。

票数 4
EN

Stack Overflow用户

发布于 2017-10-19 08:36:59

您可以使用

:sql_last_value

选项可以使用调度程序增量地从数据库中获取数据。像下面这样的东西会有帮助。(假设您有一个ID字段)

代码语言:javascript
复制
input {
   jdbc {
      jdbc_connection_string => "jdbc:oracle:thin:IP:PORT:SID"
      jdbc_user => "user"
      jdbc_password => "password"
      jdbc_driver_library => ".......\ojdbc8.jar"
      jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
      statement => "select * from (select * from TABLE where id >= :sql_last_value ORDER BY id ASC) rownum < 20"
      use_column_value => true
      tracking_column => id
      tracking_column_type => "numeric"
      schedule => "* * * * *"
  } 

}

update: Refactored使用rownumORDER BY按照预定的顺序限制结果(在限制之前进行排序)。请参阅:https://blogs.oracle.com/oraclemagazine/on-rownum-and-limiting-results

使用分页可以获得相同的结果,但它存在性能问题。如果我们使用分页前:

代码语言:javascript
复制
input {
   jdbc {
      jdbc_connection_string => "jdbc:oracle:thin:IP:PORT:SID"
      jdbc_user => "user"
      jdbc_password => "password"
      jdbc_driver_library => ".......\ojdbc8.jar"
      jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
      jdbc_page_size => 20
      jdbc_paging_enabled => true
      statement => "select * from TABLE"
  } 
}

但是这个会被包裹

“从表中选择*”

喜欢

选择* from (选择"T1".*,ROWNUM "X_SEQUEL_ROW_NUMBER_X“从(SELECT * FROM (SELECT * FROM ) "T1") "T1") "T1”其中("X_SEQUEL_ROW_NUMBER_X“> 0)和(”X_SEQUEL_ROW_NUMBER_X“<= (0 +20));

并将通过根据指定的jdbc_page_size (本例中为20)除以查询来运行,而不需要调度程序。但这种方法显然存在性能问题。

票数 2
EN

Stack Overflow用户

发布于 2017-02-13 10:32:19

您可以在同一个配置文件中放置更多的jdbc输入插件。我觉得挺好的。

即:

输入{ jdbc {.}

代码语言:javascript
复制
   jdbc {
       ...
      }

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38061128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档