五分鐘爆改,把你的JSON/CSV文件打形成MySQL數據庫


生活中,你我必定都看到過這種「xx元爆改出租屋」,「爆改小汽車」之類的文章,作爲IT人,折騰的勁頭一點也不差。web

軟件開發過程當中,你是否有時候,會拿着業務提供的一個個CSV或者JSON的數據文件,寫個解析程序,把它們存到數據庫裏,再在本身的程序裏經過數據庫讀出來?sql

其實不用這麼麻煩,還繞了一個大圈。shell

今天,咱們一塊兒來「爆改」JSON/CSV這類文件,把它們打形成 MySQL同樣的關係型數據庫,一套SQL查詢走天下。:-)數據庫


第一步:代碼里加入Maven依賴

 <dependency> <groupId>org.apache.calcite</groupId> <artifactId>calcite-file</artifactId> <version>1.21.0</version> </dependency>


經過這一步,你大概就看出來,我們今天的爆改,主要依賴 Calcite,這個Apache的頂級項目。apache

來張官網截圖感覺下:json


簡單介紹的話,它是個數據庫查詢和優化的引擎,不負責具體的存儲。
tomcat

因此介紹里人家本身也說了,是你高性能數據庫的地基。許多的開源項目是基於它作的,好比大名鼎鼎的這些:微信



第二步:添加配置文件


配置的JSON 文件,通常是下面這樣子:app

改造的配置文件,就像行軍打仗的地圖同樣,來告訴咱們往哪走,這裏的配置文件,對應到關係型數據庫裏,就像是哪一個庫,哪些表同樣。ide

{ "version": "1.0", "defaultSchema": "SALES", "schemas": [ { "name": "SALES", "type": "custom", "factory": "org.apache.calcite.adapter.file.FileSchemaFactory", "operand": { "directory": "sales" } } ]}


其中schemas 表示都有哪些數據庫, defaultSchema 固然是默認數據庫了。factory 表示當前的數據文件,咱們使用哪一種Schema的形式進行解析。由於 Calcite 能夠支持多種數據格式,經過這個圖你也能感覺到幾分吧。


第三步:JDBC Style

經過 JDBC 的形式就能鏈接到咱們本身的數據庫查詢了。代碼和通常的JDBC相似,區別只在於鏈接URL的寫法上,須要將配置文件的位置聲明一下。

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";
try (Connection con = DriverManager.getConnection("jdbc:calcite:", config)) { try (Statement stmt = con.createStatement()) { ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { System.out.println(rs.getString(2)); } } } }}


其中SQL 語句,能夠支持條件過濾,join 等全部的標準SQL。

總體項目結構以下:



PS: 忘了提一句,對於CSV文件,第一行須要將各列列名和類型加上,表示數據庫表裏定義的列。


你說我很忙,不想囉哩囉嗦再寫個Java程序,辦法也還有。有個程序叫 sqlline,能夠方便你在命令行裏執行,一個腳本鏈接到對應的文件數據庫以後,就開始你飛通常的SQL表演吧。

sqlline> !connect jdbc:calcite:model=src/main/resources/model.json admin admin



Have fun!


幫忙在看轉發扶我一把吧,感謝。


近期文章

Sentinel 是怎樣攔截異常流量的?

JVM:有些內部信息我悄悄告訴你

快放開那些搗亂的猴子!

Java七武器系列孔雀翎-- 問題診斷神器BTrace

Java七武器系列長生劍 -- Java虛擬機的顯微鏡 Serviceability Agent

寫代碼效率不高?放過Ctrl C 和 V,讓AI來能幫你寫代碼吧

怎樣閱讀源代碼?




這裏是「Tomcat那些事兒」,關注源碼|實戰|成長等話題,歡迎關注,一塊兒成長。


本文分享自微信公衆號 - Tomcat那些事兒(tomcat0000)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索