暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式数据库学习Note218:OceanBase社区版中,使用 INSERT INTO SELECT 语句旁路导入数据

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/


INSERT INTO SELECT 语句通过 Hint 使用 append 加上 enable_parallel_dml 来走旁路导入。

使用限制

  • 只支持 PDML(Parallel Data Manipulation Language,并行数据操纵语言),非 PDML 不能用旁路导入。
  • 不能两个语句同时写一个表,因为导入的过程中会先加表锁。
  • 不支持在触发器(Trigger)使用。
  • 支持 lob 类型,但是性能比较差,lob 会走原来事务写入数据的路径。
  • 不能在多行事务中运行。

语法

INSERT INTO /*+ append enable_parallel_dml parallel(N) */ table_name select_sentence

更多 INSERT INTO 语法的信息,请参见 INSERT(MySQL 模式) 和 INSERT(Oracle 模式)

参数解释:

参数描述
append表示走旁路导入。
enable_parallel_dml parallel(N)加载数据的并行度,N 默认为 4
说明
一般情况下,enable_parallel_dml Hint 和 parallel Hint 必须配合使用才能开启并行 DML。不过,当目标表的 Schema 上指定了表级别的并行度时,仅需指定 enable_parallel_dml Hint。

示例

使用旁路导入将表 tbl2 中的部分数据导入到 tbl1 中。

obclient [test]> SELECT * FROM tbl1;
Empty set

obclient [test]> SELECT * FROM tbl2;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
|    1 | a1   |   11 |
|    2 | a2   |   22 |
|    3 | a3   |   33 |
+------+------+------+
3 rows in set

obclient [test]> INSERT INTO /*+ append enable_parallel_dml parallel(16) */ tbl1 SELECT t2.col1,t2.col3 FROM tbl2 t2;
Query OK, 3 rows affected
 Records: 3  Duplicates: 0  Warnings: 0

obclient [test]> SELECT * FROM tbl1;
+------+------+
| col1 | col2 |
+------+------+
|    1 |   11 |
|    2 |   22 |
|    3 |   33 |
+------+------+
3 rows in set

在 EXPLAIN EXTENDED 语句的返回结果的 Note 中,查看是否通过旁路导入写入的数据。

obclient [test]> EXPLAIN EXTENDED INSERT INTO /*+ append enable_parallel_dml parallel(16) */ tbl1 SELECT t2.col1,t2.col3 FROM tbl2 t2;



欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论