Calcite源码阅读三

简介: 利用calcite和avatica创建自己的csv服务器数据库

一、服务端

  public static void main(String[] args) throws Exception{
        HttpServer server = start(8765);
        server.join();
    }

    public static HttpServer start(int port) throws Exception {
        Properties info = new Properties();
        info.put("model",
                "inline:"
                        + "{\n"
                        + "  version: '1.0',\n"
                        + "  defaultSchema: 'SALES',\n"
                        + "   schemas: [\n"
                        + "     {\n"
                        + "       name: 'SALES',\n"
                        + "       tables: [\n"
                        + "         {\n"
                        + "           name: 'DEPTS',\n"
                        + "           type: 'custom',\n"
                        + "           factory: 'org.apache.calcite.adapter.csv.CsvTableFactory',\n"
                        + "           operand: {\n"
                        + "             file: '/Users/xxx/project/calcitetest/src/main/resources/DEPTS.csv',\n"
                        + "             flavor: 'scannable'\n"
                        + "           }\n"
                        + "         }\n"
                        + "       ]\n"
                        + "     }\n"
                        + "   ]\n"
                        + "}");
        Meta meta = new JdbcMeta("jdbc:calcite:", info);
        Service service = new LocalService(meta);
        HttpServer server = new HttpServer(port,new AvaticaJsonHandler(service));
        server.start();
        System.out.println("server start...");
        return server;
    }

二、客户端

  public static void main(String[] args) throws Exception{
        Class.forName("org.apache.calcite.avatica.remote.Driver");
        Connection conn = DriverManager.getConnection("jdbc:avatica:remote:url=http://localhost:8765","username","password");
        Statement statement = conn.createStatement();
        ResultSet rs = statement.executeQuery("select * from DEPTS");
        while(rs.next()){
            System.out.println(rs.getString(1));
        }
        rs.close();
        statement.close();
        conn.close();
    }

三、服务执行
开启服务端,执行客户端,得到输出

10
20
30

四、项目依赖

org.apache.calcite:calcite-core:1.19.0
org.apache.calcite:calcite-example-csv:1.19.0
org.apache.calcite.avatica:avatica-server:1.13.0
com.alibaba:fastjson:1.2.54
com.google.guava:guava:16.0.1
目录
相关文章
|
5月前
|
SQL Java 数据库连接
Apache Zeppelin系列教程第四篇——JDBCInterpreter原理分析
Apache Zeppelin系列教程第四篇——JDBCInterpreter原理分析
66 0
|
5月前
|
存储 SQL 关系型数据库
Apache Doris 聚合函数源码阅读与解析|源码解读系列
Apache Doris Active Contributor 隐形通过本文记录下对源码的理解,以方便新人快速上手源码开发。
Apache Doris 聚合函数源码阅读与解析|源码解读系列
|
5月前
|
Java 数据库连接 Apache
Apache Zeppelin系列教程第五篇——Interpreter原理分析
Apache Zeppelin系列教程第五篇——Interpreter原理分析
101 0
|
10月前
|
资源调度 前端开发 Java
深度剖析Dinky源码(上)
深度剖析Dinky源码
343 0
|
10月前
|
SQL 资源调度 前端开发
深度剖析Dinky源码(下)
深度剖析Dinky源码(下)
296 0
|
Java Apache 开发工具
Flink 源码阅读环境搭建
阅读优秀的源码是提升我们代码技能最重要的手段之一,工欲善其事必先利其器,所以,搭建好源码阅读环境是我们阅读的第一步。
|
SQL Web App开发 JSON
深度剖析Dinky源码
深度剖析Dinky源码
862 0
|
SQL 存储 自然语言处理
看这篇就够了丨基于Calcite框架的SQL语法扩展探索
Calcite在大数据系统中有着广泛的运用, 比如Apache Flink, Apache Drill等都大量使用了Calcite,理解Calcite的原理可以说已经成为理解大数据系统中SQL访问层实现原理的必备条件之一。 本文就为大家详细介绍如何基于Calcite框架的SQL语法扩展探索使之更符合你的业务需求,以及扩展SQL在数栈产品的应用实践。对该技术感兴趣的同学点进文章阅读哦
1306 0
|
存储 SQL NoSQL
Apache Hudi初学者指南
在深入研究Hudi机制之前,让我们首先了解Hudi正在解决的问题。
231 0
Apache Hudi初学者指南
|
Java 关系型数据库 MySQL
Calcite源码阅读一
Calcite子项目avatica源码阅读
1306 0
Calcite源码阅读一