2017-02-21 43 views
0

我有一個要求,我需要從Oracle數據庫快速獲取數千萬的記錄,把每個記錄成JSON格式的最終​​飼料中Elasticsearch飼料所取得的數據它在Elasticsearch中。
從數據庫抓取到Elasticsearch餵食的整個過程,最好的方法是什麼?如何獲取的記錄數千萬快捷,使用Java

回答

0

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 

更多的例子可有

+0

我想用Logstash的,但事實證明,該工具無法處理嵌套的對象即轉向表(扁平結構)轉換成JSON狀結構 –

+0

我真的不知道你的意思。至少在我看來,彈性搜索的大多數用法是採用嵌套結構(例如關係數據庫)並將其轉變爲平面結構(表示爲JSON部分的文檔列表)。但這可能只是一種語言/命名的事情。我仍然試着像上面那樣修復它,所以把你的完整結果放在一行中,如果可能的話,把它做成映射。如果你有一個一對多的關係,而且行數不可預測,那麼你運氣不好,你只需要編寫一些創建文檔的代碼,並且我猜想調用'_bulk'。 – Nanne

+0

我明白你的觀點。但是,你將如何擺脫源自RDB的數據的嵌套結構?我相信只要數據來自RDB,那麼表 –