• clickhouse学习笔记


    最近在学习clickhouse,时间紧任务重。这两天看了很多资料,然后发现网上的有些不够详细,有些不够全面。个人感觉对新手不太友好,于是就写下了这篇文章,本意是帮助新手快速上手clickhouse,以及使用jdbc来连接clickhouse。
    学习第一步,安装clickhouse。这里,我在公司接触到的是已经安装好的clickhouse。不过为了学习,我又在我个人的linux系统上安装了一遍。安装时,我参考的文章为安装详细连接大家在安装过程中可以去看一下,真的是很详细了。
    对了,有一个小坑,在执行clickhouse-server文件的解压后的文件后,它在执行的过程中会出现让你为默认账户设置密码的选项。我当时也是没注意,然后就没有看到博主留意的话,设了个密码。其实可以直接不用管它的,当然了,可以根据自己的需要来选择是否设置密码。
    安装完后,大家可以去学习一下基本的知识点。不过我感觉它的操作表呀,操作数据库呀等和Mysql有些类似。它也是支持SQL语法的,因此在这方面学起来还是非常快的。
    接下来,当你熟悉一些基本操作时,可以jdbc连接clickhouse啦。这里真在的很坑,接下来这样做。

    这个maven依赖是网上大部分博客所使用在依赖,流传度非常广。但是很不幸的是GitHub说这个maven依赖要停止维护了。于是需要从GitHub上下载第三方依赖。

    <dependency>
        <groupId>ru.yandex.clickhouse</groupId>
        <artifactId>clickhouse-jdbc</artifactId>
        <version>0.1.52</version>
    </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这个maven依赖是github上的,也是我所需要的。因此就以这个为例子进行操作。

      <dependency>
                <groupId>com.github.housepower</groupId>
                <artifactId>clickhouse-native-jdbc</artifactId>
                <version>2.2-stable</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    maven依赖导入后,更新maven,然后开始进行基本操作小练习。

    创建表操作

    这里把创建数据表封装成了一个方法,测试的时候在main函数里调用就可以了。

     /**
         * 功能简介:创建数据表
         * @throws ClassNotFoundException
         * @throws SQLException
         */
        public static void CreateTable() throws ClassNotFoundException, SQLException {
            Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
            Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
    
            Statement statement = connection.createStatement();
            statement.executeQuery("create table jdbc_example_01(day Date, name String, age UInt8) Engine=Log");
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    下面给出它在main方法中的代码。

     /*执行创建数据库表操作*/
    //        try{
    //            CreateTable();
    //            System.out.println("------创建数据表成功!");
    //        }catch (Exception e){
    //            e.printStackTrace();
    //            System.out.println("-------创建数据库表失败!");
    //        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    插入数据操作

      /**
         * 功能简介:向clickhouse中test_01数据库中往jabc_example中添加数据
         */
        public static  void InsertDate(){
            try {
                Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
                try {
                    Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
                    PreparedStatement preparedStatement = connection.prepareStatement("insert into jdbc_example values(?,?,?)");
                    // 插入10条数据作为测试
                    for(int i = 0;i < 10; i++){
                        preparedStatement.setDate(1,new Date(System.currentTimeMillis()));
                        preparedStatement.setString(2,"pandda_"+(i+1));
                        preparedStatement.setInt(3,18);
                        preparedStatement.addBatch();
                    }
                    preparedStatement.executeBatch();
                    System.out.println("------插入数据成功!");
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    查询数据

    这里只是为了简单的测试,就使用一个简单的全表查询。

       /**
         * 功能简介:从clickhouse中test_01数据库的jdbc_example表中查询数据,然后在控制台输出出来
         */
        public static void QueryData(){
            try {
                Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
                Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
                Statement statement = connection.createStatement();
    
                String sql = "select * from jdbc_example";
                ResultSet resultSet = statement.executeQuery(sql);
    
                /*输出查询后得到的数据*/
                System.out.println("-------以下是查询后得到的数据------");
                while (resultSet.next()){
                    System.out.println("日期;" + resultSet.getDate(1) +"姓名:" + resultSet.getString(2) + "年龄:" + resultSet.getInt(3));
                }
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    删除数据表格操作

       /**
         * 功能简介:把clickhouse中test_01数据库中的jdbc_example数据表给删除了
         */
        public static  void DropTable(){
            try {
                Class.forName("com.github.housepower.jdbc.ClickHouseDriver");
                Connection connection = DriverManager.getConnection("jdbc:clickhouse://10.84.143.33:9000/test_01");
    
                Statement statement = connection.createStatement();
                //删除数据表的sql语句
                String sql = "drop table jdbc_example";
                statement.execute(sql);
    
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    未完待更新

  • 相关阅读:
    N年前的实习记录 - 职场生涯应如何规划?
    Flutter框架性泛学习系列之二、Flutter应用层(Application Layer)上-常用Widgets与简单动画
    毫米波传感器原理介绍:测速_1相位
    Day 251/300 《图解HTTP》读书笔记(三)
    里奥哈大使撰文 | 来一场云旅行吧,盘点里奥哈那些美轮美奂的酒庄~
    【毕业设计】中文汉字识别算法 - 深度学习 卷积神经网络 机器视觉 OCR
    ROS 消息订阅 服务器客户端客户端 通信方式
    2023年【危险化学品生产单位安全生产管理人员】复审考试及危险化学品生产单位安全生产管理人员考试试题
    靠着数套的Java刷题PDF,成功“混进”腾讯T3
    【Unity2D】关卡编辑好帮手——TileMap
  • 原文地址:https://blog.csdn.net/qq_44819959/article/details/125404172