DorisDB提供了多种导入方式,用户可以根据数据量大小、导入频率等要求选择最适合自己业务需求的导入方式。

数据导入: 

  • 1、离线数据导入:如果数据源是Hive/HDFS,推荐采用 Broker Load 导入, 如果数据表很多导入比较麻烦可以考虑使用Hive外表直连查询,性能会比Broker load导入效果差,但是可以避免数据搬迁,如果单表的数据量特别大,或者需要做全局数据字典来精确去重可以考虑 Spark Load 导入。
  • 2、实时数据导入:日志数据和业务数据库的binlog同步到Kafka以后,优先推荐通过 Routine load 导入DorisDB,如果导入过程中有复杂的多表关联和ETL预处理可以使用Flink处理以后用 stream load 写入DorisDB
  •  3、程序写入DorisDB:推荐使用Stream Load
  • 4、Mysql数据导入:推荐使用Mysql外表insert into new_table select * from external_table 的方式导入
  • 5、DorisDB内部导入:可以在DorisDB内部使用 insert into tablename select 的方式导入,可以跟外部调度器配合实现简单的ETL处理
  •  6、其他数据源导入:推荐使用 DataX 导入

外部表:

  • DorisDB支持以外部表的形式,接入其他数据源。
  • 外部表指的是保存在其他数据源中的数据表
  • 目前DorisDB已支持的第三方数据源包括 MySQL、HDFS、ElasticSearch,Hive。

重点目录:

  • 1.1 Broker Load
  • 1.2 Spark Load
  • 1.3 Stream Load
  • 1.4 Routine Load
  • 2.1 MySQL外部表
  • 2.2 ElasticSearch外部表

1.1  Broker Load


在Broker Load模式下,通过部署的 Broker 程序,DorisDB可读取对应数据源(如HDFS, S3、阿里云 OSS、腾讯 COS)上的数据,利用自身的计算资源对数据进行预处理和导入。这是一种异步的导入方式,用户需要通过MySQL协议创建导入,并通过查看导入命令检查导入结果。

1、名词解释

  • Broker:Broker 为一个独立的无状态进程,封装了文件系统接口,为 DorisDB 提供读取远端存储系统中文件的能力
  • Plan:导入执行计划,BE会执行导入执行计划将数据导入到DorisDB系统中。

2、语法:

  • LOAD LABEL db_name.label_name
    (data_desc, ...)
    WITH BROKER broker_name broker_properties
    [PROPERTIES (key1=value1, ... )] data_desc:
    DATA INFILE ('file_path', ...)
    [NEGATIVE]
    INTO TABLE tbl_name
    [PARTITION (p1, p2)]
    [COLUMNS TERMINATED BY column_separator ]
    [FORMAT AS file_type]
    [(col1, ...)]
    [SET (k1=f1(xx), k2=f2(xx))]
    [WHERE predicate] broker_properties:
    (key2=value2, ...)

说明:

1)、Label:导入任务的标识。每个导入任务,都有一个数据库内部唯一的Label。Label是用户在导入命令中自定义的名称。

  • 通过这个Label,用户可以查看对应导入任务的执行情况,并且Label可以用来防止用户导入相同的数据。
  • 当导入任务状态为FINISHED时,对应的Label就不能再次使用了。
  • 当 Label 对应的导入任务状态为CANCELLED时,可以再次使用该Label提交导入作业。

2)、data_desc:每组 data_desc表述了本次导入涉及到的数据源地址,ETL 函数,目标表及分区等信息。

示例 :参见:https://www.kancloud.cn/dorisdb/dorisdb/2146000

1.2 Spark Load


Spark Load 通过外部的 Spark 资源实现对导入数据的预处理提高 DorisDB 大数据量的导入性能并且节省 Doris 集群的计算资源。主要用于初次迁移、大数据量导入 DorisDB 的场景(数据量可到TB级别)

1、基本原理

Spark Load 任务的执行主要分为以下几个阶段:

  • 1、用户向 FE 提交 Spark Load 任务;
  • 2、FE 调度提交 ETL 任务到 Spark 集群执行。
  • 3、Spark 集群执行 ETL 完成对导入数据的预处理。包括全局字典构建(BITMAP类型)、分区、排序、聚合等。
  • 4、ETL 任务完成后,FE 获取预处理过的每个分片的数据路径,并调度相关的 BE 执行 Push 任务。
  • 5、BE 通过 Broker 读取数据,转化为 DorisDB 存储格式。
  • 6、FE 调度生效版本,完成导入任务。

2、预处理流程:

  • 1、从数据源读取数据,上游数据源可以是HDFS文件,也可以是Hive表。
  • 2、对读取到的数据完成字段映射、表达式计算,并根据分区信息生成分桶字段bucket_id。
  • 3、根据DorisDB表的Rollup元数据生成RollupTree。
  • 4、遍历RollupTree,进行分层的聚合操作,下一个层级的Rollup可以由上一个层的Rollup计算得来。
  • 5、每次完成聚合计算后,会对数据根据bucket_id进行分桶然后写入HDFS中。
  • 6、后续Broker会拉取HDFS中的文件然后导入DorisDB BE节点中。

3、基本操作参见:https://www.kancloud.cn/dorisdb/dorisdb/2146001

1.3 Stream Load


Stream Load 是一种同步的导入方式,用户通过发送 HTTP 请求将本地文件或数据流导入到 DorisDB 中。Stream Load 同步执行导入并返回导入结果。用户可直接通过请求的返回值判断导入是否成功。

1、主要流程:

说明:

  • Stream Load 中,用户通过HTTP协议提交导入命令。
  • 如果提交到FE节点,则FE节点会通过HTTP redirect指令将请求转发给某一个BE节点,用户也可以直接提交导入命令给某一指定BE节点。
  • BE节点作为Coordinator节点,将数据按表schema划分并分发数据到相关的BE节点。
  • 导入的最终结果由 Coordinator节点返回给用户。

2、基本操作参见:https://www.kancloud.cn/dorisdb/dorisdb/2146002

1.4 Routine Load


Routine Load 是一种例行导入方式,DorisDB通过这种方式支持从Kafka持续不断的导入数据,并且支持通过SQL控制导入任务的暂停、重启、停止

1、基本原理

导入流程说明:

  • 1、用户通过支持MySQL协议的客户端向 FE 提交一个Kafka导入任务。
  • 2、FE将一个导入任务拆分成若干个Task,每个Task负责导入指定的一部分数据。
  • 3、每个Task被分配到指定的 BE 上执行。在 BE 上,一个 Task 被视为一个普通的导入任务,通过 Stream Load 的导入机制进行导入。
  • 4、BE导入完成后,向 FE 汇报。
  • 5、FE 根据汇报结果,继续生成后续新的 Task,或者对失败的 Task 进行重试。
  • 6、FE 会不断的产生新的 Task,来完成数据不间断的导入。

2、基本操作参见:https://www.kancloud.cn/dorisdb/dorisdb/2146003

2.1 MySQL外部表


星型模型中,数据一般划分为维度表和事实表。维度表数据量少,但会涉及UPDATE操作。目前DorisDB中还不直接支持UPDATE操作(可以通过Unique数据模型实现),在一些场景下,可以把维度表存储在MySQL中,查询时直接读取维度表

在使用MySQL的数据之前,需在DorisDB创建外部表,与之相映射。DorisDB中创建MySQL外部表时需要指定MySQL的相关连接信息,如下图。

2.2 ElasticSearch外部表


DorisDB与ElasticSearch都是目前流行的分析系统,DorisDB强于大规模分布式计算,ElasticSearch擅长全文检索。DorisDB支持ElasticSearch访问的目的,就在于将这两种能力结合,提供更完善的一个OLAP解决方案。

1、建表示例

2、谓词下推

DorisDB支持对ElasticSearch表进行谓词下推,把过滤条件推给ElasticSearch进行执行,让执行尽量靠近存储,提高查询性能。目前支持哪个下推的算子如下表。

3、详细说明参见:https://www.kancloud.cn/dorisdb/dorisdb/2146013

参考资料:


八、Doris外部表及数据导入的更多相关文章

  1. mysql 开发进阶篇系列 50 表的数据导入(load data infile,mysqlimport )

    一.概述 上篇讲到的表的数据导出(select .. into outfile 或者mysqldump),这篇继续讲表的数据导入,导入也同样有二个方法,分别是load data infile... 和 ...

  2. 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中

    oracle数据库实现一张表的数据导入到另外一个数据库的表中的方法有很多,在这介绍两个. 第一种,把oracle查询的数据导出为sql文件,执行sql文件里的insert语句,如下: 第一步,导出sq ...

  3. sql 从一个库中取某个表的数据导入到另一个库中相同结构的表中

    sql 2008 从一个库中把 某个表中的数据导入到另一个库中的具有相同结构的表中 use 库1 go insert into  库1.dbo.表1  select * from  库2.dbo.表1 ...

  4. 使用oracle外部表进行数据泵卸载数据

    数据泵卸载Oracle9i引入了外部表,作为向数据库中读取数据的一种方法.Oracle 10g则从另一个方向引入了这个特性,可以使用CREATE TABLE语句创建外部数据,从而由数据库卸载数据.从O ...

  5. sqlserver怎么将excel表的数据导入到数据库中

    在数据库初始阶段,我们有些数据在EXCEL中做好之后,需要将EXCEL对应列名(导入后对应数据库表的字段名),对应sheet(改名为导入数据库之后的表名)导入指定数据库, 相当于导入一张表的整个数据. ...

  6. 22.把hive表中数据导入到mysql中

    先通过可视化工具链接mysql,在链接的时候用sqoop 用户登录 在数据库userdb下新建表 保存,输入表名upflow 现在我们需要把hive里面的数据通过sqoop导入到mysql里面 sqo ...

  7. SqlServer批量Sql一个表的数据导入到另一个数据

    一个表的导入: SET IDENTITY_INSERT [master_new].[dbo].[OpinionList] ON INSERT INTO [master_new].[dbo].[Opin ...

  8. springboot使用EasyExcel,导出数据到Excel表格,并且将Excel表中数据导入

    一.导出至Excel 1.导入依赖 导出方法需要使用到fastJson的依赖,这里也直接导入 点击查看代码 <!--阿里的easyexcel--> <dependency> & ...

  9. SQLServer将一个表的数据导入到另一个表

    1.假如A表存在 insert into A(a,b,c) (select a,b,c from B) 2.假如A表不存在 select a,b,c into A from B 3.假如需要跨数据库 ...

  10. Oracle数据库中将一个数据库中一张表的数据导入到另外一张表

    INSERT INTO DBTHNEW.L_MEMBER_ROLE_REL SELECT    *FROM    DBTH.L_MEMBER_ROLE_REL

随机推荐

  1. ABC327 A-F

    vp on 2023.11.12 A: 使用 string 的 find,find 在找不到时会返回string::npos. B.C:略. D 发现原题相当于二分图判定. E 线性DP. F 原题相 ...

  2. Base64编码的全面介绍

    1. Base64的定义和作用 Base64是一种用64个字符表示二进制数据的编码方式,通常用于在网络传输中将二进制数据转换为可打印字符的形式.Base64编码后的数据由大小写字母.数字和特殊字符组成 ...

  3. #原根,BSGS,扩欧,矩阵乘法#CF1106F Lunar New Year and a Recursive Sequence

    题目 已知数列 \(f\) 满足 \(f_{1\sim k-1}=1\) 且 \(f_n=m\), 并且知道 \(f_i=(\prod_{j=1}^kf_{i-j}b_j)\bmod{99824435 ...

  4. #RMQ,动态开点线段树#CF803G Periodic RMQ Problem

    题目 给定\(n\)个数,将这个数列复制\(k\)次得到数列\(a\), 对\(a\)满足区间赋值操作和区间最小值询问 \(n\leq 10^5,q\leq 10^5,k\leq 10^4即|a|\l ...

  5. #dp,概率期望#AT4513 [AGC030D] Inversion Sum

    题目 分析 考虑每次交换最多影响到\(2n\)个点对的逆序对判断 不妨设\(dp[i][j]\)表示\(a[i]>a[j]\)的概率,一开始按照\(a\)求出初始的\(dp\) 之后每次交换或不 ...

  6. 【直播回顾】OpenHarmony知识赋能第五期第一课——精益开源

    4月26日晚上19点,知识赋能第五期第一节课<精益开源--理解设计思维.精益创业.敏捷开发是如何应用到开源项目中>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由开源 ...

  7. 用HarmonyOS做一个可以手势控制的电子相册应用(ArkTS)

    介绍 本篇 Codelab 介绍了如何实现一个简单的电子相册应用,主要功能包括: 1.  实现首页顶部的轮播效果. 2.  实现页面多种布局方式. 3.  实现通过手势控制图片的放大.缩小.左右滑动查 ...

  8. node require 运行步骤

    前言 准备整理node 系列,先把一些基础含义放出来. 在学习node 的时候我们一般加载模块都是require,那么require 是如何运行的呢? 正文 通常,在Node.js里导入是通过 req ...

  9. 重新整理数据结构与算法(c#)—— 算法套路动态规划算法[二十六]

    前言 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法. 这样一听和分治算法有点相似啊. 是的,分治算法也是将大问题分为小问题,但是他们毕竟不同,不同之处在什么地 ...

  10. Jedis连接踩坑日记

    Jedis连接踩坑日记 背景: 线上某块业务的增删改功能全部都不可用.页面发送了xhr请求之后 状态一直处于pending状态,后端没有日志产生 排查路线与解决办法 第一:由于服务在内网里面,无法进行 ...