GBase 南大通用 8a 的Merge介绍

目录

1 环境信息

属性版本
操作系统redhat7
cpux86
GBASE 南大通用 8a953.27.20

2 说明

GBASE 南大通用 8a支持Merge语法
示例如下:
MERGE INTO a USING table_x b
ON (a.hash_col = b.hash_col)
WHEN MATCHED THEN UPDATE SET a.column = b.column,…
WHEN NOT MATCHED THEN INSERT (a.column,…) VALUES (b.column,…)

注意

  • UPDATE 部分不支持 DELETE 子句。
  • UPDATE 部分和 INSERT 部分不支持 WHERE 子句。
  • UPDATE 部分和 INSERT 部分可以省略,但不可以同时省略,否则报语法
    错误。
  • UPDATE 部分和 INSERT 部分位置不可以颠倒。
  • INSERT 的 VALUES 部分不允许使用 MERGE 表。
  • UPDATE 或 INSERT 中的列如果出现多次,不会报错,后指定的列生效,
    但建议不要依赖于该行为,避免这样使用。
  • 不允许一对多更新:如果 MERGE 表中的一行与 USING 表中的多行符合
    连接条件,则报错。
  • MERGE INTO a 语句中,a 表必须是哈希分布表。
  • USING table_x b ON (a.hash_col = b.hash_col)这部分中包含 JOIN 条件语
    句,JOIN 条件中必须存在 a 表哈希分布列的等值关联条件,且该关联条件
    下,哈希分布列必须是物理列的关联,不能是表达式、函数。
  • 如果主表不是hash表 会报错Can’t DO Merge when not able to build hash (redistribution) JOIN relationship between merge target and source.

3 样例

示例 :对 t1 表进行 MERGE 操作

gbase> select * from t1;
+------+-------+------------+---------+
| i    | vc    | d          | dc      |
+------+-------+------------+---------+
|    5 | wto   | 2013-02-03 | 110.210 |
|    1 | one   | 2013-02-03 |  11.210 |
|    3 | one2  | 2013-03-03 |  31.210 |
|   11 | one3  | 2013-08-03 |  41.210 |
|    2 | two   | 2013-04-03 |  12.210 |
|   33 | third | 2013-09-04 |  11.216 |
|    8 | five  | 2013-02-03 | 811.201 |
|   14 | three | 2013-07-22 | 161.218 |
| NULL | first | 2013-02-03 | 311.910 |
+------+-------+------------+---------+
9 rows in set (Elapsed: 00:00:00.01)

gbase> select * from t2;
+------+-------+------------+---------+
| i    | vc    | d          | dc      |
+------+-------+------------+---------+
|    1 | one   | 2013-02-03 |  11.200 |
|   14 | three | 2013-06-22 | 161.218 |
|    2 | two   | 2013-08-03 |  12.810 |
|   13 | one2  | 2013-09-03 |  31.010 |
|   30 | third | 2013-09-04 |  11.216 |
|  110 | one3  | 2013-08-03 |  41.210 |
+------+-------+------------+---------+
6 rows in set (Elapsed: 00:00:00.01)

gbase> MERGE INTO t1 USING t2 ON t1.i=t2.i WHEN MATCHED THEN
    -> UPDATE SET t1.vc=t2.vc WHEN NOT MATCHED THEN
    -> INSERT(t1.i,t1.vc) VALUES(t2.i,t2.vc);
Query OK, 6 rows affected (Elapsed: 00:00:00.15)
Rows matched: 6  Changed: 6  Warnings: 0

gbase> select * from t1;
+------+-------+------------+---------+
| i    | vc    | d          | dc      |
+------+-------+------------+---------+
|    3 | one2  | 2013-03-03 |  31.210 |
|    1 | one   | 2013-02-03 |  11.210 |
|    5 | wto   | 2013-02-03 | 110.210 |
|   13 | one2  | NULL       |    NULL |
|   33 | third | 2013-09-04 |  11.216 |
|    8 | five  | 2013-02-03 | 811.201 |
|    2 | two   | 2013-04-03 |  12.210 |
|   11 | one3  | 2013-08-03 |  41.210 |
|   30 | third | NULL       |    NULL |
|  110 | one3  | NULL       |    NULL |
| NULL | first | 2013-02-03 | 311.910 |
|   14 | three | 2013-07-22 | 161.218 |
+------+-------+------------+---------+
12 rows in set (Elapsed: 00:00:00.01)

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值