乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      五分鐘爆改,把你的JSON/CSV文件打造成MySQL數(shù)據(jù)庫

       再見如初見01 2021-01-31

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

      軟件開發(fā)過程中,你是否有時候,會拿著業(yè)務(wù)提供的一個個CSV或者JSON的數(shù)據(jù)文件,寫個解析程序,把它們存到數(shù)據(jù)庫里,再在自己的程序里通過數(shù)據(jù)庫讀出來?

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

      今天,我們一起來「爆改」JSON/CSV這類文件,把它們打造成 MySQL一樣的關(guān)系型數(shù)據(jù)庫,一套SQL查詢走天下。:-)

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

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

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

      簡單介紹的話,它是個數(shù)據(jù)庫查詢和優(yōu)化的引擎,不負責(zé)具體的存儲。

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

      第二步:添加配置文件

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

      改造的配置文件,就像行軍打仗的地圖一樣,來告訴我們往哪走,這里的配置文件,對應(yīng)到關(guān)系型數(shù)據(jù)庫里,就像是哪個庫,哪些表一樣。

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

      其中schemas 表示都有哪些數(shù)據(jù)庫, defaultSchema 當(dāng)然是默認數(shù)據(jù)庫了。factory 表示當(dāng)前的數(shù)據(jù)文件,我們使用哪種Schema的形式進行解析。因為 Calcite 可以支持多種數(shù)據(jù)格式,通過這個圖你也能感受到幾分吧。


      第三步:JDBC Style

      通過 JDBC 的形式就能連接到我們自己的數(shù)據(jù)庫查詢了。代碼和一般的JDBC類似,區(qū)別只在于連接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 等所有的標(biāo)準SQL。


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

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

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多