表格存储服务 CloudTable-数据模型:Unique模型

时间:2025-02-12 15:03:01

Unique模型

在某些多维分析场景下,用户更关注的是如何保证Key的唯一性,即如何获得Primary Key唯一性约束。因此,我们引入了Unique的数据模型。该模型本质上是聚合模型的一个特例,也是一种简化的表结构表示方式。举例说明:

Unique模型表,不推荐开启merge-on-write属性,默认使用merge-on-read。

表11 参数说明

ColumnName

Type

IsKey

Comment

user_id

BIGINT

Yes

用户 ID

username

VARCHAR(50)

Yes

用户昵称

city

VARCHAR(20)

No

用户所在城市

age

SMALLINT

No

用户年龄

sex

TINYINT

No

用户性别

phone

LARGEINT

No

用户电话

address

VARCHAR(500)

No

用户住址

register_time

DATETIME

No

用户注册时间

这是一个典型的用户基础信息表。这类数据没有聚合需求,只需保证主键唯一性。(这里的主键为user_id+username)。那么我们的建表语句如下:

CREATE TABLE IF NOT EXISTS example_db.expamle_tbl(    `user_id` LARGEINT NOT NULL COMMENT "用户id",    `username` VARCHAR(50) NOT NULL COMMENT "用户昵称",    `city` VARCHAR(20) COMMENT "用户所在城市",    `age` SMALLINT COMMENT "用户年龄",    `sex` TINYINT COMMENT "用户性别",    `phone` LARGEINT COMMENT "用户电话",    `address` VARCHAR(500) COMMENT "用户地址",    `register_time` DATETIME COMMENT "用户注册时间")UNIQUE KEY(`user_id`, `username`)DISTRIBUTED BY HASH(`user_id`) BUCKETS 1PROPERTIES ("replication_allocation" = "tag.location.default: 1");

而这个表结构,完全同等于以下使用聚合模型描述的表结构:

表12 参数说明

ColumnName

Type

AggregationType

Comment

user_id

BIGINT

-

用户 ID

username

VARCHAR(50)

-

用户昵称

city

VARCHAR(20)

REPLACE

用户所在城市

age

SMALLINT

REPLACE

用户年龄

sex

TINYINT

REPLACE

用户性别

phone

LARGEINT

REPLACE

用户电话

address

VARCHAR(500)

REPLACE

用户住址

register_time

DATETIME

REPLACE

用户注册时间

建表语句。

CREATE TABLE IF NOT EXISTS example_db.expamle_tbl(    `user_id` LARGEINT NOT NULL COMMENT "用户id",    `username` VARCHAR(50) NOT NULL COMMENT "用户昵称",    `city` VARCHAR(20) REPLACE COMMENT "用户所在城市",    `age` SMALLINT REPLACE COMMENT "用户年龄",    `sex` TINYINT REPLACE COMMENT "用户性别",    `phone` LARGEINT REPLACE COMMENT "用户电话",    `address` VARCHAR(500) REPLACE COMMENT "用户地址",    `register_time` DATETIME REPLACE COMMENT "用户注册时间")AGGREGATE KEY(`user_id`, `username`)DISTRIBUTED BY HASH(`user_id`) BUCKETS 1PROPERTIES ("replication_allocation" = "tag.location.default: 1");

即Unique模型完全可以用聚合模型中的REPLACE方式替代。其内部的实现方式和数据存储方式也完全一样。

support.huaweicloud.com/devg-cloudtable/cloudtable_01_0248.html