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,那麼表 –