GBase 8a
运维管理
文章

GBase8a无主键表如何获取数据唯一值

发表于2025-06-30 13:52:37165次浏览0个评论

如果你在GBase8a MPP中创建了一张没有主键的表,后因业务需要,想为每行数据新建一个列做主键,那可以用这个方法来获取每行数据的唯一值~

 

首先打开以下参数,设置成功后新开一个session(set global设置的参数只在后续新开启的session中生效)

set global gcluster_segment_id_replace=1;
/*打开segment()函数*/

 

参数开启后,便可以查询表中的隐藏列segmentid和rowid,分布式数仓GBase8a MPP的数据在逻辑上是以分片形式存储的,每个数据节点上都有数据分片,数据的分片号和行号如二维空间的横纵坐标,表示着某条数据所存储的具体位置。

列名描述
segmentid    分片号
rowid 行号【某分片中的行号】

 

 

select segment_id||rowid,a,b from t001;
/*查看某表中3条数据的位置信息*/

 

数据的位置信息具有唯一性,同一个位置只能存储一条数据,因此在拼加一些内容后,可实现类似uuid或guid的某行数据的唯一值。

select segment_id||rowid||left(sha(a),20),a,b from t001;
/*根据长度需要,拼加部分内容*/

评论

登录后才可以发表评论