数据仓库服务 GAUSSDB(DWS)-UUID函数:UUID函数应用示例

时间:2024-12-06 15:12:39

UUID函数应用示例

UUID全局唯一的特点,可以作为数据表生成主键,也可以作为数据表的分布列,uuid_generate_v1()作为数据表分布列的默认值时,通过Hash分布可以将数据均匀分布到各个DN上,防止数据倾斜。

UUID的显著优点就是全局唯一,不需要中心节点,单个节点独立生成。但是也存在缺点,UUID较INT占用更多的存储空间,索引效率低,生成的ID随机,没有递增的特性,所以辨识困难。因此,在应用中,要根据实际情况选择UUID还是Sequence作为数据表主键。

示例如下:

  1. INT类型作为分布列。
    创建示例哈希表mytable01,int类型作为分布列,插入数据后,查询数据存在数据倾斜。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    CREATE TABLE mytable01(a INT, b INT) DISTRIBUTE BY hash(a);
    CREATE TABLE
    INSERT INTO mytable01 VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable01 VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable01 VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable01 VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable01 VALUES(1, 10);
    INSERT 0 1
    SELECT * FROM mytable01;
     a | b
    ---+----
     1 | 10
     1 | 10
     1 | 10
     1 | 10
     1 | 10
    (5 rows)
    
    SELECT table_skewness('mytable01');
               table_skewness
    -------------------------------------
     ("dn_6003_6004        ",5,100.000%)
     ("dn_6001_6002        ",0,0.000%)
     ("dn_6005_6006        ",0,0.000%)
    (3 rows)
    
  2. UUID类型作为分布列。

    创建示例哈希表mytable02,UUID类型作为分布列,插入数据后,查询数据分布正常。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    CREATE TABLE mytable02 (id UUID default uuid_generate_v1(), a INT, b INT) DISTRIBUTE BY hash(id);
    CREATE TABLE
    
    INSERT INTO mytable02(a, b) VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable02(a, b) VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable02(a, b) VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable02(a, b) VALUES(1, 10);
    INSERT 0 1
    INSERT INTO mytable02(a, b) VALUES(1, 10);
    INSERT 0 1
    
    SELECT * FROM mytable02;
                      id                  | a | b
    --------------------------------------+---+----
     63e45c14-cc74-0e00-e9aa-0a2c3fa0fffe | 1 | 10
     63e45c1f-4d18-0700-e9ab-0a2c3fa0fffe | 1 | 10
     63e45c26-f859-0b00-e9ad-0a2c3fa0fffe | 1 | 10
     63e45c23-9e5d-0300-e9ac-0a2c3fa0fffe | 1 | 10
     63e45c2a-5825-0600-e9ae-0a2c3fa0fffe | 1 | 10
    (5 rows)
    
    SELECT table_skewness('mytable02');
               table_skewness
    ------------------------------------
     ("dn_6001_6002        ",3,60.000%)
     ("dn_6003_6004        ",2,40.000%)
     ("dn_6005_6006        ",0,0.000%)
    (3 rows)
    
support.huaweicloud.com/sqlreference-910-dws/dws_06_0040.html