0
我有一个要求,我需要从Oracle数据库快速获取数千万的记录,把每个记录成JSON格式的最终饲料中Elasticsearch饲料所取得的数据它在Elasticsearch中。
从数据库抓取到Elasticsearch喂食的整个过程,最好的方法是什么?如何获取的记录数千万快捷,使用Java
我有一个要求,我需要从Oracle数据库快速获取数千万的记录,把每个记录成JSON格式的最终饲料中Elasticsearch饲料所取得的数据它在Elasticsearch中。
从数据库抓取到Elasticsearch喂食的整个过程,最好的方法是什么?如何获取的记录数千万快捷,使用Java
TL; DR:使用logstash,读到它here
加长版:你应该找到自己一个兼容JDBC驱动程序,然后告诉logstash在哪里可以找到你的表。从上面的页面的例子是PostgreSQL的,但方法是一样的:
所以从该页面直接:
create table contacts (
uid serial,
email VARCHAR(80) not null,
first_name VARCHAR(80) NOT NULL,
last_name VARCHAR(80) NOT NULL
);
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'Jim', 'Smith');
INSERT INTO contacts(email, first_name, last_name) VALUES(null, 'John', 'Smith');
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'Carol', 'Smith');
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'Sam', null);
如果我们要插入表中,我们可以用这个配置这样做:
# file: simple-out.conf
input {
jdbc {
# Postgres jdbc connection string to our database, mydb
jdbc_connection_string => "jdbc:postgresql://localhost:5432/mydb"
# The user we wish to execute our statement as
jdbc_user => "postgres"
# The path to our downloaded jdbc driver
jdbc_driver_library => "/path/to/postgresql-9.4-1201.jdbc41.jar"
# The name of the driver class for Postgresql
jdbc_driver_class => "org.postgresql.Driver"
# our query
statement => "SELECT * from contacts"
}
}
output {
stdout { codec => json_lines }
}
,并调用它像这样:
logstash-1.5.3/bin/logstash -f simple-out.conf Logstash startup
更多的例子可有
我想用Logstash的,但事实证明,该工具无法处理嵌套的对象即转向表(扁平结构)转换成JSON状结构 –
我真的不知道你的意思。至少在我看来,弹性搜索的大多数用法是采用嵌套结构(例如关系数据库)并将其转变为平面结构(表示为JSON部分的文档列表)。但这可能只是一种语言/命名的事情。我仍然试着像上面那样修复它,所以把你的完整结果放在一行中,如果可能的话,把它做成映射。如果你有一个一对多的关系,而且行数不可预测,那么你运气不好,你只需要编写一些创建文档的代码,并且我猜想调用'_bulk'。 – Nanne
我明白你的观点。但是,你将如何摆脱源自RDB的数据的嵌套结构?我相信只要数据来自RDB,那么表 –