日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

ALTER TABLE變更表結(jié)構(gòu)

更新時間:

云原生數(shù)據(jù)倉庫 AnalyticDB MySQL 版支持通過ALTER TABLE修改表結(jié)構(gòu),包括修改表名、列名、列類型、普通索引、聚集索引、外鍵索引、分區(qū)函數(shù)的格式、冷熱分層存儲策略。本文介紹ALTER TABLE語法。

語法

ALTER TABLE table_name
  { ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ ] [distancemeasure=SquaredL2]
  | ADD CLUSTERED [INDEX|KEY] [index_name] (column_name,...)
  | ADD [COLUMN] column_name column_definition 
  | ADD [COLUMN] (column_name column_definition,...) 
  | ADD [CONSTRAINT [symbol]] FOREIGN KEY (fk_column_name) REFERENCES pk_table_name (pk_column_name)
  | ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]
  | ADD {INDEX|KEY} [index_name] (column_name,...) 
  | ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path',...) 
  | ADD {INDEX|KEY} [index_name] (column_name->'$[*]') 
  | COMMENT 'comment'
  | DROP CLUSTERED KEY index_name
  | DROP [COLUMN] column_name
  | DROP FOREIGN KEY symbol
  | DROP FULLTEXT INDEX index_name
  | DROP {INDEX|KEY} index_name
  | MODIFY [COLUMN] column_name column_definition
  | RENAME COLUMN column_name TO new_column_name
  | RENAME new_table_name
  | storage_policy
  | PARTITION BY VALUE(column_name|date_format(column_name,'format')) LIFECYCLE N
  }
  
  column_definition:
   column_type [column_attributes][column_constraints][COMMENT 'comment']
  
  column_attributes:
   [DEFAULT{constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT]
  
  column_constraints:
   [NULL|NOT NULL]
  
  storage_policy:
   STORAGE_POLICY= {'HOT'|'COLD'|'MIXED' hot_partition_count=N}

本文所有示例(JSON索引示例、外鍵索引示例、向量索引示例除外)均基于CREATE TABLE文檔中創(chuàng)建的customer表。如果您已創(chuàng)建customer表,可直接執(zhí)行本文示例。如果還未創(chuàng)建,請先復(fù)制以下建表語句創(chuàng)建customer表。

示例的建表語句

CREATE TABLE customer (
  customer_id BIGINT NOT NULL COMMENT '顧客ID',
  customer_name VARCHAR NOT NULL COMMENT '顧客姓名',
  phone_num BIGINT NOT NULL COMMENT '電話',
  city_name VARCHAR NOT NULL COMMENT '所屬城市',
  sex INT NOT NULL COMMENT '性別',
  id_number VARCHAR NOT NULL COMMENT '身份證號碼',
  home_address VARCHAR NOT NULL COMMENT '家庭住址',
  office_address VARCHAR NOT NULL COMMENT '辦公地址',
  age INT NOT NULL COMMENT '年齡',
  login_time TIMESTAMP NOT NULL COMMENT '登錄時間',
  PRIMARY KEY (login_time,customer_id,phone_num)
 )
DISTRIBUTED BY HASH(customer_id)
PARTITION BY VALUE(DATE_FORMAT(login_time, '%Y%m%d')) LIFECYCLE 30
COMMENT '客戶信息表';                   

變更表名

語法

ALTER TABLE db_name.table_name RENAME new_table_name

示例

將customer表更名為new_customer。

ALTER TABLE customer RENAME new_customer;

變更表的COMMENT

語法

ALTER TABLE db_name.table_name COMMENT 'comment'

示例

將customer表的Comment變更為顧客表。

ALTER TABLE customer COMMENT '顧客表';;

增加列

語法

ALTER TABLE db_name.table_name ADD [COLUMN] 
 {column_name column_type [DEFAULT {constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT] [NULL|NOT NULL] [COMMENT 'comment']
 | (column column_type [DEFAULT {constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT] [NULL|NOT NULL] [COMMENT 'comment'],...)}

注意事項

不支持增加主鍵列。

示例

  • customer表中增加一列province,數(shù)據(jù)類型為VARCHAR。

ALTER TABLE adb_demo.customer ADD COLUMN province VARCHAR COMMENT '省份';
  • customer表中增加兩列,一列為vip,數(shù)據(jù)類型為Boolean,另一列為tags,數(shù)據(jù)類型為VARCHAR。

ALTER TABLE adb_demo.customer ADD COLUMN (vip BOOLEAN COMMENT '是否會員',tags VARCHAR DEFAULT '無' COMMENT '標(biāo)簽');

刪除列

語法

ALTER TABLE db_name.table_name DROP [COLUMN] column_name

注意事項

不支持刪除主鍵列。

示例

customer表中刪除類型為VARCHAR的province列。

ALTER TABLE adb_demo.customer DROP COLUMN province;

變更列名

語法

ALTER TABLE db_name.table_name RENAME COLUMN column_name to  new_column_name

注意事項

不支持更改主鍵列的列名。

示例

customer表中的city_name列更名為city

ALTER TABLE customer RENAME COLUMN city_name to city;

變更列的數(shù)據(jù)類型

語法

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name new_column_type

注意事項

  • 不支持變更主鍵列的數(shù)據(jù)類型。

  • 變更數(shù)據(jù)類型的限制如下:

    • 僅支持將取值范圍小的數(shù)據(jù)類型更改為取值范圍大的數(shù)據(jù)類型。

    • 整型數(shù)據(jù)類型:支持TINYINT、SMALLINT、INT、BIGINT間,小類型到大類型的更改,例如支持將TINYINT更改為BIGINT,不支持將BIGINT更改為TINYINT。

    • 浮點數(shù)據(jù)類型:支持將FLOAT更改為DOUBLE類型,不支持將DOUBLE更改為FLOAT類型。

    • 支持將整型數(shù)據(jù)類型(TINYINT、SMALLINT、INT、BIGINT)變更為浮點類型(FLOAT、DOUBLE)。

    • 支持變更DECIMAL類型精度,僅支持低精度向高精度變更。

    重要

    僅內(nèi)核版本為3.1.8.10~3.1.8.x、3.1.9.6~3.1.9.x、3.1.10.3~3.1.10.x和3.2.0.1及以上版本的集群支持將整型數(shù)據(jù)類型變更為浮點類型和變更DECIMAL類型精度。

示例

customer表中age列由INT類型更改為BIGINT類型。

ALTER TABLE adb_demo.customer MODIFY COLUMN age BIGINT;

變更列的默認(rèn)值

語法

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type DEFAULT {constant | CURRENT_TIMESTAMP}

示例

  • customer表中的sex列的默認(rèn)值設(shè)置為0。

ALTER TABLE adb_demo.customer MODIFY COLUMN sex INT NOT NULL DEFAULT 0;
  • customer表中的login_time列的默認(rèn)值設(shè)置為CURRENT_TIMESTAMP。

ALTER TABLE adb_demo.customer MODIFY COLUMN login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

允許空值(NULL)

語法

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type {NULL}

注意事項

僅支持將NOT NULL變更為NULL。

示例

customer表中province列的值更改為可空(NULL)。

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR NULL;

變更列的COMMENT

語法

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type COMMENT 'new_comment'

示例

customer表中province列的COMMENT更改為顧客所屬省份。

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR COMMENT '顧客所屬省份';

索引

增加索引

AnalyticDB for MySQL建表時默認(rèn)創(chuàng)建全列索引index_all='Y'。若建表時未創(chuàng)建全列索引,可以新增索引。

語法

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name,...)

參數(shù)說明

column_name:列名。數(shù)據(jù)類型為簡單數(shù)據(jù)類型。如果列的數(shù)據(jù)類型為JSON,請參見增加JSON索引

示例

customer表中為age列新增索引。

ALTER TABLE adb_demo.customer ADD KEY age_idx(age);

增加JSON索引

JSON索引

語法

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path',...)

參數(shù)說明

  • column_name:用于為JSON列建立索引。列的數(shù)據(jù)類型需要為JSON類型。

  • column_name->'$.json_path':用于為JSON的某個屬性鍵建立索引。其中column_name指定的列需要為JSON類型。關(guān)于JSON索引的更多詳情,請參見JSON索引

    重要
    • 僅3.1.6.8及以上內(nèi)核版本的集群支持column_name->'$.json_path。

      • 查看企業(yè)版、基礎(chǔ)版湖倉版集群的內(nèi)核版本,請執(zhí)行SELECT adb_version();。如需升級內(nèi)核版本,請聯(lián)系技術(shù)支持。

      • 查看和升級數(shù)倉版集群的內(nèi)核版本,請參見查看和升級版本。

    • 為JSON列中的指定屬性鍵創(chuàng)建索引時,若該JSON列已存在INDEX索引,需先刪除該列的INDEX索引,否則會報錯。

注意事項

增加JSON索引后,需要等待BUILD完成后,JSON索引才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。通過SHOW CREATE TABLE db_name.table_name;可以查詢JSON索引是否已生效。

重要

若表為分區(qū)表,增加JSON索引后,必須手動強(qiáng)制全表BUILD,JSON索引才能生效。

示例

假設(shè)表結(jié)構(gòu)與寫入語句如下。

CREATE TABLE json_test(
  id INT,
  vj JSON
)
DISTRIBUTED BY HASH(id);
INSERT INTO json_test VALUES(1,'{"a":1,"b":2}'),(2,'{"a":2,"b":3}'));

json_test表的vj列的屬性a創(chuàng)建JSON索引。

ALTER TABLE json_test ADD KEY age_idx(vj->'$.a');

JSON Array索引

語法

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name->'$[*]')

參數(shù)說明

column_name->'$[*]':column_name為JSON Array索引的列。例如:vj->'$[*]'表示為vj列創(chuàng)建JSON Array索引。

注意事項

增加JSON Array索引后,需要等待BUILD完成后,JSON Array才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。

示例

假設(shè)表結(jié)構(gòu)與寫入語句如下。

CREATE TABLE json_test(
  id INT,
  vj JSON
)
DISTRIBUTED BY HASH(id);
INSERT INTO json_test VALUES(1, '["CP-018673", 1, false]');

json_test表的vj列創(chuàng)建JSON Arrary索引。

ALTER TABLE json_test ADD KEY index_vj(vj->'$[*]');

刪除索引、JSON索引

語法

ALTER TABLE db_name.table_name DROP KEY index_name

參數(shù)說明

index_name:普通索引名稱。您通過SHOW INDEX FROM db_name.table_name;查詢index_name。

示例

  • 刪除customer表中名為age_idx的索引。

    ALTER TABLE adb_demo.customer DROP KEY age_idx;
  • 刪除json_test表中名為index_vj的JSON Array索引。

    ALTER TABLE adb_demo.customer DROP KEY index_vj;

增加聚集索引

語法

ALTER TABLE db_name.table_name ADD CLUSTERED [INDEX|KEY] [index_name] (column_name,...)

注意事項

  • 如果表已存在聚集索引,則無法再添加聚集索引。原因為一個表只能有一個聚集索引。

  • 增加聚集索引后,需要等待BUILD完成后,聚集索引才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。通過SHOW CREATE TABLE db_name.table_name;可以查詢聚集索引是否已生效。

示例

customer表中為customer_id列新增聚集索引。

ALTER TABLE adb_demo.customer ADD CLUSTERED KEY (customer_id);

刪除聚集索引

語法

ALTER TABLE db_name.table_name DROP CLUSTERED KEY index_name

參數(shù)說明

index_name:聚集索引名稱。您可以通過SHOW CREATE TABLE db_name.table_name查詢聚集索引名稱。

示例

customer表中為customer_id刪除聚集索引。

ALTER TABLE adb_demo.customer ADD CLUSTERED KEY (customer_id);

增加全文索引

前提條件

集群內(nèi)核版本需為3.1.4.9及以上版本。

說明
  • 推薦使用內(nèi)核版本為3.1.4.17及以上的AnalyticDB for MySQL集群。

  • 如何查看集群的內(nèi)核版本,請參見如何查看實例版本信息

語法

ALTER TABLE db_name.table_name ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]

參數(shù)說明

  • column_name:全文索引的列。必須是VARCHAR類型的列。

  • index_option:指定全文索引的分詞器和自定義詞典??蛇x。

    • WITH ANALYZER analyzer_name:指定全文索引的分詞器。AnalyticDB for MySQL支持的分詞器類型,請參見全文索引的分詞器。

    • WITH DICT tbl_dict_name:指定全文索引的自定義詞典。AnalyticDB for MySQL自定義詞典的詳細(xì)信息,請參見全文索引的自定義詞典

注意事項

增加全文索引后,需要等待BUILD完成后,全文索引才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。

示例

customer表的home_address列添加全文索引。

ALTER TABLE adb_demo.customer ADD FULLTEXT INDEX fidx_k(home_address) WITH ANALYZER standard;

刪除全文索引

語法

ALTER TABLE db_name.table_name DROP FULLTEXT INDEX index_name

參數(shù)說明

  • column_name:全文索引的列。必須是VARCHAR類型的列。

  • index_option:指定全文索引的分詞器和自定義詞典??蛇x。

    • WITH ANALYZER analyzer_name:指定全文索引的分詞器。AnalyticDB for MySQL支持的分詞器類型,請參見全文索引的分詞器。

    • WITH DICT tbl_dict_name:指定全文索引的自定義詞典。AnalyticDB for MySQL自定義詞典的詳細(xì)信息,請參見全文索引的自定義詞典。

示例

customer表刪除全文索引fidx_k。

ALTER TABLE adb_demo.customer DROP FULLTEXT INDEX fidx_k;

更多詳情請參見創(chuàng)建全文索引

增加向量索引

前提條件

集群的內(nèi)核版本需為3.1.4.0及以上版本。

說明
  • 內(nèi)核版本為3.1.5.16、3.1.6.8、3.1.8.6及以上版本的集群向量索引功能相對穩(wěn)定。

  • 若您的集群不是上述列舉的穩(wěn)定版本,建議您先將參數(shù)CSTORE_PROJECT_PUSH_DOWNCSTORE_PPD_TOP_N_ENABLE設(shè)置為false,再使用向量索引功能。

  • 如何查看集群內(nèi)核版本,請參見如何查看實例版本信息。如需升級內(nèi)核版本,請聯(lián)系技術(shù)支持。

語法

ALTER TABLE db_name.table_name ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ ] [distancemeasure=SquaredL2]

參數(shù)說明

  • index_name:索引名。索引的命名規(guī)則,請參見命名約束

  • column_name:向量列的名稱。向量列的類型需要為array <float>、array <byte>、array <smallint>。

  • algorithm:向量距離計算公式使用的算法,取值僅支持:HNSW_PQ。

  • distancemeasure:向量距離計算公式,取值僅支持:SquaredL2SquaredL2計算公式為:(x1-y1)2+(x2-y2)2+…...(xn-yn)2。

示例

假設(shè)已有表vector,建表語句如下。

CREATE TABLE vector (
  xid BIGINT not null,
  cid BIGINT not null,
  uid VARCHAR not null,
  vid VARCHAR not null,
  wid VARCHAR not null,
  float_feature array < FLOAT >(4),
  short_feature array < SMALLINT >(4),
  PRIMARY KEY (xid, cid, vid)
) DISTRIBUTED BY HASH(xid);

float_featureshort_feature創(chuàng)建向量索引,示例如下。

ALTER TABLE vector ADD ANN INDEX idx_float_feature(float_feature);
ALTER TABLE vector ADD ANN INDEX idx_short_feature(short_feature);

增加外鍵

前提條件

AnalyticDB for MySQL集群內(nèi)核版本需為3.1.10或以上。

說明

查看企業(yè)版湖倉版集群的內(nèi)核版本,請執(zhí)行SELECT adb_version();。如需升級內(nèi)核版本,請聯(lián)系技術(shù)支持。

語法

ALTER TABLE db_name.table_name ADD [CONSTRAINT [symbol]] FOREIGN KEY (fk_column_name) REFERENCES db_name.pk_table_name (pk_column_name)

參數(shù)說明

  • db_name.table_name:需要添加或刪除外鍵的表。

  • symbol:可選項,外鍵約束名,在表內(nèi)唯一。不指定時,解析器將會在外鍵列名后面自動補(bǔ)充后綴_fk用作外鍵約束名。

  • fk_column_name:指定外鍵列。外鍵列需要在建表語句中定義。

  • pk_table_name:指定主表名。主表必須已存在。

  • pk_column_name:指定外鍵約束列,該列必須存在且為主表的主鍵列。

注意事項

  • 每個表可以有多個外鍵索引。

  • 不支持復(fù)合的外鍵索引,即不支持多個列組成的外鍵索引,例如:FOREIGN KEY (sr_item_sk, sr_ticket_number) REFERENCES store_sales(ss_item_sk,d_date_sk)。

  • AnalyticDB for MySQL不會進(jìn)行數(shù)據(jù)的約束檢查。您需要自行確保主表的主鍵和從表的外鍵之間的數(shù)據(jù)約束關(guān)系。

  • 外表不支持創(chuàng)建外鍵約束。

示例

假設(shè)有兩張表itemstore_sales,建表語句如下。

CREATE TABLE item
(
 i_item_sk BIGINT NOT NULL,
 i_current_price BIGINT,
 PRIMARY KEY(i_item_sk)
)
DISTRIBUTED BY HASH(i_item_sk);
CREATE TABLE store_sales
(
 ss_sale_id BIGINT,
 ss_store_sk BIGINT,
 ss_item_sk BIGINT NOT NULL,
 PRIMARY KEY(ss_sale_id)
);

為表store_sales添加外鍵ss_item_sk,與主表itemi_item_sk相關(guān)聯(lián),示例如下。

ALTER TABLE store_sales ADD CONSTRAINT ss_item_sk FOREIGN KEY (ss_item_sk) REFERENCES item (i_item_sk);

更多詳情請參見通過主外鍵約束消除多余的JOIN。

刪除外鍵

語法

ALTER TABLE db_name.table_name DROP FOREIGN KEY fk_symbol

示例

ALTER TABLE store_returns DROP FOREIGN KEY sr_item_sk_fk;

分區(qū)

變更分區(qū)函數(shù)格式

前提條件

變更分區(qū)函數(shù),AnalyticDB for MySQL集群需滿足以下全部條件:

  • 內(nèi)核版本為3.1.6及以上版本。

    說明

    查看企業(yè)版湖倉版集群的內(nèi)核版本,請執(zhí)行SELECT adb_version();。如需升級內(nèi)核版本,請聯(lián)系技術(shù)支持。

  • 聯(lián)系阿里云技術(shù)支持開啟變更分區(qū)函數(shù)的功能。

語法

ALTER TABLE table_name PARTITION BY VALUE(column_name|date_format(column_name,'format')) LIFECYCLE N 

注意事項

  • 不支持將無分區(qū)表更改為分區(qū)表,也不支持將分區(qū)表變更為無分區(qū)表,即不支持新增分區(qū)鍵和刪除分區(qū)鍵。

  • 不支持在已有分區(qū)鍵的基礎(chǔ)上,增加、減少或變更分區(qū)字段。

  • 3.2.1.1以下內(nèi)核版本,以分片級管理分區(qū)的生命周期時,變更分區(qū)函數(shù)后,需要等待BUILD完成后,新的分區(qū)函數(shù)才能生效。

  • 3.2.1.1及以上內(nèi)核版本,以表級管理分區(qū)的生命周期時,變更分區(qū)函數(shù)后,需要進(jìn)行兩次BUILD操作。第一次BUILD完成后,新的分區(qū)函數(shù)生效,但此次BUILD分區(qū)保留的方式為分片級。第二次BUILD完成后,表級管理分區(qū)才能重新生效。

說明

自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。通過SHOW CREATE TABLE db_name.table_name;可以查詢新的分區(qū)函數(shù)是否已生效。

示例

  • customer表的分區(qū)方式由PARTITION BY VALUE(date_format(login_time, '%Y%m%d')) LIFECYCLE 30變更為 PARTITION BY VALUE(login_time) LIFECYCLE 10。

ALTER TABLE adb_demo.customer PARTITION BY VALUE(login_time) LIFECYCLE 10;
  • customer表的分區(qū)方式由PARTITION BY VALUE(date_format(login_time, '%Y%m%d')) LIFECYCLE 30變更為 PARTITION BY VALUE(date_format(login_time, '%Y%m')) LIFECYCLE 30。

ALTER TABLE adb_demo.test PARTITION BY VALUE(date_format(login_time, '%Y%m')) LIFECYCLE 30;

變更分區(qū)的生命周期

語法

ALTER TABLE db_name.table_name PARTITIONS N

注意事項

變更分區(qū)的生命周期后,需要等待BUILD完成后,新的生命周期才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。通過SHOW CREATE TABLE db_name.table_name;查詢新的生命周期是否已生效。

示例

customer表的生命周期由30改為40。

ALTER TABLE customer PARTITIONS 40;

存儲策略

變更冷熱分層存儲策略

前提條件

集群的產(chǎn)品系列為湖倉版或數(shù)倉版彈性模式。

語法

ALTER TABLE db_name.table_name STORAGE_POLICY= {'HOT'|'COLD'|'MIXED' hot_partition_count=N}

注意事項

變更冷熱分層存儲策略后,需要等待BUILD完成后,新的存儲策略才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。通過SHOW CREATE TABLE db_name.table_name;可以查詢新的存儲策略是否生效。

示例

  • 更改customer表的存儲策略為COLD。

    ALTER TABLE customer storage_policy = 'COLD';
  • 更改customer表的存儲策略為HOT。

    ALTER TABLE customer storage_policy = 'HOT';
  • 更改customer表的存儲策略為MIXED,其中熱分區(qū)的個數(shù)為10個。

    ALTER TABLE customer storage_policy = 'MIXED' hot_partition_count = 10;

常見問題

是否支持變更列的順序?

不支持變更列順序。

怎樣把VARCHAR類型的列變更為LONGTEXT類型?

AnalyticDB for MySQL支持的字符串類型包括varcharbinary。其中,varchar對應(yīng)MySQL中的char、varchar、text、mediumtext或者longtext。因此,您無需將VARCHAR類型的列變更為LONGTEXT類型。

已建表且表中已有數(shù)據(jù),現(xiàn)新增一個自增列,歷史數(shù)據(jù)的自增列值為空,能否自增填充?

不能。已建表且表中已有數(shù)據(jù)時,增加自增列,只有新寫入數(shù)據(jù)的自增列的值是自增的。如果需要歷史數(shù)據(jù)的自增列值自增填充,您需要新建一個包含自增列的表,并遷移數(shù)據(jù)到新表。

是否支持變更分布鍵或分區(qū)鍵?

AnalyticDB for MySQL不支持增加、刪除或變更分布鍵或分區(qū)鍵。如果您的業(yè)務(wù)需要變更分布鍵或分區(qū)鍵,可嘗試以下方案解決。

假設(shè)您有一個表order需要將現(xiàn)有分布鍵order_id更改為customer_id,操作如下:

  1. 使用分布鍵customer_id創(chuàng)建一個臨時表order_auto_opt_v1。

    CREATE TABLE order_auto_opt_v1 (
      order_id bigint NOT NULL COMMENT '訂單ID',
      customer_id bigint NOT NULL COMMENT '顧客ID',
      customer_name varchar NOT NULL COMMENT '顧客姓名',
      order_time timestamp NOT NULL COMMENT '訂單時間',
      --省略其他字段
      PRIMARY KEY (order_id,customer_id,order_time) --分布鍵customer_id和分區(qū)鍵order_time需要添加到主鍵中
    )
    DISTRIBUTED BY HASH(customer_id) --修改order_id為customer_id
    PARTITION BY VALUE(DATE_FORMAT(order_time, '%Y%m%d')) LIFECYCLE 90 --二級分區(qū)保持不變
    COMMENT '訂單信息表';
  2. 使用INSERT OVERWRITE SELECT將源表的數(shù)據(jù)導(dǎo)入到臨時表,詳情請參見INSERT OVERWRITE SELECT。

    INSERT OVERWRITE order_auto_opt_v1
    SELECT * FROM order;
  3. 判斷分布鍵是否合理。數(shù)據(jù)導(dǎo)入后,需要判斷新的分布鍵是否有數(shù)據(jù)傾斜問題,詳情請參見存儲空間診斷。

  4. 使用RENAME TABLE <源表表名> to <new_源表表名>;更改源表表名。

    RENAME TABLE order to order_backup; --數(shù)據(jù)導(dǎo)入完成后,重命名源表作為備份
  5. 使用RENAME TABLE <臨時表表名> to <源表表名>;將臨時表表名更改為源表表名。

    RENAME TABLE order_auto_opt_v1 to order;

是否支持增加或變更主鍵?

  • 不支持增加、刪除主鍵,即無主鍵表不能變更為有主鍵表,有主鍵表也不能變更為無主鍵表。

  • 不支持增加或減少主鍵列。

  • 不支持變更主鍵列的列名。

  • 不支持變更主鍵列的數(shù)據(jù)類型。

修改生命周期或冷熱分層存儲策略,為什么沒有生效?

修改生命周期或冷熱分層存儲策略后,需要等待BUILD完成后,新的生命周期或存儲策略才能生效。自動BUILD、手動BUILD以及BUILD任務(wù)的進(jìn)度,請參見BUILD。

當(dāng)通過SHOW CREATE TABLE db_name.table_name;查詢到新設(shè)置的生命周期或存儲策略時,說明新的生命周期或存儲策略已生效。