全部產品
Search
文件中心

Lindorm:ALTER TABLE

更新時間:Jul 06, 2024

ALTER TABLE文法用於修改表的結構,例如增加列、刪除列、修改列的資料類型、新增表屬性等。本文介紹ALTER TABLE文法在不同引擎中的使用方法和差異。

引擎與版本

ALTER TABLE文法適用於寬表引擎和時序引擎。無版本限制。

注意事項

ALTER TABLE操作不會鎖定表,在執行DDL操作過程中整個表都是可以正常讀寫的。在讀寫過程中,可能會遇到逾時報錯或輕微抖動和毛刺,可能是由於以下原因:

  • DDL操作變更時,每個分區都會先關閉再開啟並重新載入中繼資料,該過程耗時很短,通常在十毫秒至數百毫秒之間。如果在該過程恰好有請求發送至重新開啟的分區,則此時請求可能會有輕微抖動或毛刺,建議您在業務低峰期執行DDL變更操作。

  • 所有DDL操作都會在分區完成變更後才會返回執行結果,因此在對規模較大的表執行DDL操作時,由於用戶端逾時時間較短,可能會遇到逾時報錯,但實際上DDL操作會在伺服器上繼續執行直至完成。

文法

alter_table_statement   ::=  ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=  ADD [COLUMN] column_name type [TAG]
                             | DROP COLUMN [ IF EXISTS ] column_name
                             | SET table_options
                             | COMPACT (idcName)?

差異說明

Lindorm寬表引擎和時序引擎的ALTER TABLE文法差異較大。差異對比請參見下表。

文法要素

寬表引擎

時序引擎

ADD COLUMN

COMPACT

說明

寬表引擎2.3.4及以上版本支援。

✖️

DROP COLUMN

說明

寬表引擎2.6.6及以上版本支援。

✖️

SET table_options

✖️

使用說明

ADD COLUMN(新增列)

寬表引擎和時序引擎均支援ADD COLUMN。

新增列有以下規則:

  • 新增的列不能聲明為主鍵。

  • 針對時序引擎,只支援新增標籤列(TAG)和量測值列(FIELD),不支援新增時間戳記列。

DROP COLUMN(刪除列)

僅版本為2.6.6及以上版本的寬表引擎支援DROP COLUMN。

說明

如果您無法通過控制台升級至2.6.6及以上版本,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)。

DROP COLUMN操作是非同步執行的,ALTER TABLE語句執行成功後系統會立刻刪除目標列,但列中的資料在系統完成COMPACT操作後才會被清理。如果您需要加速資料清理進程,可以手動執行FLUSHCOMPACT操作。同時,在資料完成清理前,您無法添加同名列。具體操作及說明,請參見常見問題

SET table_options(設定表屬性)

寬表引擎支援SET table_options。

具體的表屬性列表,請參見表屬性。您可以通過SHOW TABLE VARIABLES語句驗證表屬性是否設定成功,詳細介紹請參見SHOW TABLE VARIABLES

重要

修改MUTABILITY和CONSISTENCY屬性,有以下兩點注意事項:

  • 建立索引之前,支援修改MUTABILITY和CONSISTENCY。

  • 建立索引之後:

    • 無法修改MUTABILITY

    • 僅支援將CONSISTENCY的值從eventual修改為strong,但不支援從strong修改為eventual

樣本請參見開啟動態列

COMPACT(強制執行Major Compaction)

僅版本為2.3.4及以上版本的寬表引擎支援Major Compaction。

執行Major Compaction操作,會合并資料檔案,清理已刪除或到期的資料,釋放磁碟空間,提高讀寫效能,但Major Compaction操作會佔用系統資源。

  • 不指定idcName:

    • 對單可用性區域執行個體來說,因為只有一個IDC,是否指定idcName沒有區別。

    • 對多可用性區域執行個體來說,有2個IDC,不指定idcName時Major Compaction操作的執行規則如下:

      • 寬表引擎版本低於2.6.4.2:只會對idc1進行Major Compaction。

      • 寬表引擎為2.6.4.2及以上版本:預設對所有的IDC進行Major Compaction。

  • 指定idcName,表示對指定IDC進行Major Compaction。idcName可指定多個,多個idcName之間用半形逗號(,)分隔。

樣本請參見執行Major Compaction

樣本

本文提供的樣本基於CREATE TABLE文檔的建表示例語句。

CREATE TABLE sensor (
    device_id VARCHAR NOT NULL,
    region VARCHAR NOT NULL,
    time BIGINT NOT NULL,
    temperature DOUBLE,
    humidity BIGINT,
    PRIMARY KEY(device_id, region, time)
);

新增列

為表sensor新增一個列n1

ALTER TABLE sensor ADD COLUMN n1 DOUBLE;

刪除列

為表sensor刪除列n1

ALTER TABLE sensor DROP COLUMN IF EXISTS n1;

結果驗證

執行以下語句可以驗證操作結果。

DESCRIBE table sensor;

開啟動態列

開啟sensor表的動態列。

ALTER TABLE sensor SET DYNAMIC_COLUMNS = 'true';
說明

關於動態列的介紹,請參見動態列

設定資料有效期間

  • sensor表設定資料有效期間,時間單位為秒(s)。

    ALTER TABLE sensor SET TTL = '2592000';
  • sensor表取消資料有效期間。

    ALTER TABLE sensor SET TTL = '';

    結果驗證

    在叢集管理系統的概覽頁面,單擊目標資料庫下的目標表名,可在當前詳情表格地區,查看ttl參數的值。如何進入叢集管理系統,請參見登入叢集管理系統

設定壓縮演算法

  • 設定sensor表的壓縮演算法為ZSTD

    ALTER TABLE sensor SET COMPRESSION = 'ZSTD';
  • 設定sensor表的壓縮演算法為NONE

    ALTER TABLE sensor SET COMPRESSION = 'NONE';

    結果驗證

    在叢集管理系統的概覽頁面,單擊目標資料庫下的目標表名。在當前詳情表格地區,單擊查看錶屬性,查看COMPRESSION參數的值。

設定冷熱分離

說明

關於冷熱分離的介紹,請參見冷熱分離介紹

設定冷熱分界線

按時間戳記冷熱分離

設定表sensor表的冷熱分界線。寬表引擎會基於每一行資料實際寫入資料庫的時間戳記(入庫時間戳記)來計算是否需要將該資料歸檔至容量型雲端儲存。

-- 為表sensor開啟按按時間戳記冷熱分離,設定冷熱分離時間點為一天。
ALTER TABLE sensor SET CHS = '86400', CHS_L2 = 'storagetype=COLD';

結果驗證

您可以通過SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%';語句,查看CHSCHS_L2參數的值。SHOW VARIABLES文法的詳細介紹,請參見SHOW VARIABLES

按自訂時間列冷熱分離

重要

按自訂時間列冷熱分離對自訂時間列存在限制和要求,在使用前請閱讀相關注意事項,具體內容請參見注意事項

將自訂時間列time設定為表sensor的冷熱分界線。寬表引擎會基於每一行資料的time列的時間戳記(業務時間戳記),來計算是否需要將該資料歸檔至容量型雲端儲存。

-- 為表sensor開啟按自訂欄冷熱分離,設定冷熱分離時間點為一天,並按time列冷熱分離。
ALTER TABLE sensor SET CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=time';

結果驗證

您可以通過SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%';語句,查看CHSCHS_L2CHS_COLUMN參數的值。SHOW VARIABLES文法的詳細介紹,請參見SHOW VARIABLES

取消冷熱分界線

取消sensor表的冷熱分界線。

ALTER TABLE sensor SET CHS = '', CHS_L2 = '';

結果驗證

您可以通過SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%';語句,查看CHSCHS_L2參數的值。SHOW VARIABLES文法的詳細介紹,請參見SHOW VARIABLES

執行Major Compaction

  • 對sensor表執行Major Compaction。

    ALTER TABLE sensor COMPACT;
    說明

    如果執行個體為多可用性區域執行個體,需注意以下規則:

    • 如果寬表引擎版本低於2.6.4.2版本,未指定IDC時,系統預設對idc1進行Major Compaction。

    • 如果寬表引擎為2.6.4.2及以上版本,系統預設對所有的IDC進行Major Compaction。

  • 對idc2執行Major Compaction。

    ALTER TABLE sensor COMPACT 'idc2';
  • 對idc1和idc2執行Major Compaction。

    ALTER TABLE sensor COMPACT 'idc1,idc2';

=