当前位置: 首页 > article >正文

使用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里直接执行

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

或者挂在后台执行

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

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命令来将json文件导入到doris

curl --location-trusted -u '{dorisusername}:{dorispassword}' -H "label:{12345}" -H "timeout:100" -H "format:json" -H "strip_outer_array: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数组先展平

doris_fe_ip: doris的fe的ip

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

doris_db: doris的数据库名

doris_table: doris的数据表名

注意,json格式导入的时候,限制单个文件在100MB以内(在doris be上有参数可调),如果超过100MB,需要先将json切成多个小文件。


http://www.kler.cn/a/233344.html

相关文章:

  • 深度学习--正则化
  • 认识一下Unicorn
  • androidstudio下载gradle慢
  • vue请求数据报错,设置支持跨域请求,以及2种请求方法axios或者async与await
  • 什么时候需要复写hashcode()和compartTo方法
  • 卓胜微嵌入式面试题及参考答案(2万字长文)
  • 【51单片机Keil+Proteus8.9】门锁控制电路
  • 法国实习面试——计算机相关专业词汇
  • ElasticSearch之倒排索引
  • 车载测试中:如何处理 bug
  • SparkJDBC读写数据库实战
  • c#表达式树(MemberInitExpression)成员初始化表达式
  • 工厂方法模式(Factory Method Pattern)
  • 【开源计算机视觉库OpencV详解——超详细】
  • 【Scala】 2. 函数
  • containerd中文翻译系列(十)镜像验证
  • 《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(11)
  • Python学习路线 - Python高阶技巧 - PySpark案例实战
  • Javaweb之SpringBootWeb案例之异常处理功能的详细解析
  • C#中的浅度和深度复制(C#如何复制一个对象)
  • 深度学习技巧应用36-深度学习模型训练中的超参数调优指南大全,总结相关问题与答案
  • UI自动化之Poco常用断言方式
  • RCE(命令执行)知识点总结最详细
  • [day0] 借着“ai春晚”开个场
  • 单片机学习笔记---LED点阵屏显示图形动画
  • 从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets