• 将xls/csv数据导入到ES中


    一.导入MySQL数据库中

    (1)通过Navicat导入向导直接导入即可

    (2)代码方式导入

    【如果字段太多,这种方式做肯定不现实】

    csv导入mysql数据库 -- 按需修改即可

    package com.blb.mysql_java_es.util;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    import java.io.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    public class CsvToMysql {
    
        static {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
            } catch (ClassNotFoundException e) {
    
            }
        }
    
        //从csv中去读取数据
        public void readData() throws IOException, SQLException {
    
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/temp1?characterEncoding=utf8&serverTimezone=GMT", "root", "root");
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("F://java_ES//112.csv"),"GBK"));
            String  line = null;
            String sql = "insert into tb_temp1 values(?,?,?,?,?,?,?,?)";
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            int i = 1;
            while ((line = reader.readLine())!= null){
                String[] split = line.split(",");
                preparedStatement.setString(1,split[0]);
                preparedStatement.setString(2,split[1]);
                preparedStatement.setString(3,split[2]);
                preparedStatement.setString(4,split[3]);
                preparedStatement.setString(5,split[4]);
                preparedStatement.setString(6,split[5]);
                preparedStatement.setString(7,split[6]);
                preparedStatement.setString(8,split[7]);
                preparedStatement.addBatch();
                if (i % 100 == 0){
                    preparedStatement.executeBatch();
                    preparedStatement.clearBatch();
                }
                i++;
            }
            preparedStatement.executeBatch();
            preparedStatement.clearBatch();
            preparedStatement.close();
            conn.close();
    
        }
    
        public static void main(String[] args) throws IOException, SQLException {
            new CsvToMysql().readData();
        }
    
    }

    xls导入mysql数据库 -- 按需修改即可

    package com.blb.mysql_java_es.util;
    
    import com.alibaba.excel.EasyExcel;
    import com.blb.mysql_java_es.listener.UserListener;
    import com.blb.mysql_java_es.pojo.User;
    
    import java.io.File;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 最简单的读:
     * 1.创建excel对应的实体对象
     * 2.由于默认的是一行一行的读取excel,所以需要创建一个excel一行一行的回调监听器
     * 3.直接调用即可
     */
    
    public class ExcelToMysql {
    
        static {
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        //获取连接
        public static Connection getConnection(){
            Connection conn = null;
            try {
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/temp1?characterEncoding=utf8&serverTimezone=GMT", "root", "root");
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        //批量保存
        public static void batchRead(List<User> userList){
            Connection conn = getConnection();
            String sql = "insert into tb_temp1 values(?,?,?,?,?,?,?,?)";
            try {
                PreparedStatement preparedStatement = conn.prepareStatement(sql);
                for (User user:userList) {
                    preparedStatement.setString(1,user.getUid()+"");
                    preparedStatement.setString(2,user.getUname());
                    preparedStatement.setString(3,user.getUsex());
                    preparedStatement.setString(4,user.getUage());
                    preparedStatement.setString(5,user.getAddress());
                    preparedStatement.setString(6,user.getJob());
                    preparedStatement.setString(7,user.getJobyear());
                    preparedStatement.setString(8,user.getSkill());
                    preparedStatement.addBatch();
                }
                preparedStatement.executeBatch();
                preparedStatement.clearBatch();
                preparedStatement.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        public static void readData() throws SQLException {
            //指定需要去哪个class去读,然后读取到第一个sheet文件流就会自动关闭
            EasyExcel.read(new File("F://java_ES//114.xls"), User.class,new UserListener(new ArrayList<User>())).sheet().headRowNumber(0).doRead();
        }
    
        public static void main(String[] args) {
            try {
                readData();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
    }

    二.导入ES数据库中

        /**
         * 如何读取XLS文件中的数据,可以通过Kettle工具直接做
         *
         * 读取xls的一些技术:-- 可以读取xls的数据,也可以导出为xls格式的数据
         * 阿里巴巴        easyexcel
         * 韩国人写的    jxls
         * apache        POI(原生)
         *
         * 我们使用的是easyexcel,简单易操作
         */
        /**
         * 推荐阅读:
         * https://github.com/alibaba/easyexcel/
         *
         * 使用最简单的easyexcel读取数据
         * 由于是默认一行一行的读取excel的,所以需要创建一个excel一行一行的回调监听器
         */
        //批量从xls表中添加数据 -- 单条插入,数据量大效率就很低
        @Test
        void insert() throws IOException {
            //文件的路径
            String fileName = "F:\企查查\test.xls";
            //需要指定去哪个excel中读取,然后读取到第一个sheet之后文件流就会自动关闭
            /**
             * new File(fileName):需要读取的文件
             * User.class:读出来的数据需要绑定哪一个类
             * new UserListener():读出来的数据需要如何处理
             */
            ArrayList<User> users = new ArrayList<>();
            EasyExcel.read(new File(fileName),User.class, new UserListener(users)).sheet().doRead();
            int i = 2;
            for (User user:users){
                System.out.println(user); //User(uid=1, uname=张三, upwd=123456)
                insertData1("test","std",i+"",user);
                i++;
            }
        }
    
        //从xsl中批量插入数据 -- 对于海量数据效率非常高
        @Test
        void batchInsert() throws IOException {
            //文件的路径
            String fileName = "F:\企查查\test.xls";
            ArrayList<User> users = new ArrayList<>();
            EasyExcel.read(new File(fileName),User.class,new UserListener(users)).sheet().doRead();
            batchInsert1("test","std",users,16);
        }
    
        public void insertData1(String index, String type, String id, User user) throws IOException {
            IndexRequest request = new IndexRequest(index).type(type).id(id);
            request.source(JSON.toJSONString(user),XContentType.JSON);
            IndexResponse index1 = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        }
    
        /**
         *
         * @param index 索引数据库的名字
         * @param type 文档类型
         * @param userList 批处理的数据
         * @param i 起始id
         */
        public void batchInsert1(String index, String type, List<User> userList,int i) throws IOException {
            BulkRequest bulkRequest = new BulkRequest(index,type);
            for (User user:userList){
                IndexRequest request = new IndexRequest();
                request.id(i+"");
                request.source(JSON.toJSONString(user),XContentType.JSON);
                bulkRequest.add(request);
                i++;
            }
            restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
        }
  • 相关阅读:
    三十二、恢复单库单表
    三十一、XBK备份
    三十、分库分表备份脚本
    二十九、mysqldump恢复案例
    二十八、mysqldump备份
    二十七、备份介绍
    二十六:慢日志分析
    二十五、二进制日志之GTID模式
    Trie树
    AC自动机
  • 原文地址:https://www.cnblogs.com/IT_CH/p/12813638.html
Copyright © 2020-2023  润新知