使用navicat导出mysql离线数据后,再导入doris的方案

一、背景

doris本身是支持直接从mysql中同步数据的,但有时候,客户不允许我们使用doris直连mysql,此时就需要客户配合将mysql中的数据手工导出成离线文件,我们再导入到doris中

二、环境

doris 1.2

三、方案

doris支持多种导入离线数据的方案,见 doris导入数据方案 ,但在本文场景下,一般会使用到insert into、csv和json三种方案

3.1 insert into方案

doris对于insert into 对于数据量较小的场景(比如100行以内),可以直接让用户在navicat中将某个表转储SQL文件,然后将其中的insert语句copy出来在doris中执行。但如果数据量较多时,doris会一行行地去执行,效率就会很低。此时如果将多个INSERT INTO中的value部分合并成一行,再由doris执行,效率就会得到提升,但navicat并不原生支持合并,因此作罢。


3.1.1 在doris命令行,或者mysql 命令行中执行

打开doris控制台,将insert粘贴进来执行。

或者使用mysql client登录到doris,将insert粘贴进来执行。

或者将insert语句写入到服务器的一个文件中,例如test.sql,然后在mysql client中执行source命令

3.1.2 在bash中执行

如果没有登录到mysql client中,也可以在bash里直接执行

bash 复制代码
mysql -h {doris_fe_ip}  -P {doris_fe_tcp_port,一般是9030} -u{doris_username} -p'{doris_password}' {doris_database}< /root/sql/test.sql

或者挂在后台执行

bash 复制代码
nohup  mysql -h {doris_fe_ip}  -P {doris_fe_tcp_port,一般是9030} -u{doris_username} -p'{doris_password}' {doris_database}< /root/sql/test.sql > /root/sql/test.log 2>&1 &

3.2 csv

对于没有什么很复杂的文本的表(主要是不会出现跟csv分隔符相同的文本的字段),可以使用csv格式。

使用navicat导出向导,格式选择csv,文本识别符号选择none(避免navicat自作聪明地给字段添加"),日期选YMD格式


使用这种方案导出来的csv文件格式如下,第一行是标题,剩下的是数据,数据分割符是 ","

在doris上建好表之后,可以使用curl命令来将csv文件导入到doris

bash 复制代码
curl --location-trusted -u '{dorisusername}:{dorispassword}' -H "label:{12345}" -H "timeout:100" -H "format:csv_with_names" -H "column_separator:,"  -T {test.csv}  http://{doris_fe_ip}:{doris_fe_port}/api/{doris_db}/{doris_table}/_stream_load

相关命令说明如下:

dorisusername:doris的账号

dorispassword:doris的密码

label:本次导入任务的名称,多次导入时需要更换名称,30分钟内不允许名称重复

timeout:导入超时,单位s

format:文件格式,默认是csv,由于navicat导出的时候第一行不是数据而是标题,因此这里需要改成csv_with_names,作用是过滤掉第一行的标题

column_separator:文件分隔符,navicat导出来的csv的分割符是","

doris_fe_ip: doris的fe的ip

doris_fe_port: doris的fe的port,一般为8030

doris_db: doris的数据库名

doris_table: doris的数据表名

3.3 json(推荐)

相比于csv方案,json最大的好处是不怕文本中出现与分割符相同的内容,但坏处是json文件要求每个数据都有个key,因此文件会比csv大很多。

使用navicat导出向导,格式选择json,日期选YMD格式


使用这种方案导出来的json文件格式如下,最外层是\[\],每一行数据都会用一个{}括起来,而且多行数据的key的顺序是一样的。

在doris上建好表之后,可以使用curl命令来将csv文件导入到doris

bash 复制代码
curl --location-trusted -u '{dorisusername}:{dorispassword}' -H "label:{12345}" -H "timeout:100" -H "format:json" -H "strip_outer_array:true" -H "fuzzy_parse:true" -T {test.csv}  http://{doris_fe_ip}:{doris_fe_port}/api/{doris_db}/{doris_table}/_stream_load

相关命令说明如下:

dorisusername:doris的账号

dorispassword:doris的密码

label:本次导入任务的名称,多次导入时需要更换名称,30分钟内不允许名称重复

timeout:导入超时,单位s

format:文件格式,默认是csv,本方案使用json,因此这里需要改成json

strip_outer_array:doris导入json时,默认最外层是{},但navicat导出来的数据最外层是\[\],因此需要指定此参数将json数组先展平

fuzzy_parse:为true表示json将以第一行为schema 进行解析,开启这个选项可以提高 json

导入效率,但是要求所有json 对象的key的顺序和第一行一致, 默认为false,仅用于json 格式

doris_fe_ip: doris的fe的ip

doris_fe_port: doris的fe的port,一般为8030

doris_db: doris的数据库名

doris_table: doris的数据表名

相关推荐
南城以南溫暖如初1471 小时前
AI 智能商城 APP 定制开发的核心需求
java·人工智能·spring boot·mysql·mybatis·需求分析
2601_962071572 小时前
基于DataX迁移MySQL到OceanBase集群
数据库·mysql·oceanbase
2601_962180333 小时前
FlinkCDC 实现 MySQL 数据变更实时同步
数据库·mysql
2601_962189603 小时前
深入浅出MySQL:概述与体系结构解析
数据库·mysql
软件聚导航14 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
2601_9609067215 小时前
1X发布自己的世界模型1XWM
mysql·mongodb·rabbitmq·memcached
夜雪一千16 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
ruleslol16 小时前
MySQL: OR查询为什么会导致索引失效
mysql
进阶的小木桩17 小时前
mysql 安装问题解决方案记录
数据库·mysql