返回首页

gbase数据、南大通用产品文档:GBase8adblink 查询的语法约束

更新日期:2024年09月11日

db-link 查询语法约束如下

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
606

db-link 表只能出现在顶层查询,或同源dblink 的子查询中。出现在本地表
的子查询中时,必须放在relation 子查询中。

例如:如下语句会报语法错误,因为db-link 出现在本地表的子查询中时,
必须用relation 子查询包围。
select * from t1 where exists (select 1 from t2@gc_link as t2 where t2.id = t1.id);

该语句可以修改为如下形式,以保证符合语法规则:
select * from t1 where exists (select 1 from (select 1 from t2@gc_link) as t2 where t2.id
= t1.id);

同源的db-link 表可以直接JOIN。
dblink 表禁止与local table,
relation subquery,
非同源dblink 表,产生直接JOIN 关系。

例如:t1@gc_link JOIN t2@gc_link 是允许的;但t1@gc_link JOIN t2 是不
允许的,
因为db-link 表禁止与本地表直接JOIN,
可以改写SQL 语句为如
下形式:
… (select * from t1@gc_link) t, t2 …

db-link 表的子查询中,禁止出现本地表,非同源dblink 表。

例如:select * from t1@gc_link where exists (select 1 from t2);是不允许的,
因为db-link 表t1@gc_link 的子查询中出现了本地表t2。可以改写为如下
形式:
select * from (select * from t1@gc_link) t where exists (select 1 from t2);

group by 或order by 中的相关子查询,禁止出现db-link 表。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
607
注意

如果仅仅是简单使用,如insert into local_table select * from 同源dblink
表,则可以忽略本节的约束。当查询存在db-link 表与本地表混用(例
如db-link 表JOIN 本地表),或与非同源db-link 表混用时,则需要
遵守如下语法约束,否则查询会报语法错误;

同源db-link 指db-link 的名字相同,名字不同的db-link 称为非同源
db-link。例如t1@gc_link 和t2@gc_link 被认为是同源db-link 的两个
表。t1@gc_link 和x1@gc_link2,被认为是非同源db-link 表,即使
gc_link 和gc_link2 在创建时,using 的是同一个数据源,由于其db-link
名字不同,仍然认为是非同源的。

DB-Access 随附的各种命令文件。
命令文件在命令行中显示时均带有扩展名 .sql,但在 SQL“选择”菜单中显示时则不带扩
展名。
这些命令文件中的关键字以大写字母显示,以使 SQL 语句易于阅读。实际命令文件中的关
键字为小写。
重要: 尽管在本附录中命令文件是按字母顺序列出的,但是如果您按该顺序运行用于创建
表的命令文件,将导致错误。表的创建顺序由于链接这些表的引用约束而至关重要。
选择 SQL 菜单上的“选择”选项时,将打开“选择”屏幕。屏幕将显示可以访问的命令文
件的列表,
与下图显示的屏幕类似。
这些文件是 stores_demo 数据库附带的。
其他 .sql 文
件将在本附录的后面部分中进行描述。
图: “选择”屏幕上列出的命令文件
选择 >>
使用方向键选择命令文件,或输入名称,然后按 Enter 键。


GBase 8s DB-Access 用户指南
南大通用数据技术股份有限公司 - 43 -

--------- stores_demo @dbserver1 ------- 按 CTRL-W 以获得帮助 ---

alt_cat c_state d_trig sel_ojoin1

c_calls c_stock d_view sel_ojoin2

c_cat c_stores_demo del_stock sel_ojoin3

c_custom c_table ins_table sel_ojoin4

c_index c_trig opt_disk sel_order

c_items c_type sel_agg sel_sub

c_manuf c_view1 sel_all sel_union

c_orders c_view2 sel_group upd_table

c_proc d_proc sel_join
如果未看到演示数据库附带的命令文件,请检查以下各项:
l
运行演示数据库初始化脚本时,
是否已将演示 SQL 命令文件复制到当前目录?如果未
复制,请重新运行初始化脚本以复制它们。
l
是否已从安装了演示 SQL 命令文件的目录启动 DB-Access?如果不是,请退出
DB-Access,更改为适当的目录,并再次启动 DB-Access。
将这些命令文件与 DB-Access 一起使用来练习使用 SQL 和演示数据库。无论何时要刷新
数据库表和 SQL 文件,都可以重新运行演示数据库初始化脚本。

功能
这个参数用于控制是否启用集群查询的starschema 优化。
集群outer join 的starschema 优化,例如:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id= t2.id WHERE t1.a = x
被优化成
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id AND t2.id IN (SELECT t1.id FROM t1 WHERE
t1.a = x) WHERE t1.a = x
使用该优化后就避免了把整个t2 表拉成一个复制表。
参数取值含义说明

参数= 0 关闭;

参数= 1 启用。
该参数的默认值是0。
表6- 23 参数值范围说明表
默认值
最小值
最大值
0
0
1

GBase 8a MPP Cluster 产品手册
6 附录
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1558