亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

生活中,你我一定都看到過(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)目。

來(lái)張官網(wǎng)截圖感受下:

把JSON/CSV文件打造成MySQL數(shù)據(jù)庫(kù)

 

簡(jiǎn)單介紹的話(huà),它是個(gè)數(shù)據(jù)庫(kù)查詢(xún)和優(yōu)化的引擎,不負(fù)責(zé)具體的存儲(chǔ)。

所以介紹里人家自己也說(shuō)了,是你高性能數(shù)據(jù)庫(kù)的地基。許多的開(kāi)源項(xiàng)目是基于它做的,比如大名鼎鼎的這些:

把JSON/CSV文件打造成MySQL數(shù)據(jù)庫(kù)

 

第二步:添加配置文件

 

配置的JSON 文件,一般是下面這樣子:

改造的配置文件,就像行軍打仗的地圖一樣,來(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è)圖你也能感受到幾分吧。

把JSON/CSV文件打造成MySQL數(shù)據(jù)庫(kù)

 

第三步:JDBC Style

通過(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";


        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 語(yǔ)句,可以支持條件過(guò)濾,join 等所有的標(biāo)準(zhǔn)SQL。

整體項(xiàng)目結(jié)構(gòu)如下:

把JSON/CSV文件打造成MySQL數(shù)據(jù)庫(kù)

 

PS: 忘了提一句,對(duì)于CSV文件,第一行需要將各列列名和類(lèi)型加上,表示數(shù)據(jù)庫(kù)表里定義的列。

把JSON/CSV文件打造成MySQL數(shù)據(jù)庫(kù)

 

你說(shuō)我很忙,不想啰哩啰嗦再寫(xiě)個(gè)JAVA程序,辦法也還有。有個(gè)程序叫 sqlline,可以方便你在命令行里執(zhí)行,一個(gè)腳本連接到對(duì)應(yīng)的文件數(shù)據(jù)庫(kù)之后,就開(kāi)始你飛一般的SQL表演吧。

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

 

把JSON/CSV文件打造成MySQL數(shù)據(jù)庫(kù)

 

Have fun!

作者:Tomcat那些事兒

 

原文:https://my.oschina.net/u/4585957/blog/4875292

分享到:
標(biāo)簽:MySQL
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定