返回首页

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

更新日期:2024年09月11日

db-link 查询语法约束如下

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-04-10)
南大通用数据技术股份有限公司
604
注意

如果仅仅是简单使用,如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
名字不同,仍然认为是非同源的。


GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
5

HLL(HyperLogLog)有一系列内置函数用于内部对数据进行处理,一般情况下用户不
需要熟知这些函数的使用。详情见表5-11。
表5-11 内置函数
函数名称
功能描述
hll_in
以string 格式接收hll 数据。
hll_out
以string 格式发送hll 数据。
hll_recv
以bytea 格式接收hll 数据。
hll_send
以bytea 格式发送hll 数据。
hll_trans_in
以string 格式接收hll_trans_type 数据。
hll_trans_out
以string 格式发送hll_trans_type 数据。
hll_trans_recv
以bytea 形式接收hll_trans_type 数据。
hll_trans_send
以bytea 形式发送hll_trans_type 数据。
hll_typmod_in
接收typmod 类型数据。
hll_typmod_out
发送typmod 类型数据。
hll_hashval_in
接收hll_hashval 类型数据。
hll_hashval_out
发送hll_hashval 类型数据。
hll_add_trans0
类似于hll_add 所提供的功能,初始化时无指定入参,通
常在聚合运算的第一阶段DN 上使用。
hll_add_trans1
类似于hll_add 所提供的功能,初始化时指定一个入参,
通常在聚合运算的第一阶段DN 上使用。
hll_add_trans2
类似于hll_add 所提供的功能,初始化时指定两个入参,

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
311
通常在聚合运算的第一阶段DN 上使用。
hll_add_trans3
类似于hll_add 所提供的功能,初始化时指定三个入参,
通常在聚合运算的第一阶段DN 上使用。
hll_add_trans4
类似于hll_add 所提供的功能,初始化时指定四个入参,
通常在聚合运算的第一阶段DN 上使用。
hll_union_trans
类似hll_union 所提供的功能,
在聚合运算的第一阶段DN
上使用。
hll_union_collect
类似于hll_union 所提供的功能,
在聚合运算第二阶段DN
上使用,汇总各个DN 上的结果。
hll_pack
在聚合运算第三阶段DN 上使用,
把自定义hll_trans_type
类型最后转换成hll 类型。
hll
用于hll 类型转换成hll 类型,
根据输入参数会设定指定参
数。
hll_hashval
用于bigint 类型转换成hll_hashval 类型。
hll_hashval_int4
用于int4 类型转换成hll_hashval 类型。