返回首页

gbase数据、南大通用产品文档:GBase8aDBLINK 数据推送

更新日期:2024年09月11日


支持insert …select 语句的目标表为dblink 远端表,
支持通过insert …select 语
句将本地数据推送到远端;

本地数据推送到远端oracle 表时需注意:
oracle 字符类型是字节为单位,
而gbase
字符类型是字符为单位,
所以gbase 源表和oracle 目标表含有相同类型字段char(255)
时,该字段的数据推送到oracle 可能会出现插入时越界情况;

同时支持passthrough 直通模式,即GCluster 不对指定的SQL 做语法解析,请
求网关直接转发指定的SQL 到远端数据库执行,
通过passthrough 模式可实现对远
端表进行insert…values,delete,update 等操作。

函数说明
SUBTIME()将expr2 从expr 中减去并返回结果。
expr 是一个time 或者datetime 表达式,expr2 是一个时间表达式。
示例
示例1:返回“2020-12-31 23:59:59.999999”减去“1 1:1:1.000002”的值。
gbase> SELECT SUBTIME('2020-12-31 23:59:59.999999','1 1:1:1.000002')
FROM dual;
+--------------------------------------------------------+
| SUBTIME('2020-12-31 23:59:59.999999','1 1:1:1.000002') |
+--------------------------------------------------------+
| 2020-12-30 22:58:58.999997
|

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
814
+--------------------------------------------------------+
1 row in set

功能说明
JOIN 是在两个或多个表中查询数据。
GBase 8a MPP Cluster 支持的JOIN 功能大概分为如下几类:

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
在缺乏连接条件时,INNER JOIN 和,(逗号)在语义上是等价的:都是在
指定的两个表之间生成一个笛卡尔乘积(也就是,第一个表中的每一行都与
第二个表中的所有行连接起来)。

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
如果在LEFT JOIN 的ON 或USING 部分的右表中没有匹配的记录,那么该
右表一行中的所有列都设置为NULL。可以用这种方法找出一个表和另一个
表之间不匹配的记录。

RIGHT JOIN(右连接):与LEFT JOIN 相反,用于获取右表所有记录,
即使左表没有对应匹配的记录。

FULL JOIN/FULL OUTER JOIN(全连接):可以看成是LEFT JOIN(左连
接)和RIGHT JOIN(右连接)结果的合集。但是FULL JOIN 跟LEFT
JOIN...UNION RIGHT JOIN...并不完全等价,因为UNION 会去除重复记录。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1076
说明

当进行简单等值关联(简单等值关联需要同时满足等值JOIN 和等
值JOIN 条件两边都是物理列不是表达式两个条件。)时,且JOIN
涉及分布式Hash JOIN,则需要受如下限制约束:

JOIN 两边的数据类型必须相同;

进行CHAR JOIN CHAR 时,精度必须相同;

JOIN 两边数据类型不同时,
仅支持CHAR 与VARCHAR,
INT

(包括INT,
BIGINT,
SMALLINT,
TINYINT)
与VARCHAR
之间做关联查询。
语法格式
GBase 8a MPP GCluster SQL 支持下面的JOIN 语法:
table_references:
table_reference [, table_reference] …
table_reference:
table_factor
| join_table
table_factor:
[vc_name.][database_name.]table_name [[AS] alias]
| ( table_references )
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference LEFT [OUTER] JOIN table_reference join_condition
| table_reference RIGHT [OUTER] JOIN table_reference join_condition
| table_reference FULL [OUTER] JOIN table_reference join_condition
join_condition:
ON conditional_expr
| USING (column_list)
表5- 98 参数说明
参数名称


USING(column_list)
用于为一系列的列进行命名。这些列必须同时在两个表中存
在。如果表a 和表b 都包含列c1、c2 和c3,则以下联合会包
含来自两个表的对应的列:
1)a LEFT JOIN b USING (c1,c2,c3)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1077
参数名称


2)a LEFT JOIN b ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 =
b.c3
Vc_name
vc 命,可选项。
database_name
数据库名,可选项。
table_name
表名
示例
示例1:join 语法示例。
示例中所用的表及数据:
CREATE TABLE t1(id INT,name VARCHAR(30));
CREATE TABLE t2(id INT,title VARCHAR(20),name VARCHAR(30));
INSERT INTO t1 VALUES(1,'name1'),(2,'name2'),(3,'name3');
INSERT INTO t2 VALUES(1,'t1','name1'),(3,'t3','name3'),(4,'t4','name4');
gbase> SELECT * FROM t1;
+------+-------+
| id
| name
|
+------+-------+
|
1 | name1 |
|
2 | name2 |
|
3 | name3 |
+------+-------+
3 rows in set (Elapsed: 00:00:00.07)
gbase> SELECT * FROM t2;
+------+-------+-------+
| id
| title | name
|
+------+-------+-------+
|
1 | t1
| name1 |
|
3 | t3
| name3 |
|
4 | t4
| name4 |
+------+-------+-------+
3 rows in set (Elapsed: 00:00:00.03)
INNER JOIN:
gbase> SELECT a.id,a.name,b.name,b.title FROM t1 a INNER JOIN t2 b ON

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1078
a.id=b.id;
+------+-------+-------+-------+
| id
| name
| name
| title |
+------+-------+-------+-------+
|
1 | name1 | name1 | t1
|
|
3 | name3 | name3 | t3
|
+------+-------+-------+-------+
2 rows in set (Elapsed: 00:00:00.15)
WHERE 子句方式,等价于上面的INNER JON:
gbase> SELECT a.id,a.name,b.name,b.title FROM t1 a,t2 b
WHERE
a.id=b.id;
+------+-------+-------+-------+
| id
| name
| name
| title |
+------+-------+-------+-------+
|
1 | name1 | name1 | t1
|
|
3 | name3 | name3 | t3
|
+------+-------+-------+-------+
2 rows in set (Elapsed: 00:00:00.12)
LEFT JOIN:
gbase> SELECT a.id,a.name,b.name,b.title FROM t1 a LEFT JOIN t2 b ON
a.id=b.id;
+------+-------+-------+-------+
| id
| name
| name
| title |
+------+-------+-------+-------+
|
2 | name2 | NULL
| NULL
|
|
1 | name1 | name1 | t1
|
|
3 | name3 | name3 | t3
|
+------+-------+-------+-------+
3 rows in set (Elapsed: 00:00:00.13)
RHGHT JOIN:
gbase> SELECT a.id,a.name,b.name,b.title FROM t1 a RIGHT JOIN t2 b ON
a.id=b.id;
+------+-------+-------+-------+
| id
| name
| name
| title |
+------+-------+-------+-------+
| NULL | NULL
| name4 | t4
|
|
1 | name1 | name1 | t1
|
|
3 | name3 | name3 | t3
|
+------+-------+-------+-------+
3 rows in set (Elapsed: 00:00:00.16)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1079
FULL JOIN:
gbase> SELECT a.id,a.name,b.name,b.title FROM t1 a FULL JOIN t2 b ON
a.id=b.id;
+------+-------+-------+-------+
| id
| name
| name
| title |
+------+-------+-------+-------+
|
2 | name2 | NULL
| NULL
|
| NULL | NULL
| name4 | t4
|
|
1 | name1 | name1 | t1
|
|
3 | name3 | name3 | t3
|
+------+-------+-------+-------+
4 rows in set (Elapsed: 00:00:00.17)
示例2:char JOIN char(相同精度)示例。
示例中所用的表及数据:
CREATE TABLE t3(a CHAR(5), b CHAR(10));
CREATE TABLE t4(a CHAR(10));
INSERT INTO t3 VALUES('abcde', 'abcde');
INSERT INTO t4 VALUES('abcde');
gbase> SELECT * FROM t3;
+-------+------------+
| a
| b
|
+-------+------------+
| abcde | abcde
|
+-------+------------+
1 row in set (Elapsed: 00:00:00.03)
gbase> SELECT * FROM t4;
+------------+
| a
|
+------------+
| abcde
|
+------------+
1 row in set (Elapsed: 00:00:00.02)
t3.b 与t4.a 类型均为char(10),因此可以建立等值JOIN 关系:
gbase>
SELECT * FROM t3 JOIN t4 ON t3.b = t4.a;
+-------+------------+------------+
| a
| b
| a
|
+-------+------------+------------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1080
| abcde | abcde
| abcde
|
+-------+------------+------------+
1 row in set (Elapsed: 00:00:00.06)
t3.a 类型为char(5),t4.a 类型为char(10),不同精度的char 类型间
禁止建立等值JOIN 关系:
gbase> SELECT * FROM t3 JOIN t4 ON t3.a = t4.a;
ERROR 1149 (42000): (GBA-02SC-1001) Data types of equivalence join relation
((`vc1.demo.t3`.`a` = `vc1.demo.t4`.`a`)) are not supported , data types: left is
CHAR(5), right is CHAR(10)
示例3:char JOIN varchar 示例。
示例中所用的表及数据:
CREATE TABLE t1(a CHAR(5), b CHAR(10));
CREATE TABLE t2(a varchar(10));
INSERT INTO t1 VALUES('abcde', 'abcde');
INSERT INTO t2 VALUES('abcde');
T1.a 类型时char(5),
‘abcde’
不需要补充空格,
与varchar 的'abcde'
相等:
gbase> SELECT * FROM t1 JOIN t2 ON t1.a = t2.a;
+-------+------------+-------+
| a
| b
| a
|
+-------+------------+-------+
| abcde | abcde
| abcde |
+-------+------------+-------+
1 row in set
t1.b 类型是char(10),补齐空格后为'abcde
',与varchar 的'abcde'
不等,以下面结果集为空:
gbase> SELECT * FROM t1 JOIN t2 ON t1.b = t2.a;
Empty set
示例4:int JOIN varchar 示例。
示例中所用的表及数据:
CREATE TABLE t5(a INT);
CREATE TABLE t6(a VARCHAR(10));
INSERT INTO t5 VALUES(179);
INSERT INTO t6 VALUES('179');

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1081
int 和varchar 间可以建立等值JOIN 关系:
gbase> SELECT * FROM t5 JOIN t6 ON t5.a = t6.a;
+------+------+
| a
| a
|
+------+------+
|
179 | 179
|
+------+------+
1 row in set