|
生活中,你我一定都看到過(guò)這種「xx元爆改出租屋」,「爆改小汽車(chē)」之類(lèi)的文章,做為IT人,折騰的勁頭一點(diǎn)也不差。 軟件開(kāi)發(fā)過(guò)程中,你是否有時(shí)候,會(huì)拿著業(yè)務(wù)提供的一個(gè)個(gè)CSV或者JSON的數(shù)據(jù)文件,寫(xiě)個(gè)解析程序,把它們存到數(shù)據(jù)庫(kù)里,再在自己的程序里通過(guò)數(shù)據(jù)庫(kù)讀出來(lái)? 其實(shí)不用這么麻煩,還繞了一個(gè)大圈。 今天,我們一起來(lái)「爆改」JSON/CSV這類(lèi)文件,把它們打造成 MySQL一樣的關(guān)系型數(shù)據(jù)庫(kù),一套SQL查詢(xún)走天下。:-) 第一步:代碼里加入Maven依賴(lài) <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-file</artifactId> <version>1.21.0</version> </dependency> 通過(guò)這一步,你大概就看出來(lái),咱們今天的爆改,主要依賴(lài) Calcite,這個(gè)Apache的頂級(jí)項(xiàng)目。 簡(jiǎn)單介紹的話(huà),它是個(gè)數(shù)據(jù)庫(kù)查詢(xún)和優(yōu)化的引擎,不負(fù)責(zé)具體的存儲(chǔ)。 所以介紹里人家自己也說(shuō)了,是你高性能數(shù)據(jù)庫(kù)的地基。許多的開(kāi)源項(xiàng)目是基于它做的,比如大名鼎鼎的這些: 第二步:添加配置文件 配置的JSON 文件,一般是下面這樣子: 改造的配置文站長(zhǎng)交易件,就像行軍打仗的地圖一樣,來(lái)告訴我們往哪走,這里的配置文件,對(duì)應(yīng)到關(guān)系型數(shù)據(jù)庫(kù)里,就像是哪個(gè)庫(kù),哪些表一樣。 { "version": "1.0", "defaultSchema": "SALES", "schemas": [ { "name": "SALES", "type": "custom", "factory": "org.apache.calcite.adapter.file.FileSchemaFactory", "operand": { "directory": "sales" } } ]} 其中schemas 表示都有哪些數(shù)據(jù)庫(kù), defaultSchema 當(dāng)然是默認(rèn)數(shù)據(jù)庫(kù)了。factory 表示當(dāng)前的數(shù)據(jù)文件,我們使用哪種Schema的形式進(jìn)行解析。因?yàn)?Calcite 可以支持多種數(shù)據(jù)格式,通過(guò)這個(gè)圖你也能感受到幾分吧。
通過(guò) JDBC 的形式就能連接到我們自己的數(shù)據(jù)庫(kù)查詢(xún)了。代碼和一般的JDBC類(lèi)似,區(qū)別只在于連接URL的寫(xiě)法上,需要將配置文件的位置聲明一下。 public class Demo { public static void main(String[] args) throws SQLException, ClassNotFoundException { Class.forName("org.apache.calcite.jdbc.Driver"); Properties config = new Properties(); config.put("model", "./src/main/resources/model.json"); String sql = "select * from hello";
sqlline> !connect jdbc:calcite:model=src/main/resources/model.json admin admin |
|
|