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

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

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

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

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

   org.apache.calcite      calcite-file      1.21.0

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

来张官网截图感受下:

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

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

第二步:添加配置文件

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

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

{  "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!

作者:Tomcat那些事儿

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

语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库相关推荐

  1. 重新打包mysql数据库文件_服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件...

    终于让服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件.分享如下: 1. 环境: windows server 2003 + Apache 2.0 + PHP5 + ...

  2. ubuntu mysql数据储存在哪里_如何更改在Ubuntu下的MySQL数据库存储位置?

    在默认的数据库存储位置下就会有个文件夹mysqldb.要操作数据库首先得停止数据库进程: $sudo /etc/init.d/mysql stop 本文以转移到/home/mysql这个位置为例,下面 ...

  3. 脚本同步mysql数据_windows下数据库文件使用脚本同步到linux下的mysql数据库中

    1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...

  4. linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...

    因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客 ...

  5. C语言实现数据写入文件

    向文件中写入数据(C语言) 在分析数据时,首先要解决数据的保存问题,c中提供了相应的函数来实现将数据写入指定文件中的功能 fopen函数 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有 ...

  6. c语言将数据写入mysql中_用C语言操作MySQL数据库

    先看结构体 ---------------------------------------------- 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql ...

  7. python数据写入表格生成图片_使用Python制作一个GUI界面,将随机生成的姓名存入到Excel文件中...

    前面内容,我们详细介绍了如何使用Python生成一定数量的随机姓名. 生成一些随机姓名 如何用Python生成若干个随机姓名?男女取名有方法,不能千篇一律 之前,也提到过,我们在一些项目中,需要若干个 ...

  8. ruby 查看csv文件_如何使用CSV和Ruby构建终端游戏

    ruby 查看csv文件 by Andrew Bales 通过安德鲁·巴尔斯 如何使用CSV和Ruby构建终端游戏 (How you can build a terminal game with CS ...

  9. Java 将数据写入磁盘并读取磁盘上的文件

    package test; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; i ...

最新文章

  1. 愿...统一沟通...易行天下!
  2. java 基本类型内存_java基本数据类型、内存分析、装包拆包
  3. Discuz X3.1 论坛修改的方法(门户的修改)
  4. Cloud for Customer的前台请求是怎么发送到后台的
  5. 借助Apache Hadoop大规模扩展Apache Solr实时实时索引
  6. linux sybase 自动备份,Linux平台下Sybase数据库备份方法分析.doc
  7. iOS底层探索之对象的本质和类的关联特性initIsa(上)
  8. 相分离和长链非编码RNA之间的故事Paraspeckles: Where Long Noncoding RNA Meets Phase Separation
  9. chrome 打开默认页 被篡改_chrome默认首页被修改如何解决_chrome首页被篡改的处理办法-系统城...
  10. 最短曼哈顿距离(递推+枚举 C++)
  11. 用C#开发的一个通用的地铁换乘查询工具
  12. 快来试试用 Python 将你的照片转化为“速写”
  13. Redis过期策略 实现原理
  14. 图像信息隐藏(索引图象)
  15. DebugView 简单使用
  16. 山东二本计算机排名大学最新,山东二本大学排名最新
  17. dya04 js_02
  18. CTF网络安全比赛简介
  19. 五、K3 WISE 开发插件《直接SQL报表开发新手指导 - BOM成本报表》
  20. C语言经典代码(考试自用)

热门文章

  1. Android studio的设置界面介绍
  2. m.2接口和nvme区别_m.2 nvme和m.2有区别吗?
  3. centos6安装mysql并远程连接_MySQL5.7数据库安装与远程连接
  4. 企业门户网站服务器,企业或个人门户网站对服务器前的重要准备 - 酷番云
  5. flask get 参数_用它 5 分钟以后,我放弃用了四年的 Flask
  6. google 浏览器默认打开控制台_chrome浏览器使用 Console(控制台)
  7. python 画图 线标注_最简洁的Python时间序列可视化实现
  8. 电脑按f8无法进入安全模式_自已有电脑的人,都会遇到系统死机问题,教大家实用一招自已解决...
  9. mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...
  10. python 颜色_如何使用python中matplotlib库分析图像颜色