五分钟爆改,把你的JSON/CSV文件打造成MySQL数据库

数据库 MySQL
生活中,你我一定都看到过这种「xx元爆改出租屋」,「爆改小汽车」之类的文章,做为IT人,折腾的劲头一点也不差。

 [[373351]]

生活中,你我一定都看到过这种「xx元爆改出租屋」,「爆改小汽车」之类的文章,做为IT人,折腾的劲头一点也不差。

软件开发过程中,你是否有时候,会拿着业务提供的一个个CSV或者JSON的数据文件,写个解析程序,把它们存到数据库里,再在自己的程序里通过数据库读出来?

其实不用这么麻烦,还绕了一个大圈。

今天,我们一起来「爆改」JSON/CSV这类文件,把它们打造成 MySQL一样的关系型数据库,一套SQL查询走天下。:-)

第一步:代码里加入Maven依赖

  1. <dependency> 
  2.       <groupId>org.apache.calcite</groupId> 
  3.       <artifactId>calcite-file</artifactId> 
  4.       <version>1.21.0</version> 
  5.     </dependency> 

通过这一步,你大概就看出来,咱们今天的爆改,主要依赖 Calcite,这个Apache的顶级项目。

来张官网截图感受下:

简单介绍的话,它是个数据库查询和优化的引擎,不负责具体的存储。

所以介绍里人家自己也说了,是你高性能数据库的地基。许多的开源项目是基于它做的,比如大名鼎鼎的这些:

第二步:添加配置文件

配置的JSON 文件,一般是下面这样子:

改造的配置文件,就像行军打仗的地图一样,来告诉我们往哪走,这里的配置文件,对应到关系型数据库里,就像是哪个库,哪些表一样。

  1.   "version""1.0"
  2.   "defaultSchema""SALES"
  3.   "schemas": [ 
  4.     { 
  5.       "name""SALES"
  6.       "type""custom"
  7.       "factory""org.apache.calcite.adapter.file.FileSchemaFactory"
  8.       "operand": { 
  9.         "directory""sales" 
  10.       } 
  11.     } 
  12.   ] 

其中schemas 表示都有哪些数据库, defaultSchema 当然是默认数据库了。factory 表示当前的数据文件,我们使用哪种Schema的形式进行解析。因为 Calcite 可以支持多种数据格式,通过这个图你也能感受到几分吧。

第三步:JDBC Style

通过 JDBC 的形式就能连接到我们自己的数据库查询了。代码和一般的JDBC类似,区别只在于连接URL的写法上,需要将配置文件的位置声明一下。

  1. public class Demo { 
  2.     public static void main(String[] args) throws SQLException, ClassNotFoundException { 
  3.         Class.forName("org.apache.calcite.jdbc.Driver"); 
  4.         Properties config = new Properties(); 
  5.         config.put("model""./src/main/resources/model.json"); 
  6.         String sql = "select * from hello"
  7.  
  8.         try (Connection con = DriverManager.getConnection("jdbc:calcite:", config)) { 
  9.             try (Statement stmt = con.createStatement()) { 
  10.                 ResultSet rs = stmt.executeQuery(sql); 
  11.                 while (rs.next()) { 
  12.                     System.out.println(rs.getString(2)); 
  13.                 } 
  14.             } 
  15.         } 
  16.     } 

其中SQL 语句,可以支持条件过滤,join 等所有的标准SQL。

整体项目结构如下:

PS: 忘了提一句,对于CSV文件,第一行需要将各列列名和类型加上,表示数据库表里定义的列。

你说我很忙,不想啰哩啰嗦再写个Java程序,办法也还有。有个程序叫 sqlline,可以方便你在命令行里执行,一个脚本连接到对应的文件数据库之后,就开始你飞一般的SQL表演吧。

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

本文转载自微信公众号「Tomcat那些事儿」,可以通过以下二维码关注。转载本文请联系Tomcat那些事儿公众号。

 

责任编辑:武晓燕 来源: Tomcat那些事儿
相关推荐

2009-11-20 18:08:37

Oracle数据库

2009-11-02 18:07:58

Oracle数据库

2018-06-26 09:37:07

时序数据库FacebookNoSQL

2009-11-20 17:06:49

Oracle数据库字符

2023-04-15 20:33:35

图形数据库数据库

2024-12-04 16:12:31

2023-07-30 10:09:36

MMD数据库

2019-11-20 10:38:59

MySQLSQL数据库

2023-12-30 13:41:39

JSON格式数据

2021-11-11 15:03:35

MySQLSQL索引

2021-11-07 23:46:32

MySQLSQL索引

2022-03-08 08:39:22

gRPC协议云原生

2009-11-05 10:56:31

WCF通讯

2021-11-08 18:37:45

MySQL解码测试

2019-06-24 06:17:38

2022-03-14 15:06:15

数据战略Cloudera混合云

2024-04-28 12:55:46

redis频道机制

2023-08-15 14:54:02

数据库容灾

2015-12-03 14:10:26

systemd容器Linux

2009-11-16 11:30:55

PHP上传文件代码
点赞
收藏

51CTO技术栈公众号