如果你在GBase8a MPP中创建了一张没有主键的表,后因业务需要,想为每行数据新建一个列做主键,那可以用这个方法来获取每行数据的唯一值~~
首先打开以下参数,设置成功后新开一个session(set global设置的参数只在后续新开启的session中生效)
set global gcluster_segment_id_replace=1;
/*打开segment()函数*/
参数开启后,便可以查询表中的隐藏列segmentid和rowid,分布式数仓GBase8a MPP的数据在逻辑上是以分片形式存储的,每个数据节点上都有数据分片,数据的分片号和行号如二维空间的横纵坐标,表示着某条数据所存储的具体位置。
| 列名 | 描述 |
|---|---|
| segmentid | 分片号 |
| rowid | 行号【某分片中的行号】 |
select segment_id||rowid,id,name,time from t1;
-- 查看某表中4条数据的位置信息

数据的位置信息具有唯一性,同一个位置只能存储一条数据,因此在拼加一些内容后,可实现类似uuid或guid的某行数据的唯一值。
select segment_id||rowid||left(sha(time),20),id,name,time from t1;
-- 根据长度需要,拼加部分内容


4013

被折叠的 条评论
为什么被折叠?



