Doris(8):数据导入(Load)之Insert Into

news2025/1/16 15:40:23

Insert Into 语句的使用方式和 MySQL 等数据库中 Insert Into 语句的使用方式类似。但在 Doris 中,所有的数据写入都是一个独立的导入作业。所以这里将 Insert Into 也作为一种导入方式介绍。

主要的 Insert Into 命令包含以下两种;

  • INSERT INTO tbl SELECT ...
  • INSERT INTO tbl (col1, col2, ...) VALUES (1, 2, ...), (1,3, ...);

其中第二种命令仅用于 Demo,不要使用在测试或生产环境中。

1 创建导入

Insert Into 命令需要通过 MySQL 协议提交,创建导入请求会同步返回导入结果。

语法:

INSERT INTO table_name [partition_info] [WITH LABEL label] [col_list] [query_stmt] [VALUES];

示例:

INSERT INTO site_visit WITH LABEL label1 SELECT * FROM site_visit3;

注意:

当需要使用 CTE(Common Table Expressions) 作为 insert 操作中的查询部分时,必须指定 WITH LABEL 和 column list 部分。示例

INSERT INTO site_visit WITH LABEL label1 SELECT * FROM site_visit3;

2 导入结果

Insert Into 本身就是一个 SQL 命令,其返回结果会根据执行结果的不同,分为以下几种:

  • 结果集为空

如果 insert 对应 select 语句的结果集为空,则返回如下:

mysql> insert into tbl1 select * from empty_tbl;

Query OK, 0 rows affected (0.02 sec)

Query OK 表示执行成功。0 rows affected 表示没有数据被导入。

  • 结果集不为空

在结果集不为空的情况下。返回结果分为如下几种情况:

(1)Insert 执行成功并可见:

mysql> insert into tbl1 select * from tbl2;

Query OK, 4 rows affected (0.38 sec)

{'label':'insert_8510c568-9eda-4173-9e36-6adc7d35291c', 'status':'visible', 'txnId':'4005'}

mysql> insert into tbl1 with label my_label1 select * from tbl2;

Query OK, 4 rows affected (0.38 sec)

{'label':'my_label1', 'status':'visible', 'txnId':'4005'}

mysql> insert into tbl1 select * from tbl2;

Query OK, 2 rows affected, 2 warnings (0.31 sec)

{'label':'insert_f0747f0e-7a35-46e2-affa-13a235f4020d', 'status':'visible', 'txnId':'4005'}

mysql> insert into tbl1 select * from tbl2;

Query OK, 2 rows affected, 2 warnings (0.31 sec)

{'label':'insert_f0747f0e-7a35-46e2-affa-13a235f4020d', 'status':'committed', 'txnId':'4005'}

Query OK 表示执行成功。4 rows affected 表示总共有4行数据被导入。2 warnings 表示被过滤的行数。

同时会返回一个 json 串:

{'label':'my_label1', 'status':'visible', 'txnId':'4005'}

{'label':'insert_f0747f0e-7a35-46e2-affa-13a235f4020d', 'status':'committed', 'txnId':'4005'}

{'label':'my_label1', 'status':'visible', 'txnId':'4005', 'err':'some other error'}

label 为用户指定的 label 或自动生成的 label。Label 是该 Insert Into 导入作业的标识。每个导入作业,都有一个在单 database 内部唯一的 Label。

status 表示导入数据是否可见。如果可见,显示 visible,如果不可见,显示 committed。

txnId 为这个 insert 对应的导入事务的 id。

err 字段会显示一些其他非预期错误。

当需要查看被过滤的行时,用户可以通过如下语句

show load where label="xxx";

返回结果中的 URL 可以用于查询错误的数据,具体见后面 查看错误行 小结。

数据不可见是一个临时状态,这批数据最终是一定可见的

可以通过如下语句查看这批数据的可见状态:

show transaction where id=4005;

返回结果中的 TransactionStatus 列如果为 visible,则表述数据可见。

(2)Insert 执行失败

执行失败表示没有任何数据被成功导入,并返回如下:

mysql> insert into tbl1 select * from tbl2 where k1 = "a";

ERROR 1064 (HY000): all partitions have no load data. url: http://10.74.167.16:8042/api/_load_error_log?file=__shard_2/error_log_insert_stmt_ba8bb9e158e4879-ae8de8507c0bf8a2_ba8bb9e158e4879_ae8de8507c0bf8a2

其中 ERROR 1064 (HY000): all partitions have no load data 显示失败原因。后面的 url 可以用于查询错误的数据,具体见后面 查看错误行 小结。

综上,对于 insert 操作返回结果的正确处理逻辑应为:

  • 如果返回结果为 ERROR 1064 (HY000),则表示导入失败。
  • 如果返回结果为 Query OK,则表示执行成功。

       (1) 如果 rows affected 为 0,表示结果集为空,没有数据被导入。

        (2)如果 rows affected 大于 0:

                如果 status 为 committed,表示数据还不可见。需要通过 show transaction 语句查看状态直到 visible

                如果 status 为 visible,表示数据导入成功。

        (3)如果 warnings 大于 0,表示有数据被过滤,可以通过 show load 语句获取 url 查看被过滤的行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PX4控制云台的两种方式

1、配置MNT_MODE_IN参数后重启飞控,释放出mount的设置参数 控制信号输入为RC 则接收机必须连接对应的通道至AUX辅助通道,并通过MNT_MAN_*参数设置pitch/roll/yaw对应的AUX通道 (遥控器摇杆 → 接收机通道输出 → 飞控AUX通道输入 → AUX通道…

Spring IOC 入门简介【自定义容器实例】

目录 前言 Spring简介 Spring体系结构 一、IOC控制反转思想 二、IOC自定义对象容器 1. 创建实体类,Dao接口,实现类 2. 创建配置文件bean.properties 3. 创建容器管理类 4. 创建StudentService类 5. 测试方法 6. 测试结果 前言 Spring简介 Spr…

Android 详解基本布局以及ListView和RecyclerView

前言 一个丰富的界面有很多个控件组成,那么就需要布局来实现控件有条不紊的摆放。 一 LinearLayout 线性布局 LinearLayout 又称作线性布局,是一种常用的布局。有横向和竖向两个方向。 通过下面的属性进行设置 android:orientation"vertical"…

【科研】Michaelis–Menten 曲线(米氏曲线)中反应速率的计算

参考文献:Standardized assays for determining the catalytic activity and kinetics of peroxidase-like nanozymes | Nature Protocols SCI-Hub链接: https://sci-hub.se/10.1038/s41596-018-0001-1 科研需要,需要绘制所制备纳米酶的Mi…

亿发软件:中小企业定制一体化管理解决方案,全面提升数据价值

亿发软件:中小企业定制一体化管理解决方案,全面提升数据价值 一体化信息管理系统是为中小企业提供简化运营、提高效率和生产力的工具。随着经济的快速发展,企业细分管理的多样化需求显著增加。很多企业都在为找不到适合自己的一体化信息管理…

一文看懂数据云平台的“可观测性”技术实践

背景 这是一家大型制造集团。为监控及预测工厂设备运行情况,IT部门在数据云平台DataSimba上按天执行数据作业,每24小时对工厂设备的日志数据进行分析,发现能对业务起到很好的辅助作用,效果不错。 “要不升级为每1个小时跑一次&am…

android hook(Toast BadTokenException案例)

什么是Hook? hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序先捕捉该消息,钩子函数先得到控制权,这时钩子函数即可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。…

(详细)HTTP协议(应用层重点协议)

目录 一、HTTP协议工作过程 二、 协议格式 1、抓包工具Fiddler 2、HTTP请求格式 3、HTTP响应格式 4、HTTP协议格式总结 三、HTTP请求(Request) 1、URL (1)URL基本格式 (2)URL实例 (…

什么是伪原创?SEO伪原创该怎么做

伪原创是指在原有的文章或内容基础上进行修改或调整,以产生看起来是全新内容的文章,但实际上并没有创造新的价值。多数情况下,伪原创的目的是为了在文章相对原创的情况下,提高搜索引擎的排名。 一、高质量伪原创 做好伪原创&#…

SpringCloud消息总线——Bus

Bus 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 在SpringCloud Config学习过程中,还遗留下来一个问题:当运维更新git上的配置信息时,要想更改所有的客户端服务,必须得手动给客户端服务发送post请…

ESP32学习笔记14-mqtt-连接官方mqtt,onenet,thingsboard物联网平台

12.MQTT 12.0工程里的WiFi密码和ssid设置 工程的WiFi配置 ssid password 打开配置 配置ssid和密码 工程配置文件sdkconfig IP和端口配置 乐鑫服务器mqtt 12.1数据结构和配置函

力扣sql中等篇练习(四)

力扣sql中等篇练习(四) 1 游戏玩法分析IV 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 首次登录后第二天登录的玩家数量/玩家总数量(去重) # 注意首日注册指的是表中的最早的一个日期 SELECT ROUND((SELECT count(distinct t1.player_id)FRO…

给孩子买台灯什么牌子好?盘点学生专用台灯第一品牌

现在的孩子近视率很高,双减政策的执行,也有导致许多孩子长时间接触电子产品,没有正确的看书姿势,合理的用眼距离等,使用专业的护眼台灯,能让孩子眼睛拥有一个好的视力。 要注意养成预防近视好习惯&#xf…

dsp28335杂记3

文章目录 DAC实验,SPITLV5620DACADC0实验-------niceDMAADC实验(外设到存储器) 中断 了解皮毛,嘿嘿内置XINTF接口配置 外扩SRAM DMA支持 了解皮毛,嘿嘿eCAP脉冲捕获,重点啦eCAP输出PWM(APWM模…

【学习笔记】从MySQL快速入门 PostgreSQL

PGSQL 菜鸟教程/在线api文档 数据类型语法 DML条件 高级 一、数据类型 数值类型:和mysql类似,叫法不同 特殊:serial 自增整数 名字存储长度描述范围smallint2 字节小范围整数-32768 到 32767integer4 字节常用的整数-2147483648 到 21474…

C++——入门讲解(3)

作者:几冬雪来 时间:2023年4月19日 内容:C入门内容讲解 目录 前言: 1. 引用(续): 1.输出型参数: 2.传引用返回: 2.常引用: 3.auto: 结…

Android安全性:保护你的应用和用户数据

Android安全性:保护你的应用和用户数据 引言 在移动应用开发领域,Android系统占据着主导地位,随着智能手机的广泛普及和移动应用的快速发展,越来越多的开发者投入到Android应用的开发中。然而,随着Android应用的数量不…

React--》useReducer的讲解与使用

目录 useReducer的使用 刨析useReducer参数 useReducer的使用 useReducer的使用 在React函数式组件中,我们可以通过useState()来创建state,这种state创建方式会给我们返回两个东西state和setState()。state用来读取数据,而setState()用来…

走心Python实战应用:【requests+re 模块】快速下载原shen图片

人生苦短,我用python 这次给大家带来的是模块实战 以便大家理解学习 觉得写的好的话,可以给我多多点赞鸭~ 走心Python实战应用:【requestsre 模块】快速下载原shen图片 一、理解Python requests 模块二、requests 方法三、ruqusets 模块实…

第15章_File类与IO流

第15章_File类与IO流 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。 一个File对…