数据仓库服务 GAUSSDB(DWS)-如何调整分布列?:如何调整

时间:2024-04-30 17:23:48

如何调整

通过select version();语句查询当前数据库版本号,版本号不同,调整的方式不同:

  • 8.0.x及以前版本,通过重建表时指定分布列来调整
  1. 通过Data Studio或者Linux下使用gsql访问数据库。
  2. 创建新表。

    以下步骤语句中,table1为原表名,table1_new为新表名,column1和column2为分布列名称。

    1
    2
    3
    4
    CREATE TABLE IF NOT EXISTS table1_new 
    ( LIKE table1 INCLUDING ALL EXCLUDING DISTRIBUTION) 
    DISTRIBUTE BY 
    HASH (column1, column2);
    

  3. 迁移数据到新表。

    1
    2
    3
    4
    START TRANSACTION;
    LOCK TABLE table1 IN ACCESS EXCLUSIVE MODE;
    INSERT INTO table1_new SELECT * FROM table1;
    COMMIT;
    

  4. 查看表数据是否迁移成功,删除原表。

    1
    2
    SELECT COUNT(*) FROM table1_new;
    DROP TABLE table1;
    

  5. 替换原表。

    1
    ALTER TABLE table1_new RENAME TO table1;
    

  • 8.1.0及以后版本后,通过ALTER TABLE语法进行调整,以下为示例。
  1. 查询当前表定义,回显发现该表分布列为c_last_name。

    1
    SELECT pg_get_tabledef('customer_t1');
    

  2. 尝试执行更新分布列中的数据提示错误信息。

    1
    UPDATE customer_t1 SET c_last_name = 'Jimy' WHERE c_customer_sk = 6885;
    

  3. 将该表的分布列修改为不会更新的列,例如c_customer_sk。

    1
    ALTER TABLE customer_t1 DISTRIBUTE BY hash (c_customer_sk); 
    

  4. 重新执行更新旧的分布列的数据。更新成功。

    1
    UPDATE customer_t1 SET c_last_name = 'Jimy'WHERE c_customer_sk = 6885;
    

support.huaweicloud.com/dws_faq/dws_03_2126.html