GBase 8a 的Merge into 功能使用介绍

GBase 8a支持Merge 合并功能,混合了update和insert,本文介绍其使用方法。该功能指针对Hash分布表,否则会报错ERROR 1149 (42000): (GBA-02SC-1001) Can’t DO Merge when not able to build hash (redistribution) JOIN relationship between merge target and source.

语法

Merge into TABLE1 using TABLE2 on ( match condition)
WHEN MATCHED THEN UPDATE_CLUSE
WHEN NOT MATCHED THEN INSERT_CLUSE

说明

  • match_condition 表关联条件
  • UPDATE_CLUSE 更新操作的set 部分
  • INSERT_CLUSE 插入操作的字段列表和values值列表部分

改功能,只能用于Hash分布表,且关联条件包含Hash分布列。随机分布表做merge会报错

ERROR 1149 (42000): (GBA-02SC-1001) Can't DO Merge when not able to build hash (redistribution) JOIN relationship between merge target and source.

样例

t1 是主表,t2是变动表,要将t2的数据merge到主表T1

环境

gbase> select * from t1;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    1 | 1111 | 2011-11-11 |
|    9 | 9999 | 2011-09-09 |
+------+------+------------+
2 rows in set (Elapsed: 00:00:00.01)

gbase> select * from t2;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    1 | 1212 | 2011-12-12 |
|    2 | 2222 | 2022-12-12 |
|    3 | 3333 | 2033-12-12 |
+------+------+------------+
3 rows in set (Elapsed: 00:00:00.01)

Merge

匹配上的id=1被更新了,没匹配上的2和3被insert了。

gbase> merge into t1 using t2 on t1.id=t2.id when matched then update set t1.name=t2.name,t1.birth=t2.birth when not matched then insert(id,name,birth)values(t2.id,t2.name,t2.birth);
Query OK, 3 rows affected (Elapsed: 00:00:00.13)
Rows matched: 3  Changed: 3  Warnings: 0

gbase> select * from t1;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    9 | 9999 | 2011-09-09 |
|    1 | 1212 | 2011-12-12 |
|    2 | 2222 | 2022-12-12 |
|    3 | 3333 | 2033-12-12 |
+------+------+------------+
4 rows in set (Elapsed: 00:00:00.01)

只包含Matched,用于更新

gbase> truncate table t1;
Query OK, 4 rows affected (Elapsed: 00:00:00.21)

gbase> insert into t1 values(1,'1111','2011-11-11'),(9,'9999','2011-09-09');
Query OK, 2 rows affected (Elapsed: 00:00:00.14)
Records: 2  Duplicates: 0  Warnings: 0

gbase> select * from t1;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    1 | 1111 | 2011-11-11 |
|    9 | 9999 | 2011-09-09 |
+------+------+------------+
2 rows in set (Elapsed: 00:00:00.01)

gbase> merge into t1 using t2 on t1.id=t2.id when matched then update set t1.name=t2.name,t1.birth=t2.birth;                      Query OK, 1 row affected (Elapsed: 00:00:00.17)
Rows matched: 1  Changed: 1  Warnings: 0

gbase> select * from t1;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    9 | 9999 | 2011-09-09 |
|    1 | 1212 | 2011-12-12 |
+------+------+------------+
2 rows in set (Elapsed: 00:00:00.01)

只包含NOT Matched用于插入新数据

gbase> truncate table t1;
Query OK, 2 rows affected (Elapsed: 00:00:00.16)

gbase> insert into t1 values(1,'1111','2011-11-11'),(9,'9999','2011-09-09');
Query OK, 2 rows affected (Elapsed: 00:00:00.12)
Records: 2  Duplicates: 0  Warnings: 0

gbase> merge into t1 using t2 on t1.id=t2.id when not matched then insert(id,name,birth)values(t2.id,t2.name,t2.birth);           Query OK, 2 rows affected (Elapsed: 00:00:00.17)
Rows matched: 2  Changed: 2  Warnings: 0

gbase> select * from t1;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|    1 | 1111 | 2011-11-11 |
|    9 | 9999 | 2011-09-09 |
|    2 | 2222 | 2022-12-12 |
|    3 | 3333 | 2033-12-12 |
+------+------+------------+
4 rows in set (Elapsed: 00:00:00.00)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gbase 8a 是一款国产的高性能关系型数据库管理系统,与MySQL是两款不同的数据库软件,因此不能直接使用MySQL的驱动来连接gbase 8a。 不过,gbase 8a提供了自己的ODBC驱动,可以使用ODBC的方式来连接gbase 8a数据库。在Java中,我们可以使用JDBC-ODBC桥来连接gbase 8a数据库,具体步骤如下: 1. 安装gbase 8a ODBC驱动,可以从gbase官网下载或联系gbase技术支持获取下载链接。 2. 配置ODBC数据源,在控制面板中打开“ODBC数据源”窗口,添加一个gbase的数据源,填写相应的连接信息。 3. 在Java中使用JDBC-ODBC桥来连接gbase 8a数据库,示例代码如下: ``` String url = "jdbc:odbc:yourdataresource"; // 数据源名称 String user = "username"; // 数据库用户名 String password = "password"; // 数据库密码 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection(url, user, password); ``` 在上述代码中,"jdbc:odbc:yourdataresource" 中的 "yourdataresource" 是ODBC数据源的名称,user 和 password 分别是gbase 8a数据库的用户名和密码。通过 Class.forName() 加载 JDBC-ODBC桥的驱动程序,在 DriverManager.getConnection() 方法中传入连接字符串、用户名和密码来获取连接对象。 4. 进行数据库操作,使用JDBC标准的API进行数据库操作,例如: ``` Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM tableName"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); //处理查询结果 } rs.close(); stmt.close(); conn.close(); ``` 以上就是使用JDBC-ODBC桥连接gbase 8a数据库的基本步骤,希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值