Doris--基础--4.2--数据导入--Insert Into

2023-11-01

Doris–基础–4.2–数据导入–Insert Into


1、介绍

  1. 类似Mysql中的insert语句
  2. 方式:
    1. 通过 insert into table select …的方式从Doris的表中读取数据并导入到另一张表中
    2. 通过 insert into table values(…)的方式插入单条数据

2、格式

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

3、创建导入

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

3.1、语法

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

3.2、示例

3.2.1、准备

建表

CREATE TABLE IF NOT EXISTS test_db.table11
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
    "replication_allocation" = "tag.location.default: 1"
);



CREATE TABLE IF NOT EXISTS test_db.table12
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
    "replication_allocation" = "tag.location.default: 1"
);






3.2.2、示例1

insert into test_db.table11 values(10000,'2017-10-01','北京',20,0,'2017-10-01 06:00:00',20,10,10);
insert into test_db.table11 values(10001,'2017-10-01','北京',30,1,'2017-10-01 17:05:45',2,22,22); 
insert into test_db.table11 values(10002,'2017-10-02','上海',20,1,'2017-10-02 12:59:12',200,5,5); 
insert into test_db.table11 values(10003,'2017-10-02','广州',32,0,'2017-10-02 11:20:00',30,11,11); 
insert into test_db.table11 values(10004,'2017-10-01','深圳',35,0,'2017-10-01 10:00:15',100,3,3); 

在这里插入图片描述

3.2.3、示例2

INSERT INTO table12 WITH LABEL label1 SELECT * FROM table11;

在这里插入图片描述

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

4、导入结果

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

  1. 结果集为空
  2. 结果集不为空

4.1、结果集为空

mysql> insert into table12 select * from table11;
Query OK, 0 rows affected (0.02 sec)
  1. Query OK 表示执行成功。
  2. 0 rows affected 受影响的行数是0。

4.2、结果集不为空

 
mysql> insert into table12 select * from table11;
Query OK, 4 rows affected (0.38 sec)
{'label':'insert_8510c568-9eda-4173-9e36-6adc7d35291c', 'status':'visible', 'txnId':'10'}

mysql> insert into table12 with label my_label1 select * from table11;
Query OK, 4 rows affected (0.38 sec)
{'label':'my_label1', 'status':'visible', 'txnId':'10'}

mysql> insert into table12 select * from table11;
Query OK, 2 rows affected, 2 warnings (0.31 sec)
{'label':'insert_f0747f0e-7a35-46e2-affa-13a235f4020d', 'status':'visible', 'txnId':'10'}

mysql> insert into table12 select * from table11;
Query OK, 2 rows affected, 2 warnings (0.31 sec)
{'label':'insert_f0747f0e-7a35-46e2-affa-13a235f4020d', 'status':'committed', 'txnId':'10'}

{‘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’}

  1. Query OK 表示执行成功。
  2. 0 rows affected 受影响的行数是2。
  3. 2 warnings 表示被过滤的行数是2。
  4. label:
    1. 为用户指定的 label 或自动生成的 label。
    2. Label 是该 Insert Into 导入作业的标识,每个导入作业,都有一个在单 database 内部唯一的 Label。
  5. status:表示导入数据是否可见。
    1. 如果可见:显示 visible
    2. 如果不可见:显示 committed。
  6. txnId:为这个 insert 对应的导入事务的 id。
  7. err:会显示一些其他非预期错误。

4.3、查看数据状态

4.3.1、查看被过滤的行时,用户可以通过如下语句

show load where label="xxx";


MySQL [test_db]> show load where label="my_label1"\G;
*************************** 1. row ***************************
         JobId: 13312
         Label: my_label1
         State: FINISHED
      Progress: ETL:100%; LOAD:100%
          Type: INSERT
       EtlInfo: NULL
      TaskInfo: cluster:N/A; timeout(s):3600; max_filter_ratio:0.0
      ErrorMsg: NULL
    CreateTime: 2023-02-12 20:37:14
  EtlStartTime: 2023-02-12 20:37:14
 EtlFinishTime: 2023-02-12 20:37:14
 LoadStartTime: 2023-02-12 20:37:14
LoadFinishTime: 2023-02-12 20:37:14
           URL: 
    JobDetails: {"Unfinished backends":{},"ScannedRows":0,"TaskNumber":0,"LoadBytes":0,"All backends":{},"FileNumber":0,"FileSize":0}
 TransactionId: 8
  ErrorTablets: {}
1 row in set (0.00 sec)

4.3.1、查看这批数据的可见状态


show transaction where id=txnId;

MySQL [test_db]> show transaction where id=10\G;
*************************** 1. row ***************************
     TransactionId: 10
             Label: my_label3
       Coordinator: FE: 192.168.187.101
 TransactionStatus: VISIBLE
 LoadJobSourceType: INSERT_STREAMING
       PrepareTime: 2023-02-12 20:48:26
     PreCommitTime: NULL
        CommitTime: 2023-02-12 20:48:26
       PublishTime: 2023-02-12 20:48:26
        FinishTime: 2023-02-12 20:48:26
            Reason: 
ErrorReplicasCount: 0
        ListenerId: -1
         TimeoutMs: 300000
            ErrMsg: 
1 row in set (0.00 sec)

TransactionStatus=visible,表示数据可见。

4.4、Insert 执行失败

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

mysql> insert into table12 select * from table11 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:可以用于查询错误的数据

4.5、总结:对于 insert 操作返回结果的正确处理逻辑

  1. 如果返回结果为 ERROR 1064 (HY000),则表示导入失败。
  2. 如果返回结果为 Query OK,则表示执行成功。
  3. 如果 rows affected 为 0,表示结果集为空,没有数据被导入。
  4. 如果 rows affected 大于 0:
    1. 如果 status 为 committed,表示数据还不可见。需要通过 show transaction 语句查看状态直到 visible
    2. 如果 status 为 visible,表示数据导入成功。
  5. 如果 warnings 大于 0,表示有数据被过滤,可以通过 show load 语句获取 url 查看被过滤的行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doris--基础--4.2--数据导入--Insert Into 的相关文章

随机推荐

  • 【数据库系统概论(王珊)】第11章 并发控制

    多事务执行方式 串行执行 交叉并发方式 同时并发方式 为什么要进行并发控制 当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况 若对并发操作不加控制就可能会存取和存储不正确的数据 破坏是事务的一致性和数据库的一致性 所以数据
  • TypeError: super(type, obj): obj must be an instance or subtype of type这个问题怎么处理?

    TypeError super type obj obj must be an instance or subtype of type这个问题怎么处理 这个错误通常发生在使用super 函数时 第二个参数不是第一个参数的实例或子类型 在使用
  • Python绘制多条y轴范围不同的曲线并在一张图上显示

    如何使用Python绘制多条y轴范围不同的曲线 然后把它们合并在一张图上显示 import matplotlib pyplot as plt import numpy as np def multilines target x ys typ
  • Sa-Token 一个轻量级Java权限认证框架

    文章目录 Sa Token 简介 基础使用 框架集成 添加Sa Token依赖 配置Sa Token 配置项解读 sa token cookie 单点登录 OAuth 2 0 登录认证 认证流程 登录与注销 其他操作语句 权限认证 获取当前
  • 程序次序规则

    程序次序规则 一个线程内 按照代码顺序 书写在前面的操作先行发生于书写在后面的操作 对于程序次序规则来说 我的理解就是一段程序代码的执行在单个线程中看起来是有序的 注意 虽然这条规则中提到 书写在前面的操作先行发生于书写在后面的操作 这个应
  • 一个laravel验证码包

    说起验证码 尽管用户反感但还是挺需要的 以前的项目用自己写的基于GeeTest 极验 的 Laravel Vue 组件 这次也考虑过reCaptcha的国内版 不过实在担心改版 收费及其它原因 所以自己用Laravel做一个吧 这个包默认是
  • 利用深度摄像头生成仿激光数据并构建地图

    https blog csdn net chenxingwangzi article details 49026955
  • 使用pandas读取xlsx

    一 使用pandas读取xlsx 引用pandas库 import pandas as pd pd read excel path sheet name 0 header 0 names None index col None usecol
  • python paramiko 连接堡垒机 Linux服务器因为编码格式GB18030,输入命令报错分享

    01 经过检查出现错误的服务器的编码格式是gb18030 正常的都是utf 8 02 所以出现错误的原因在于服务器gb18030的编码格式 03 有趣的地方在于不是所有命令都会出现故障 只是 iostat 这个命令才会报错 04 到现在我都
  • JavaScript刷新页面的方法(包括Frame框架的刷新方式)

    JavaScript刷新页面的方法 1 history go 0 去指定的某页 2 window location reload 刷新当前页面 window location reload true 在实际应用的时候 重新刷新页面的时候 我
  • 最全ASCII对应码表-键值

    OCT 八进制 最全ASCII码对应表 与键盘按键对应值 二进 Bin 十进 Dec 十六进 Hex 缩写 字符 解释 0000 0000 0 00 NUL null 空字符 0000 0001 1 01 SOH start of hand
  • NVIDIA_Tesla_V100_SXM2_32_GB加速卡详细参数

    记录了NVIDIA Tesla V100 SXM2 32 GB加速卡的详细参数 参考链接 https www xincanshu com gpu NVIDIA Tesla V100 SXM2 32 GB canshu html 主要参数 参
  • CLion运行QtCreator项目的基础配置

    目的 配置Clion 打开QtCreator项目 惯于idea ideavim的操作快捷键 加上QtCreator上手不熟悉且不够优雅 选择使用Clion尝试开发 在网上收集资料 加上本地调试 特此记录 1 前提和本次配置软件版本 系统Wi
  • C++知识目录

    1 C STL基本容器使用 https www cnblogs com cxq0017 p 6555533 html tag 顺序容器 关联容器 vector list deque map set map和set还可以看这一篇 https
  • 字符串与内存函数总结

    前言 个人主页 勇敢的小牛儿 推荐专栏 C语言知识点 座右铭 敢于尝试才有机会 今日鸡汤 A person who has never doubted the direction and goal of life will never de
  • 稳压二极管和雪崩二极管的工作原理及选型学习总结

    本篇文章将讲述常见二极管的工作原理 功能及如何选型 小白总结 如有错误 请大神指教 一 稳压二极管 1 工作原理 如图 伏安特性可知 反向通电尚未击穿前 其两端的电压基本保持不变 这样 当把稳压管接入电路以后 若由于电源电压发生波动 或其它
  • 9个用于本地存储的JavaScript库

    HTML5本地存储API Web存储的一部分 具有出色的浏览器支持 并且正在越来越多的应用程序中使用 它具有简单的API 当然也有其缺点 类似于cookie 在过去的一年左右的时间里 我遇到了许多使用localStorage API的工具和
  • Hadoop的一些问题

    关系数据库已经流行很多年 并且Hadoop已经有了HDFS和MapReduce 为什么需要HBase Hadoop可以很少地解决大规模数据的离线批量处理问题 但是 受限于hadoop MapReduce编程框架的高延迟数据处理机制 使得ha
  • https协议

    一 https的简介 HTTPS 全称 Hypertext Transfer Protocol Secure 是以安全为目标的 HTTP 通道 在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 HTTPS 在HTTP 的基础下
  • Doris--基础--4.2--数据导入--Insert Into

    Doris 基础 4 2 数据导入 Insert Into 1 介绍 类似Mysql中的insert语句 方式 通过 insert into table select 的方式从Doris的表中读取数据并导入到另一张表中 通过 insert