TDSQL-H LibraDB 修改键列数据类型

TDSQL-H LibraDB 支持修改主键、排序键和分区键的数据类型。这里说明如何修改数据类型、修改数据类型支持的范围和修改数据类型的功能限制。

相关产品
TDSQL-H LibraDB 产品页,含版本规格、价格与购买入口。

一、修改键列数据类型支持的范围

主键、排序键可修改的数据类型支持 Int 类型、UInt 类型、Float 类型、Int 类型与 UInt 类型交叉四种场景,分区键可修改的数据类型支持 Int 类型、UInt 类型、Int 类型与 UInt 类型交叉三种场景。
修改数据类型仅支持从小类型修改为大类型,具体支持范围如下:

·Int 类型:Int8、Int16 、Int32、Int64。

·UInt 类型:UInt8、UInt16、UInt32、UInt64。

·Float 类型:Float32、Float64。

·Int 类型与 UInt 类型交叉:

·UInt8、Int16、Int32、Int64。

·UInt16、Int32、Int64。

·UInt32、Int64

二、使用限制

某些场景下,会使用主键或排序键作为 ShardingKey,并且通过 CityHash64 的函数进行数据写入时负载均衡。针对该类场景,同样的数据在修改数据类型前后数据类型不同,计算出来的 CityHash64 的值也不同,导致相同的数据可能存储在不同节点上,造成数据异常。

针对该场景,如果使用 TDSQL-H LibraDB 的 CDC 能力将源端数据同步至 TDSQL-H LibraDB,修改源端数据类型,可保证相同数据存储在同一节点上,因为 CDC 同步任务会将 ShardingKey 各种数据类型均转换为 String 类型。

针对该场景,如果创建表和修改数据类型均在 TDSQL-H LibraDB 侧操作,创建表时推荐使用以下语句定义 ShardingKey。

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER default_cluster]( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], …) ENGINE = Distributed(cluster, database, table, cityHash64(toString(tuple(主键列或排序键列列表))))[PARTITION BY expr]ORDER BY expr[PRIMARY KEY expr][SAMPLE BY expr][SETTINGS name=value, …]

注意:说明:

三、语法

ALTER TABLE [db.]table_name [ON CLUSTER default_cluster] modify column column_name type;

四、参数说明

·db.:可选,指定数据库的名称,默认为当前选择的数据库。

·table_name:必填,表名。

·ON CLUSTER default_cluster:可选,增加 ON CLUSTER default_cluster 可在 default_cluster 集群的所有服务器上创建库表。

·column_name:必填,待修改的主键列名。

·type:必填,待修改的数据类型。

五、使用示例

# 用户 A 表中主键为 id,是一个递增序列,原始主键类型为 UInt32 类型,但是随着数据的增多,UInt32 已经存在不下当前数据,此时需要修改主键类型扩大数据存储空间,用户可将 A 表的主键 id 从 UInt32 类型修改成 UInt64。ALTER TABLE testdb.A ON CLUSTER default_cluster modify column id UInt64;

赞 (0)
上一篇 4天前
下一篇 4天前