すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB for MySQL:テーブルの変更

最終更新日:Jun 11, 2024

AnalyticDB for MySQLでは、ALTER tableステートメントを実行してテーブルスキーマを変更できます。 ホットデータとコールドデータのテーブル名、列名、列タイプ、通常インデックス、クラスタ化インデックス、外部キーインデックス、パーティション化関数の形式、階層ストレージを変更できます。 このトピックでは、ALTER TABLEステートメントの使用方法について説明します。

構文

ALTER TABLE table_name
  {ADD ANN [インデックス | キー] [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_name (column_name) [index_option]
  | ADD {INDEX | KEY} [index_name] (column_name,...) 
  | ADD {INDEX | KEY} [index_name] (column_name | column_name->'$.json_path',...) 
  | コメント 'コメント'
  | DROP CLUSTEREDキーindex_name
  | DROP [列名] column_name
  | DROP FOREIGN KEYシンボル
  | DROP FULLTEXT INDEX index_name
  | DROP {INDEX | KEY} index_name
  | MODIFY [COLUMN] column_name column_definition
  | コラムコラム名を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][コメント ']
  
  column_attributes:
   [DEFAULT {定数 | CURRENT_TIMESTAMP}| AUTO_INCREMENT]
  
  column_constraints:
   [NULL | NOT NULL]
  
  storage_policy:
   STORAGE_POLICY= {'HOT' | 'COLD' | 'MIXED' hot_partition_count=N} 

JSONインデックス、外部キーインデックス、およびベクトルインデックスの例を除く、このトピックのすべての例は、CREATE tableステートメントを使用して作成された顧客テーブルに基づいて提供されます。 顧客テーブルを作成した場合は、このトピックのサンプルコードを実行できます。 それ以外の場合は、次のサンプルコードを実行して顧客テーブルを作成します。

顧客テーブルを作成するためのサンプルコード

テーブルの顧客を作成する (
  customer_id BIGINT NOT NULL COMMENT 'customer ID '、
  customer_name VARCHAR NOT NULL COMMENT 'customer Name' 、
  phone_num BIGINT NOT NULL COMMENT 'phone number' 、
  city_name VARCHAR NOT NULL COMMENT'city' 、
  sex INT NOT NULL COMMENT 'gender' 、
  id_number VARCHAR NOT NULL COMMENT 'citizen ID' 、
  home_address VARCHAR NOT NULL COMMENT 'home address' 、
  office_address VARCHAR NOT NULL COMMENT 'オフィスアドレス' 、
  年齢INT NOT NULL COMMENT 'age' 、
  login_time TIMESTAMP NOT NULL COMMENT 'ログオン時間' 、
  PRIMARYキー (login_time,customer_id,phone_num)
 )
ハッシュによる分布 (customer_id)
PARTITION BY VALUE(DATE_FORMAT(login_time, '% Y % m % d')) LIFECYCLE 30
コメント '顧客情報テーブル'; 

テーブル

テーブル名の変更

構文

ALTER TABLE db_name.table_name RENAME new_table_name

テーブルの名前をcustomerからnew_customerに変更します。

ALTER TABLE customer RENAME new_customer;

テーブルのコメントの変更

構文

ALTER TABLE db_name.table_name COMMENT'comment'

顧客テーブルのコメントを顧客テーブルに変更します。

ALTER TABLEの顧客コメント '顧客テーブル';

列の追加

構文

ALTER TABLE db_name.table_name ADD [コラム] 
 {column_name column_type [DEFAULT {定数 | CURRENT_TIMESTAMP}| AUTO_INCREMENT] [NULL | NOT NULL] [コメント ']
 | (column column_type [DEFAULT {定数 | CURRENT_TIMESTAMP}| AUTO_INCREMENT] [NULL | NOT NULL] [COMMENT'comment'],...)} 

使用状況ノート

主キー列は追加できません。

  • VARCHARタイプの [Province] 列を顧客テーブルに追加します。

ALTER TABLE adb_demo.customer ADD COLUMN州VARCHARコメント '州';
  • BOOLEAN型のvip列とVARCHAR型のtags列をcustomerテーブルに追加します。

ALTER TABLE adb_demo.customer ADD COLUMN (vip BOOLEAN COMMENT 'VIP' 、タグVARCHAR DEFAULT 'No' COMMENT tag');

列の削除

構文

ALTER TABLE db_name.table_name DROP [COLUMN] column_name

使用状況ノート

主キー列は削除できません。

顧客テーブルからVARCHARタイプのprovince列を削除します。

ALTER TABLE adb_demo.customerドロップコラム州;

列名の変更

構文

ALTER TABLE db_name.table_name RENAME COLUMN column_nameをnew_column_name

使用状況ノート

主キー列の名前は変更できません。

customerテーブルのcity_name列の名前をcityに変更します。

ALTER TABLEのお客様がCOLUMN city_nameを都市に登録します。

列のデータ型の変更

構文

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name new_column_type

使用状況ノート

  • 主キー列のデータ型は変更できません。

  • 次のデータ型を変更できます。

    • データ型は、値の範囲が狭い型から値の範囲が広い型にしか変更できません。

    • 整数データ型には、TINYINT、SMALLINT、INT、およびBIGINTがあります。 データ型は、値の範囲が狭い型から値の範囲が広い型にしか変更できません。 たとえば、列のデータ型をTINYINTからBIGINTに変更できますが、その逆はできません。

    • 浮動小数点データ型には、FLOATとDOUBLEがあります。 列のデータ型をFLOATからDOUBLEに変更できますが、その逆はできません。

    • TINYINT、SMALLINT、INT、BIGINTなどの整数データ型は、FLOATやDOUBLEなどの浮動小数点データ型に変更できます。

    • DECIMALタイプの精度は、低から高に変更できます。

    重要

    マイナーエンジンバージョンが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以降であるクラスターのみが、整数データ型から浮動小数点データ型への変更およびDECIMAL型の精度の変更をサポートしています。

customerテーブルのage列のデータ型をINTからBIGINTに変更します。

ALTER TABLE adb_demo.customer MODIFY COLUMN age BIGINT;

列のデフォルト値の変更

構文

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

  • customerテーブルのsex列のデフォルト値を0に設定します。

ALTER TABLE adb_demo.customer MODIFY COLUMNセックスINT NOT NULLデフォルト0;
  • customerテーブルのlogin_time列のデフォルト値をCURRENT_TIMESTAMPに設定します。

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

列の空の値を許可する

構文

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

使用状況ノート

値制約をNOT NULLからNULLに変更できますが、その逆はできません。

customerテーブルのprovince列に空の値を許可します。

ALTER TABLE adb_demo.customer MODIFY COLUMN州VARCHAR NULL;

コラムのコメントを変更する

構文

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

顧客テーブルの [province] 列のコメントを、顧客がいる [province] に変更します。

ALTER TABLE adb_demo.customer MODIFY COLUMN省VARCHARコメント '顧客が配置されている州';

インデックス

インデックスの作成

デフォルトでは、AnalyticDB for MySQLでテーブルを作成するときに、すべての列のインデックスを作成するためにindex_all='Y' が使用されます。 すべての列にインデックスが作成されていない場合は、次の方法を使用してインデックスを作成できます。

構文

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

パラメーターの説明

column_name: 列の名前。 このステートメントは、単純なデータ型の列のインデックスを作成するために使用されます。 JSON型の列のインデックスを作成するには、「JSONインデックスの追加」をご参照ください。

customerテーブルのage列にインデックスを追加します。

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

JSONインデックスの追加

構文

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

パラメーターの説明

  • column_name: インデックスが作成される列の名前。 列はJSONデータ型である必要があります。

  • column_name->'$.json_path': インデックスが作成されるJSONプロパティ。 column_nameで指定する列はJSON型である必要があります。 JSONインデックスの詳細については、「JSONインデックス」をご参照ください。

    重要
    • V3.1.6.8以降のAnalyticDB for MySQLクラスターのみが、column_name->'$.json_pathパラメーターをサポートしています。

      クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

    • JSON列にすでにインデックスがある場合は、JSON列のプロパティキーのインデックスを作成する前に、JSON列のインデックスを削除する必要があります。

使用状況ノート

追加したインデックスは、ビルドジョブの完了後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。 SHOW CREATE TABLE db_name.table_name; ステートメントを実行して、JSONインデックスが有効かどうかを照会できます。

次のステートメントを使用して、テーブルスキーマを作成し、データを挿入します。

テーブルの作成json_test (
  id int,
  vj json
)
json_test VALUES(1、'{"a":1、"b":2}') 、(2、'{"a":2、"b":3}'); 
に挿入します。

JSON_testテーブルのvj列のaプロパティにjsonインデックスを作成します。

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

インデックスとJSONインデックスの削除

構文

ALTER TABLE db_name.table_name DROP KEY index_name

パラメーターの説明

index_name: 削除するインデックスの名前。 SHOW INDEX FROM db_name.table_name; ステートメントを実行して、index_nameの値を照会できます。

customerテーブルのage列のインデックスを削除します。

ALTER TABLE adb_demo.customer DROP KEY age_idx;

クラスター化インデックスの追加

構文

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

使用上の注意

  • クラスタ化インデックスが既に含まれているテーブルにクラスタ化インデックスを追加することはできません。 テーブルには、クラスター化インデックスを1つだけ含めることができます。

  • 追加したクラスター化インデックスは、ビルドジョブの完了後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。 SHOW CREATE TABLE db_name.table_name; ステートメントを実行して、クラスター化インデックスが有効かどうかを照会できます。

customerテーブルのcustomer_id列にクラスター化インデックスを追加します。

ALTER TABLE adb_demo.customerクラスターキーを追加 (customer_id);

クラスター化インデックスの削除

構文

ALTER TABLE db_name.table_name DROP CLUSTERED KEY index_name

パラメーターの説明

index_name: 削除するクラスター化インデックスの名前。 SHOW CREATE TABLE db_name.table_nameステートメントを実行して、クラスター化インデックスの名前を照会できます。

customerテーブルのcustomer_id列のクラスター化インデックスを削除します。

ALTER TABLE adb_demo.customerクラスターキーを追加 (customer_id);

フルテキストインデックスの追加

前提条件

V3.1.4.9以降のAnalyticDB for MySQLクラスターが作成されます。

説明

構文

ALTER TABLE db_name.table_name ADD FULLTEXT [インデックス | キー] index_name (column_name) [index_option]

パラメーターの説明

  • column_name: フルテキストインデックスを作成する列の名前。 列はVARCHAR型でなければなりません。

  • index_option: フルテキストインデックスに使用されるアナライザーとカスタム辞書。 このパラメーターはオプションです。

    • WITH ANALYZER analyzer_name: フルテキストインデックスに使用されるアナライザーを指定します。 AnalyticDB For MySQLでサポートされているアナライザーの詳細については、「analyzers for full-text indexes」をご参照ください。

    • WITH DICT tbl_dict_name: フルテキストインデックスに使用されるカスタム辞書を指定します。 AnalyticDB For MySQLでサポートされているカスタム辞書の詳細については、「フルテキストインデックスのカスタム辞書」をご参照ください。

使用状況ノート

追加したクラスター化インデックスは、ビルドジョブの完了後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。

customerテーブルのhome_address列にフルテキストインデックスを追加します。

ALTER TABLE adb_demo.customer ADD FULLTEXT INDEX fidx_k(home_address) ANALYZER標準;

フルテキストインデックスの削除

構文

ALTER TABLE db_name.table_name DROP FULLTEXT INDEX index_name

パラメーターの説明

  • column_name: フルテキストインデックスを削除する列の名前。 列はVARCHAR型でなければなりません。

  • index_option: フルテキストインデックスに使用されるアナライザーとカスタム辞書。 このパラメーターはオプションです。

    • WITH ANALYZER analyzer_name: フルテキストインデックスに使用されるアナライザーを指定します。 AnalyticDB For MySQLでサポートされているアナライザーの詳細については、「analyzers for full-text indexes」をご参照ください。

    • WITH DICT tbl_dict_name: フルテキストインデックスに使用されるカスタム辞書を指定します。 AnalyticDB For MySQLでサポートされているカスタム辞書の詳細については、「フルテキストインデックスのカスタム辞書」をご参照ください。

customerテーブルのfidx_kフルテキストインデックスを削除します。

ALTER TABLE adb_demo.customer DROP FULLTEXT INDEX fidx_k;

詳細については、「フルテキストインデックスの作成」をご参照ください。

ベクトルインデックスの追加

前提条件

V3.1.4.0以降のAnalyticDB for MySQLクラスターが作成されます。

説明
  • ベクトル検索機能を使用するには、3.1.5.16、3.1.6.8、3.1.8.6以降のマイナーバージョンを使用することを推奨します。

  • クラスターが前のバージョンではない場合、ベクトル検索機能を使用する前に、CSTORE_PROJECT_PUSH_DOWNおよびCSTORE_PPD_TOP_N_ENABLEパラメーターをfalseに設定することを推奨します。

  • AnalyticDB For MySQLクラスターのマイナーバージョンを照会する方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

構文

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

説明

  • index_name: インデックスの名前。 インデックスの命名規則の詳細については、「制限」トピックの「命名制限」セクションを参照してください。

  • column_name: ベクトル列の名前。 ベクトル列は、array <float>array <byte> 、またはarray <smallint> 型である必要があります。

  • algorithm: ベクトル距離の計算に使用されるアルゴリズム。 値をHNSW_PQに設定します。

  • distancemeasure: ベクトル距離の計算に使用される式。 値をSquaredL2に設定します。 の計算式SquaredL2: (x1 - y1)2+ (x2 - y2)2+. ..(xn - yn)2.

vectorテーブルは、次のステートメントを実行して作成されます。

テーブルの作成ベクトル (
  xid bigint not null,
  cid bigint not null,
  uid varchar not null,
  vid varchar not null,
  wid varchar not null,
  float_feature配列 <float >(4),
  short_feature配列 <smallint >(4) 、
  主要なキー (xid、cid、vid)
) ハッシュによる分配 (xid); 

次のサンプルコードを実行して、float_featureおよびshort_featureのベクトルインデックスを作成します。

ALTER TABLEベクトルADD ANNインデックスidx_float_feature(float_feature);
ALTER TABLEベクトルADD ANNインデックスidx_short_feature(short_feature); 

外部キーの追加

前提条件

AnalyticDB for MySQLクラスターのマイナーバージョンは3.1.10以降である必要があります。

説明

クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

構文

ALTER TABLE db_name.table_name ADD [CONSTRAINT [シンボル]] FOREIGN KEY (fk_column_name) 参照db_name.pk_table_name (pk_column_name)

パラメーターの説明

  • db_name.table_name: 外部キーを追加するテーブルの名前。

  • symbol: (オプション) 外部キー制約の名前。 名前はテーブル内で一意でなければなりません。 このパラメーターを指定しない場合、パーサーは外部キーの列名に_fkを付けて外部キーの制約を指定します。

  • fk_column_name: 外部キー列。 列はすでに存在している必要があります。

  • pk_table_name: 親テーブルの名前。 親テーブルはすでに存在している必要があります。

  • pk_column_name: 外部キー制約列。親テーブルの主キー列です。 列はすでに存在している必要があります。

使用状況ノート

  • テーブルごとに複数の外部キーインデックスが存在する可能性があります。

  • foreign key (sr_item_sk, sr_ticket_number) REFERENCES store_sales(ss_item_sk,d_date_sk) など、複数の列を含む複合外部キーはサポートされません。

  • AnalyticDB for MySQLは、制約の有効性をチェックしません。 親テーブルの主キーと子テーブルの外部キーの間の参照整合性を手動で確認する必要があります。

itemテーブルとstore_salesテーブルは、次のステートメントを実行して作成されます。

CREATE TABLEアイテム
(
 i_item_sk BIGINT NOT NULL、
 i_current_price BIGINT、
 PRIMARYキー (i_item_sk)
)
ハッシュによる分布 (i_item_sk); 
CREATE TABLE store_sales
(
 ss_sale_id BIGINT、
 ss_store_sk BIGINT、
 ss_item_sk BIGINT NOT NULL、
 PRIMARYキー (ss_sale_id)
); 

次のステートメントを実行して、ss_item_sk外部キーをstore_salesテーブルに追加します。 外部キーは、プライマリテーブルアイテムi_item_skキーに関連付けられています。

ALTER TABLE store_sales ADD CONSTRAINT ss_item_sk FOREIGN KEY (ss_item_sk) REFERENCESアイテム (i_item_sk);

詳細については、「プライマリキーと外部キーの制約を使用して不要な結合を排除する」をご参照ください。

外部キーの削除

構文

ALTER TABLE db_name.table_name DROP FOREIGN KEY fk_シンボル

ALTER TABLE store_returns DROP FOREIGN KEY sr_item_sk_fk;

パーティション

パーティション分割関数の形式の変更

前提条件

パーティション分割機能を変更するには、AnalyticDB for MySQLクラスターが次の要件を満たす必要があります。

  • マイナーバージョンは3.1.6以降です。

    説明

    クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

  • パーティショニング機能を変更できるようにするには、Alibaba Cloudテクニカルサポートにお問い合わせください。

構文

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

使用状況ノート

  • 変更されたパーティショニング機能は、BUILDジョブの完了後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。 SHOW CREATE TABLE db_name.table_name; ステートメントを実行して、新しいパーティション分割関数が有効かどうかを照会できます。

  • 非パーティションテーブルをパーティションテーブルに、またはパーティションテーブルを非パーティションテーブルに変更することはできません。 基本的に、パーティションキーを追加または削除することはできません。

  • 既存のパーティションキーに基づいてパーティションフィールドを作成、削除、または変更することはできません。

  • customerテーブルのパーティション分割方法を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テーブルのパーティション分割方法を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;

パーティションのライフサイクルの変更

構文

ALTER TABLE db_name.table_name PARTITIONS N

使用状況ノート

変更されたパーティションのライフサイクルは、BUILDジョブの完了後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。 SHOW CREATE TABLE db_name.table_name; ステートメントを実行して、新しいライフサイクルが有効になるかどうかを照会できます。

顧客テーブルのライフサイクルを30から40に変更します。

ALTER TABLEのお客様のパーティション40;

ストレージポリシー

ホットデータとコールドデータの階層化ストレージの変更

前提条件

クラスターがData Lakehouse EditionまたはData Warehouse Editionである 弾性モードで。

構文

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

使用状況ノート

変更された階層ストレージポリシーは、ビルドジョブの完了後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。 SHOW CREATE TABLE db_name.table_name; ステートメントを実行して、新しいストレージポリシーが有効かどうかを照会できます。

  • customerテーブルのストレージポリシーをCOLDに変更します。

    ALTER TABLE customer storage_policy = 'COLD';
  • 顧客テーブルのストレージポリシーをHOTに変更します。

    ALTER TABLE customer storage_policy = 'HOT';
  • customerテーブルのストレージポリシーをMIXEDに変更します。 テーブルには10個のホットパーティションが含まれています。

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

FAQ

列の順序を変更できますか?

いいえ、列の順序を変更することはできません。

VARCHAR型の列をLONGTEXT型に変更するにはどうすればよいですか?

AnalyticDB for MySQLは、VARCHARおよびBINARY文字列タイプをサポートしています。 VARCHARタイプは、MySQLのCHARVARCHARTEXTMEDIUMTEXT、またはLONGTEXTタイプに対応します。 VARCHAR型の列をLONGTEXT型に変更する必要はありません。

データを含む既存のテーブルに自動インクリメント列を追加した後、システムは履歴データの列を自動的に設定しますか?

いいえ。 データを含む既存のテーブルに自動インクリメント列を追加すると、システムは自動的にその列に新しく挿入されたデータのみを入力します。 システムが履歴データの列を自動的に設定する場合は、自動インクリメント列を含むテーブルを作成し、既存のテーブルから新しいテーブルにデータを移行する必要があります。

配布キーまたはパーティションキーを変更できますか?

AnalyticDB for MySQLクラスターのテーブルの配布キーまたはパーティションキーを追加、削除、または変更することはできません。 テーブルに別の配布キーまたはパーティションキーを使用する場合は、次の手順を実行します。

この例では、orderという名前のテーブルが使用されます。 その配布キーは、order_idからcustomer_idに変更されます。

  1. 配布キーcustomer_idを使用して、order_auto_opt_v1という名前の一時テーブルを作成します。

    CREATE TABLE order_auto_opt_v1 (
      order_id bigint NOT NULL COMMENT 'Order ID' 、
      customer_id bigint NOT NULL COMMENT 'Customer ID' 、
      customer_name varchar NOT NULL COMMENT 'Customer name' 、
      order_time timestamp NOT NULL COMMENT 'Order time',
      -- その他のフィールドは省略されます。
      PRIMARY KEY (order_id,customer_id,order_time) -- 配布キーcustomer_idおよびパーティションキーorder_timeを主キーに追加する。
    )
    分散型HASH(customer_id) − 分配キーをorder_idからcustomer_idに変更する。
    PARTITION BY VALUE(DATE_FORMAT(order_time, '% Y % m % d')) LIFECYCLE 90 − リストパーティション設定を保持する。
    コメント '注文情報テーブル'; 
  2. INSERT OVERWRITE SELECTステートメントを実行して、ソーステーブルから一時テーブルにデータをインポートします。 詳細については、「INSERT OVERWRITE SELECT」をご参照ください。

    INSERT OVERWRITE order_auto_opt_v1
    SELECT * から注文; 
  3. データのインポート後、データスキューなど、新しい配布キーに関連する問題がないか確認します。 詳細については、「データモデリング診断」トピックの「分布フィールドスキューに関する診断」セクションをご参照ください。

  4. RENAME TABLE <ソーステーブルの名前> to <New Name of the source table>; 文を実行して、ソーステーブルの名前を変更します。

    RENAME TABLE order to order_backup; -- データがインポートされたら、ソーステーブルの名前をバックアップとして変更します。
  5. RENAME TABLE <一時テーブルの名前> to <Name of the source table>; ステートメントを実行して、一時テーブルの名前をソーステーブルの名前に変更します。

    RENAME TABLE order_auto_opt_v1を注文します。

プライマリキーを追加または変更できますか?

  • 主キーを追加または削除することはできません。 主キーがないテーブルは、主キーがあるテーブルに変更することはできません。 主キーがあるテーブルは、主キーがないテーブルに変更することはできません。

  • 主キー列は追加または削除できません。

  • 主キー列の名前は変更できません。

  • 主キー列のデータ型は変更できません。

、パーティションのライフサイクルやホットデータとコールドデータの階層ストレージなど、テーブルの設定を変更しましたが、変更は有効になりました。 これはなぜですか。

変更されたライフサイクルとホットデータとコールドデータの階層ストレージは、BUILDジョブが完了した後に有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブの進行状況の詳細については、「ビルド」をご参照ください。

SHOW CREATE TABLE db_name.table_name; ステートメントを実行して、新しいライフサイクルと階層ストレージポリシーが有効になるかどうかを照会できます。