Apache Doris (三十六):通过外部表同步数据到Doris及Doris数据导入总结

目录

​​​​​​​1. 通过外部表同步数据到Doris

2. Doris数据导入总结


进入正文之前,欢迎订阅专题、对博文点赞、评论、收藏,关注IT贫道,获取高质量博客内容!

宝子们订阅、点赞、收藏不迷路!抓紧订阅专题!


1. 通过外部表同步数据到Doris

Doris 可以创建外部表。创建完成后,可以通过 SELECT 语句直接查询外部表的数据,也可以通过 INSERT INTO SELECT 的方式导入外部表的数据。

Doris 外部表目前支持的数据源包括:MYSQL、Oracle、PostgreSQL、SQLServer、HIVE、ICEBERG 、HUDI、ElasticSearch,主要通过 ENGINE 类型来标识是哪种类型的外部表。具体使用方式可以参考官网:CREATE-EXTERNAL-TABLE - Apache Doris

特别需要注意的一点是Doris中官方提供的安装包中默认不支持MySQL 外表,主要原因是底层依赖库不兼容问题,如果想要支持MySQL外表需要手动进行编译Doris时加入“WITH_MYSQL=1 ”选项。如果想要通过Doris读取MySQL中的数据官方建议使用JDBC方式来读取,具体可以参考后续章节中JDBC Catalog部分。

这里以在Doris中创建Hive 外表方式来演示Doris通过外部表同步数据到Doris操作。

1)启动HDFS集群和Hive,创建Hive表并加载数据

#node3~node5启动zookeeper

[root@node3 ~]# zkServer.sh start

[root@node4 ~]# zkServer.sh start

[root@node5 ~]# zkServer.sh start



#node1 启动HDFS

[root@node1 ~]# start-all.sh



#node1 Hive 服务端启动metastore ,node3节点启动Hive客户端并设置本地模式

[root@node1 ~]# hive --service metastore &

[root@node3 ~]# hive

hive> set hive.exec.mode.local.auto=true;



#创建Hive表并插入数据

hive> create table persons (id int,name string,age int,score int) row format delimited fields terminated by '\t';

hive> insert into persons values (1,'zs',18,100),(2,'ls',19,200),(3,'ww',20,300);



#查询表 persons数据

hive> select * from persons;

OK

1 zs 18 100

2 ls 19 200

3 ww 20 300

2)在Doris中创建Hive 外部表

CREATE EXTERNAL TABLE example_db.hive_doris_tbl2
(
id INT,
name varchar(255),
age INT,
score INT
)
ENGINE=hive
properties
(

"dfs.nameservices"="mycluster",

"dfs.ha.namenodes.mycluster"="node1,node2",

"dfs.namenode.rpc-address.mycluster.node1"="node1:8020",

"dfs.namenode.rpc-address.mycluster.node2"="node2:8020",

"dfs.client.failover.proxy.provider.mycluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"database" = "default",
"table" = "persons",
"hive.metastore.uris" = "thrift://node1:9083"
);

3)查询Doris MySQL 外部表数据

mysql> select * from hive_doris_tbl2;

+------+------+------+-------+

| id   | name | age  | score |

+------+------+------+-------+

|    1 | zs   |   18 |   100 |

|    2 | ls   |   19 |   200 |

|    3 | ww   |   20 |   300 |

+------+------+------+-------+

4)在Doris中创建新的表,并通过insert  into 方式同步hive外表数据

#doris 创建新表

create table doris_tbl(

id int,

name string,

age int

)

ENGINE = olap

DUPLICATE KEY(id)

DISTRIBUTED BY HASH(`id`) BUCKETS 8;



#通过insert into 方式同步Hive外表数据

mysql> insert into doris_tbl select id ,name ,age from hive_doris_tbl2 limit 100;





#查询Doris 新表数据

mysql> select * from doris_tbl;

+------+------+------+

| id   | name | age  |

+------+------+------+

|    2 | ls   |   19 |

|    3 | ww   |   20 |

|    1 | zs   |   18 |

+------+------+------+

2. Doris数据导入总结

  1. Doris 中的所有导入操作都有原子性保证,即一个导入作业中的数据要么全部成功,要么全部失败,不会出现仅部分数据导入成功的情况。
  2. 一个导入作业都会有一个 Label。这个 Label 是在一个数据库(Database)下唯一的,用于唯一标识一个导入作业。Label 可以由用户指定,部分导入功能也会由系统自动生成。
  3. Label 是用于保证对应的导入作业,仅能成功导入一次。一个被成功导入的 Label,再次使用时,会被拒绝并报错 Label already used。通过这个机制,可以在 Doris 侧做到 At-Most-Once 语义。如果结合上游系统的 At-Least-Once 语义,则可以实现导入数据的 Exactly-Once 语义。
  4. Insert Into 可以导入用户values 制定的数据也可以导入外部表同步数据到Doris表。
  5. Binlog Load 只能导入MySQL数据库binlog数据,目前不支持DDL语句。
  6. Borker Load 主要用于导入远端存储数据到Doris中,例如:HDFS、阿里云OSS、亚马逊S3。
  7. HDFS Load 主要用于将HDFS中的数据导入到Doris中,类似的还有S3 Load。
  8. Spark Load 与Broker Load 类似,通过外部的 Spark 资源实现对导入数据,提高 Doris 大数据量的导入性能并且节省 Doris 集群的计算资源。
  9. Routine Load 支持用户提交一个常驻的导入任务,不断的从指定的数据源读取数据导入Doris中,目前仅支持Kafka。
  10. Stream Load 通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中,主要用于导入本地文件。
  11. MYSQL、Oracle、PostgreSQL、SQLServer、HIVE、ICEBERG 、HUDI、ElasticSearch可以通过创建Doris外部表的方式导入到Doris中。

个人主页:IT贫道_Apache Doris,Kerberos安全认证,随笔-CSDN博客 主页包含各种IT体系技术订阅:拥抱独家专题,你的订阅将点燃我的创作热情!
点赞:赞同优秀创作,你的点赞是对我创作最大的认可!
⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!
✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


你可能感兴趣的:(Apache,Doris,doris,olap,实时数仓,数据仓库,分布式数据库,大数据)