MySQL HeatWave 用户指南  / 第 2 章热浪  /  2.4 修改表格

2.4 修改表格

在 MySQL 8.0.31 之前,在 HeatWave 中加载的表上不允许进行 DDL 操作,带有SECONDARY_ENGINE = RAPID. SECONDARY_ENGINE在这些版本中,要更改表的定义,您必须在执行 DDL 操作之前卸载表并删除 属性,然后重新加载表。从 MySQL 8.0.31 开始,您不需要这样做,并且可以在不卸载表的情况下更改表。

在 MySQL 8.0.31 之前,请按照以下过程修改在 HeatWave 中加载的表:

  1. 从 HeatWave 卸载表;例如:

    ALTER TABLE orders SECONDARY_UNLOAD;
  2. SECONDARY_ENGINE属性设置为 NULL;例如:

    ALTER TABLE orders SECONDARY_ENGINE = NULL;
  3. 修改表格。以下示例演示了添加先前排除的列、修改或删除列编码以及修改或删除数据放置键。示例基于 第 2.6 节“表加载和查询示例”中描述的订单表。

    • 添加先前排除的列

      通过在or语句中指定NOT SECONDARY列属性 来排除列;例如: CREATE TABLEALTER TABLE

      ALTER TABLE orders MODIFY `O_COMMENT` varchar(79) NOT NULL NOT SECONDARY;

      要在下次加载表时包含先前排除的列,请修改列定义以删除NOT SECONDARY列属性;例如:

      ALTER TABLE orders MODIFY `O_COMMENT` varchar(79) NOT NULL;
    • 修改或删除列编码

      字符串列编码是通过 RAPID_COLUMN=ENCODING={SORTED|VARLEN} 在列注释中指定关键字字符串来定义的;例如:

      ALTER TABLE orders MODIFY `O_COMMENT` VARCHAR(79) COLLATE utf8mb4_bin NOT NULL 
      COMMENT 'RAPID_COLUMN=ENCODING=SORTED';

      要修改列编码,请更改列注释;例如:

      ALTER TABLE orders MODIFY `O_COMMENT` VARCHAR(79) COLLATE utf8mb4_bin NOT NULL 
      COMMENT 'RAPID_COLUMN=ENCODING=VARLEN';

      要删除列编码,请 RAPID_COLUMN=ENCODING={SORTED|VARLEN} 从列注释中删除关键字字符串。下次加载表时,string列编码默认为VARLENencoding,即默认的string列编码。

      以下示例将列注释全部删除,但如果您还想保留其他列注释,则只需删除编码关键字字符串即可。

      ALTER TABLE orders MODIFY `O_COMMENT` VARCHAR(79) COLLATE utf8mb4_bin NOT NULL;
    • 修改或删除数据放置键

      通过在列注释中 指定关键字字符串来定义数据放置键 ;例如: RAPID_COLUMN=DATA_PLACEMENT_KEY=N

      ALTER TABLE orders MODIFY `O_ORDERDATE` DATE NOT NULL 
      COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1';

      要修改数据放置键,请修改数据放置关键字字符串:

      ALTER TABLE orders MODIFY `O_ORDERDATE` DATE NOT NULL 
      COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=2';

      要删除数据放置键,请修改列注释以删除 RAPID_COLUMN=DATA_PLACEMENT_KEY=N 关键字字符串。以下示例将列注释全部删除,但如果您还想保留其他列注释,则只需删除数据放置关键字字符串即可。

      ALTER TABLE orders MODIFY `O_ORDERDATE` DATE NOT NULL;
  4. 对表进行所需的更改后,将 SECONDARY_ENGINE属性设置回 RAPID; 例如:

    ALTER TABLE orders SECONDARY_ENGINE = RAPID;
  5. 重新加载表格;例如:

    ALTER TABLE orders SECONDARY_LOAD;