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

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

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

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

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

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

   org.apache.calcite      calcite-file      1.21.0

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

来张官网截图感受下:

557aeffde7e3558cefdfcacab357e88e.png

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

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

7bbc567f98b5e11eab399862fc36a8e6.png

第二步:添加配置文件

配置的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 可以支持多种数据格式,通过这个图你也能感受到几分吧。

cd037cc27a7d07ee81870398dc695520.png

第三步: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。

整体项目结构如下:

bebbf597f63ae43fc705400735d83a2b.png

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

527ecc7f9ba0e8b78f17c86e568acca4.png

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

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

Have fun!

作者:Tomcat那些事儿

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SLF4JLoggerContext cannot be cast to LoggerContext

org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.LoggerContexthive启动时,一直报错,原因是 hadoop与hive的jar包冲突,下载对应版本的hadoop和hive 安装包,检查log相关的jar包是否对应,并进行 log4j 或 sjf4j 包的 排除和添加。

pacs定位线_C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法

1.定位线概念:某个方位的影像在另一个方向的影像上的投影相交线,例如横断面(从头到脚的方向)在矢状面(从左手到右手)上的影像投影面交线。举个例子:右边的是MR(核磁共振)的某一帧切片,这是从头开始扫描,扫描到眼睛这个…

图片饱和度_摄影后期完全调色指南(三):饱和度与自然饱和度有什么区别?...

泼辣年度大课 | 摄影后期完全调色指南(一)摄影后期完全调色指南(二):详解色温与色调在上一篇教程里面我们讲到了全局色彩调整中的色温和色调工具,今天来讲解剩下的两个工具:饱和度与自然饱和度工具,这两个工具使用的频率也非常的高…

2023年大模型回顾

大家好,这里是最佳拍档,我是大飞 一年前的今天,ChatGPT发布 仅仅花了5天时间 ChatGPT的注册用户数量达到100万 创了互联网历史记录 两个月后,2023年1月 ChatGPT的月活用户数量达到1亿 火箭般蹿升的用户数量 预示了今年生成…

windows 下的文件对比工具

deffinity,一款专用于文件对比的工具,安装简单,使用方便 下载链接如下: https://www.appinn.com/diffinity-for-win/

18c分布式事务 oracle_浅谈ORACLE的分布式事务

平台环境: suk: linux as4 oracle 9201 primary: windows xp oracle 10.2.0.3 首先在primary数据库上建立测试数据。 SQL create table test as select * from dba_objects; Table created. SQL insert into test select * from test; 9873 rows created. SQ平台环境…

shell 中去掉末尾换行符

# 多行为一行 echo "aaa\ bbb\ ccc" # 结果 #aaabbbccc#多行还是多行 echo "aaa bbb ccc" #结果 #aaa #bbb #ccc

python五子棋游戏15*15_在STM32上运行五子棋小游戏(15x15)

本程序算法资料来自下面网站.----https://www.cnblogs.com/buptzym/archive/2012/06/20/2556052.html----先定义一个数组 用于存储整个棋盘的数据.u16 ChessBoard[15][15];//棋盘数据.一.己方下棋 基础函数.1.在屏幕上显示出来一个15*15的棋盘.void DrawTable(void)//画出15x15…

点名册_骑士新书《万界点名册》十万收藏火爆气势不减当年修真聊天群

最近好多人都在讨论圣骑士的传说新书《万界点名册》,新书还没有发布,起点就给了闪屏推荐,引得的很多读者心痒痒的想要看看到底是怎样的神作。所以才发布两万多字的新书投资人就快一万人了,收藏也突破了十万。这速度好像是坐了火箭…

hadoop重启后 9000端口不在

原因可能是hadoop的namenode还未启动成功,可以去查看namenode的日志,是否有错误日志,如果没有错误日志,耐心等待namenode的恢复

500张思维导图记38000单词_思维导图记单词,环环相扣难遗忘——2020奇速英语夏令营第三天...

2020年8月6日,是奇速英语19期夏令营第二批单词阅读营正式上课的第3天,为了激发各班学员学习兴趣,保证学习效果,奇速英语专门制定了小组PK的积分奖励制在今天的学习当中发挥了极大的效果。在这一机制的刺激和奇速英语老师们的高效教…

语音识别热词_出门问问 TWS 耳机语音交互解决方案

随着芯片、算法商在技术及应用方面的演进,尤其是连接、降噪方向的重大突破,越来越多的手机及耳机厂商推出了自家功能丰富、交互舒适的 TWS 耳机。近日,出门问问新品发布会上推出的 TicPods 2 系列产品,在人机交互和语音助理方面&a…

egret 变量_egret性能优化总结

## 来自官方的优化建议(1) 少使用Alpha混合。(2) 显式停止计时器,让它们准备好进行垃圾回收。(3)使用事件侦听器并在不需要时删除这些侦听器。(4) 在不需要触摸交互性时显式禁用触摸交互性。(5) 合理使用dispatchEvents 函数。(6) 尽可能重用对象,建立对…

go tcp连接_TCP漫谈之keepalive和time_wait

TCP是一个有状态通讯协议,所谓的有状态是指通信过程中通信的双方各自维护连接的状态。一、TCP keepalive先简单回顾一下TCP连接建立和断开的整个过程。(这里主要考虑主流程,关于丢包、拥塞、窗口、失败重试等情况后面详细讨论。)首先是客户端发送syn(Syn…

纠错码较副本优势与minio纠错码配置

1. 优势 纠错码是什么,怎么保障数据不丢失 纠错码采用数据块校验块方式进行存储,副本采用真实副本存储纠错码更利于存储,副本更利于计算 2. 业界配置 EMC对象存储系统ECS 12 4 和 102 冗余度分别为 1.33 、 1.2 阿里云盘古集群chunk存储 83 冗余度1.375 Google RS(6,3) i…

mysql update 联合更新_Mysql update多表联合更新的方法小结

下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法student表 class表1. 执行 UPDATE student s , class c SET s.class_nametest00,c.stu_nametest00 WHERE s.class_id c.idstudent表 …

java mysql读取多条数据_myeclipse 使用Java访问mysql数据库,数据库中有多条记录,为何只能读出一条数据??...

Java源代码如下:publicListgetAllMsgList(){ListmsgListnewArrayList();DBConnectiondbnewDBConnection();Connectionconndb.getConn();Stringsql"select*frommsg...Java 源代码如下:public List getAllMsgList() { List msgList new ArrayList();…