摘要:支持insert …select语句的目标表为dblink远端表,支持通过 insert …select 语句将本地数据推送到远端;
数据推送和直通模式
支持insert …select语句的目标表为dblink远端表,支持通过 insert …select 语句将本地数据推送到远端;
本地数据推送到远端oracle表时需注意:oracle字符类型是字节为单位,而gbase字符类型是字符为单位,所以gbase源表和oracle目标表含有相同类型字段char(255)时,该字段的数据推送到oracle可能会出现插入时越界情况;
同时支持passthrough 直通模式,即GCluster不对指定的SQL做语法解析,请求网关直接转发指定的SQL到远端数据库执行,通过 passthrough 模式可实现对远端表进行 insert…values,delete, update 等操作。
数据推送SQL语句
语法与insert into…select..语句相同,支持目标表为dblink远端表,如:
insert into t1@testlink select a, b from t1;
支持指定目标列,如:
insert into t1@testlink(a, b) select a, b from t1;
前提条件:dblink对象对应的网关中的数据源配置的用户需有对目标表的insert 权限。
只支持自动提交模式,不支持分布式事务,若当前执行gcluster的session 状态为非自动提交模式将报错:
Can not join the distributed transaction in session
需保证一条推送SQL语句的原子性,数据要么全部成功推送到远端,要么全部失败。
注意:
GBase 8a MPP Cluster的空串数据通过dblink推送至ORACLE,ORACLE存储为NULL,即ORACLE不区分空串和NULL,用 is null可以查询;
GBase 8a MPP Cluster则区分空串和NULL。
直通模式SQL 语句
请求网关直接转发sql语句到dblink对象对应的远端数据库执行。
语法:
passthrough link DBLINK_NAME using ‘SQL_STATEMENT’;
参数:
DBLINK_NAME为dbink对象的名称;
SQL_STATEMENT为SQL语句,即远端数据库执行的SQL语句;
支持的SQL语句,除以下支持的SQL类型外,其它类型的SQL将报错:
insert into … values…
insert into …select ….
delete
update
truncate
merge
create
drop
示例:
约束与限制:
dblink对象对应的网关中的数据源配置的用户需有相应的 SQL执行权限;
只支持自动提交模式。若当前执行passthrough命令的gclusterd的session 状态为非自动提交模式将报错:
Can not join the distributed transaction in session
不支持 sql_statement 前面有注释。
来源:GBASE南大通用