All Products
Search
Document Center

AnalyticDB:ALTER TABLE

Last Updated:Sep 17, 2026

ALTER TABLE memodifikasi skema tabel yang sudah ada di AnalyticDB for MySQL. Gunakan perintah ini untuk mengganti nama tabel dan kolom, mengubah tipe data dan kendala kolom, mengelola indeks, menyesuaikan siklus hidup partisi, serta mengonfigurasi kebijakan penyimpanan berjenjang.

Tabel contoh

Sebagian besar contoh dalam topik ini menggunakan tabel customer. Jika Anda belum membuatnya, jalankan pernyataan berikut:

Pernyataan contoh untuk membuat tabel

CREATE TABLE customer (
  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 'ID card number',
  home_address VARCHAR NOT NULL COMMENT 'Home address',
  office_address VARCHAR NOT NULL COMMENT 'Office address',
  age INT NOT NULL COMMENT 'Age',
  login_time TIMESTAMP NOT NULL COMMENT 'Logon time',
  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 'Customer information table';

Contoh untuk indeks JSON, kunci asing, dan indeks vektor menggunakan definisi tabel masing-masing.

Sintaksis

ALTER TABLE table_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 {INDEX|KEY} [index_name] (column_name)
  | ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path')
  | ADD {INDEX|KEY} [index_name] (column_name->'$[*]')
  | ADD CLUSTERED [INDEX|KEY] [index_name] (column_name [ASC|DESC])
  | ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]
  | ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ ] [distancemeasure=SquaredL2]
  | 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
  | DROP PARTITION (partition_name,...)
  | MODIFY [COLUMN] column_name column_definition
  | RENAME COLUMN column_name TO new_column_name
  | RENAME new_table_name
  | INDEX_ALL = {'Y'|'N'}
  | storage_policy
  | PARTITION BY VALUE{(column_name)|(DATE_FORMAT(column_name, 'format'))|(FROM_UNIXTIME(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}

Tabel

Ganti nama tabel

ALTER TABLE db_name.table_name RENAME new_table_name

Contoh: Ganti nama customer menjadi new_customer.

ALTER TABLE customer RENAME new_customer;

Ubah komentar tabel

ALTER TABLE db_name.table_name COMMENT 'comment'

Contoh: Perbarui komentar pada tabel customer.

ALTER TABLE customer COMMENT 'Customer table';

Kolom

Tambahkan kolom

ALTER TABLE db_name.table_name ADD [COLUMN]
  {column_name column_type [DEFAULT {constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT] [NULL|NOT NULL] [COMMENT 'comment']
  | (column_name column_type [DEFAULT {constant|CURRENT_TIMESTAMP}|AUTO_INCREMENT] [NULL|NOT NULL] [COMMENT 'comment'],...)}
Kolom kunci primer tidak dapat ditambahkan.

Contoh 1: Tambahkan kolom province bertipe VARCHAR ke tabel customer.

ALTER TABLE adb_demo.customer ADD COLUMN province VARCHAR COMMENT 'Province';

Example 2: Tambahkan dua kolom sekaligus — vip bertipe BOOLEAN dan tags bertipe VARCHAR.

ALTER TABLE adb_demo.customer ADD COLUMN (vip BOOLEAN COMMENT 'Is VIP', tags VARCHAR DEFAULT 'None' COMMENT 'Tag');

Hapus kolom

ALTER TABLE db_name.table_name DROP [COLUMN] column_name
Kolom kunci primer tidak dapat dihapus.

Contoh: Hapus kolom province dari tabel customer.

ALTER TABLE adb_demo.customer DROP COLUMN province;

Ganti nama kolom

ALTER TABLE db_name.table_name RENAME COLUMN column_name TO new_column_name
Kolom kunci primer tidak dapat diganti namanya.

Contoh: Ganti nama city_name menjadi city pada tabel customer.

ALTER TABLE customer RENAME COLUMN city_name TO city;

Ubah tipe data kolom

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name new_column_type

Perubahan tipe data hanya mengikuti aturan pelebaran — Anda dapat memperluas rentang tipe, tetapi tidak menyempitkannya. Tabel berikut merangkum perubahan yang didukung:

Perubahan Didukung
Integer lebih kecil ke integer lebih besar (misalnya, TINYINT ke BIGINT) Ya
Integer lebih besar ke integer lebih kecil (misalnya, BIGINT ke TINYINT) Tidak
FLOAT ke DOUBLE Ya
DOUBLE ke FLOAT Tidak
Tipe integer ke tipe floating-point (FLOAT atau DOUBLE) Ya (berlaku persyaratan versi)
Meningkatkan presisi DECIMAL Ya (berlaku persyaratan versi)
Mengurangi presisi DECIMAL Tidak
Perubahan tipe data kolom kunci primer Tidak
Penting

Mengubah tipe integer ke tipe floating-point dan meningkatkan presisi DECIMAL memerlukan kluster dengan versi kernel 3.1.8.10–3.1.8.x, 3.1.9.6–3.1.9.x, 3.1.10.3–3.1.10.x, atau 3.2.0.1 atau lebih baru.

Contoh: Ubah kolom age dari INT ke BIGINT.

ALTER TABLE adb_demo.customer MODIFY COLUMN age BIGINT;

Ubah nilai default kolom

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

Contoh 1: Tetapkan nilai default sex menjadi 0.

ALTER TABLE adb_demo.customer MODIFY COLUMN sex INT NOT NULL DEFAULT 0;

Contoh 2: Tetapkan nilai default login_time menjadi CURRENT_TIMESTAMP.

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

Izinkan nilai NULL

ALTER TABLE db_name.table_name MODIFY [COLUMN] column_name column_type NULL
Hanya perubahan dari NOT NULL ke NULL yang didukung. Mengubah NULL ke NOT NULL tidak didukung.

Contoh: Izinkan kolom province menerima nilai NULL.

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR NULL;

Ubah komentar kolom

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

Contoh: Perbarui komentar pada kolom province.

ALTER TABLE adb_demo.customer MODIFY COLUMN province VARCHAR COMMENT 'The province where the customer is located';

Indeks

Tambahkan indeks reguler

Secara default, tabel XUANWU_V2 dibuat tanpa indeks seluruh kolom (INDEX_ALL='N'), sedangkan tabel XUANWU menyertakannya (INDEX_ALL='Y'). Tambahkan indeks ke kolom individual sesuai kebutuhan.

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

Kolom tersebut harus memiliki tipe data sederhana. Untuk kolom JSON, lihat Tambahkan indeks JSON.

Contoh: Tambahkan indeks ke kolom age.

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

Modifikasi indeks seluruh kolom

Untuk tabel XUANWU_V2, aktifkan/nonaktifkan pengindeksan seluruh kolom setelah pembuatan tabel menggunakan properti INDEX_ALL. Pengaturan ini tidak memengaruhi indeks JSON, teks penuh, atau vektor.

Prasyarat

Tabel XUANWU_V2 harus berada di kluster dengan versi kernel 3.2.3.7 atau lebih baru, atau 3.2.4.3 atau lebih baru.

Untuk melihat dan memperbarui versi minor kluster Anda, login ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
ALTER TABLE db_name.table_name INDEX_ALL = {'Y'|'N'};
Nilai Efek
Y Mode indeks seluruh kolom: membuat indeks reguler untuk semua kolom
N Mode non-indeks seluruh kolom: hanya menyimpan indeks kunci primer; semua indeks reguler lainnya dihapus

Catatan penggunaan:

  • Untuk tabel XUANWU, pengindeksan seluruh kolom hanya dapat dikonfigurasi saat pembuatan tabel. Untuk menonaktifkannya, hapus indeks satu per satu.

  • Jika INDEX_ALL='Y' dan Anda menghapus indeks reguler menggunakan pernyataan Data Definition Language (DDL), properti tersebut secara otomatis berubah menjadi INDEX_ALL='N'. Hanya indeks target yang dihapus; indeks lain tidak terpengaruh.

  • Saat INDEX_ALL='N', SHOW CREATE TABLE mungkin tidak secara eksplisit menampilkan properti ini, tetapi tetap berlaku.

Contoh 1: Nonaktifkan pengindeksan seluruh kolom pada tabel customer (saat ini INDEX_ALL='Y').

ALTER TABLE adb_demo.customer INDEX_ALL = 'N';

Setelah dieksekusi, indeks reguler pada kolom non-kunci primer seperti customer_name, city_name, dan sex dihapus.

Contoh 2: Aktifkan pengindeksan seluruh kolom pada tabel customer (saat ini INDEX_ALL='N', dengan indeks yang sudah ada pada customer_id, phone_num, dan login_time).

ALTER TABLE adb_demo.customer INDEX_ALL = 'Y';

Setelah dieksekusi, indeks reguler dibuat untuk semua kolom yang belum memiliki indeks, seperti customer_name, city_name, dan sex.

Tambahkan indeks JSON

Catatan penggunaan

Perilaku indeks JSON berbeda berdasarkan mesin tabel:

  • Tabel XUANWU_V2 (partisi dan non-partisi): indeks langsung berlaku — tidak perlu pekerjaan BUILD.

  • Tabel XUANWU non-partisi: indeks hanya berlaku setelah pekerjaan BUILD selesai.

  • Tabel XUANWU partisi: picu secara manual pekerjaan BUILD seluruh tabel. Indeks hanya berlaku setelah pekerjaan BUILD selesai.

Indeks JSON

ALTER TABLE db_name.table_name ADD {INDEX|KEY} [index_name] (column_name|column_name->'$.json_path')
Parameter Deskripsi
column_name Membuat indeks pada kolom JSON. Kolom harus bertipe JSON.
column_name->'$.json_path' Membuat indeks pada kunci properti tertentu dalam objek JSON. Untuk informasi lebih lanjut, lihat JSON indexes.
Penting
  • Sintaksis column_name->'$.json_path' memerlukan versi kluster V3.1.6.8 atau lebih baru. Untuk melihat dan memperbarui versi minor, login ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.

  • Jika kolom JSON sudah memiliki indeks, hapus terlebih dahulu sebelum membuat indeks pada kunci properti kolom tersebut.

Contoh: Buat indeks JSON pada properti a dari kolom vj.

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}');
ALTER TABLE json_test ADD KEY age_idx(vj->'$.a');

Indeks Array JSON

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

column_name->'$[*]' menentukan kolom Array JSON yang akan diindeks. Misalnya, vj->'$[*]' membuat indeks Array JSON pada kolom vj.

Contoh: Buat indeks Array JSON pada kolom vj.

CREATE TABLE json_test(
  id INT,
  vj JSON
)
DISTRIBUTED BY HASH(id);

INSERT INTO json_test VALUES(1, '["CP-018673", 1, false]');
ALTER TABLE json_test ADD KEY index_vj(vj->'$[*]');

Hapus indeks reguler atau JSON

ALTER TABLE db_name.table_name DROP KEY index_name

Jalankan SHOW INDEX FROM db_name.table_name; untuk menemukan nama indeks.

Contoh 1: Hapus indeks age_idx dari tabel customer.

ALTER TABLE adb_demo.customer DROP KEY age_idx;

Contoh 2: Hapus indeks JSON Array index_vj dari json_test.

ALTER TABLE adb_demo.customer DROP KEY index_vj;

Tambahkan indeks terkluster

ALTER TABLE db_name.table_name ADD CLUSTERED [INDEX|KEY] [index_name] (column_name1 [ASC|DESC], column_name2 [ASC|DESC])

Catatan penggunaan:

  • Indeks terkluster diurutkan secara ascending (ASC) secara default. Untuk beban kerja yang diurutkan secara descending, atur DESC saat membuat tabel.

  • Satu tabel hanya dapat memiliki satu indeks terkluster.

  • Setelah menambahkan indeks terkluster, picu dan selesaikan pekerjaan BUILD agar berlaku. Jalankan SHOW CREATE TABLE db_name.table_name; untuk mengonfirmasi.

Contoh: Tambahkan indeks terkluster pada customer_id.

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

Hapus indeks terkluster

ALTER TABLE db_name.table_name DROP CLUSTERED KEY index_name

Jalankan SHOW CREATE TABLE db_name.table_name untuk menemukan nama indeks terkluster.

Contoh: Hapus indeks terkluster bernama index dari tabel customer.

ALTER TABLE adb_demo.customer DROP CLUSTERED KEY index;

Tambahkan indeks teks penuh

Prasyarat

Kluster AnalyticDB for MySQL versi V3.1.4.9 atau lebih baru. Untuk hasil terbaik, gunakan V3.1.4.17 atau lebih baru.

Untuk informasi cara menanyakan versi minor, lihat How do I query the version of an AnalyticDB for MySQL cluster?
ALTER TABLE db_name.table_name ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]
Parameter Deskripsi
column_name Kolom yang akan diindeks. Harus bertipe VARCHAR.
index_option Opsional. Menentukan pemisah kata dan kamus kustom.
WITH ANALYZER analyzer_name Alat analisis untuk indeks teks penuh. Lihat Analyzers for full-text indexes.
WITH DICT tbl_dict_name Kamus kustom untuk indeks teks penuh. Lihat Custom dictionaries for full-text indexes.
Penting

Indeks teks penuh hanya berlaku setelah pekerjaan BUILD dipicu dan diselesaikan.

Contoh: Tambahkan indeks teks penuh ke kolom home_address menggunakan alat analisis standard.

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

Untuk informasi lebih lanjut, lihat Create a full-text index.

Hapus indeks teks penuh

ALTER TABLE db_name.table_name DROP FULLTEXT INDEX index_name

Contoh: Hapus indeks teks penuh fidx_k dari tabel customer.

ALTER TABLE adb_demo.customer DROP FULLTEXT INDEX fidx_k;

Tambahkan indeks vektor

Prasyarat

Kluster AnalyticDB for MySQL versi V3.1.4.0 atau lebih baru. Versi minor yang direkomendasikan: 3.1.5.16, 3.1.6.8, 3.1.8.6, dan lebih baru.

Jika kluster Anda tidak menggunakan salah satu versi yang direkomendasikan, atur CSTORE_PROJECT_PUSH_DOWN dan CSTORE_PPD_TOP_N_ENABLE ke false sebelum menggunakan pencarian vektor. Untuk memperbarui versi minor, hubungi dukungan teknis. Untuk informasi cara menanyakan versi minor, lihat How do I query the version of an AnalyticDB for MySQL cluster?
ALTER TABLE db_name.table_name ADD ANN [INDEX|KEY] [index_name] (column_name) [algorithm=HNSW_PQ] [distancemeasure=SquaredL2]
Parameter Deskripsi
index_name Nama indeks. Untuk konvensi penamaan, lihat bagian Naming limits.
column_name Kolom vektor yang akan diindeks. Tipe kolom harus array<float>, array<byte>, atau array<smallint>.
algorithm Algoritma yang digunakan untuk menghitung jarak vektor. Atur ke HNSW_PQ.
distancemeasure Rumus jarak. Atur ke SquaredL2. Rumus: (x1-y1)^2 + (x2-y2)^2 + ... + (xn-yn)^2.

Contoh: Buat indeks vektor pada kolom float_feature dan short_feature.

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);
ALTER TABLE vector ADD ANN INDEX idx_float_feature(float_feature);
ALTER TABLE vector ADD ANN INDEX idx_short_feature(short_feature);

Tambahkan kunci asing

Prasyarat

Kluster AnalyticDB for MySQL versi V3.1.10 atau lebih baru.

Untuk melihat dan memperbarui versi minor, masuk ke Konsol AnalyticDB for MySQL, lalu buka bagian Configuration Information pada halaman Cluster Information.
ALTER TABLE db_name.table_name ADD [CONSTRAINT [symbol]] FOREIGN KEY (fk_column_name) REFERENCES db_name.pk_table_name (pk_column_name)
Parameter Deskripsi
db_name.table_name Tabel tempat menambahkan kunci asing.
symbol Opsional. Nama kendala kunci asing — harus unik dalam tabel. Jika dihilangkan, parser menggunakan <fk_column_name>_fk sebagai nama kendala.
fk_column_name Kolom kunci asing. Harus sudah ada.
pk_table_name Tabel utama. Harus sudah ada.
pk_column_name Kolom kunci primer dari tabel utama. Harus sudah ada.

Catatan penggunaan:

  • Satu tabel dapat memiliki beberapa indeks kunci asing.

  • Indeks kunci asing tidak dapat mencakup beberapa kolom (misalnya, FOREIGN KEY (sr_item_sk, sr_ticket_number) tidak didukung).

  • AnalyticDB for MySQL tidak menegakkan kendala data. Validasi hubungan kendala antara kunci primer dan kunci asing di aplikasi Anda.

  • Kendala kunci asing tidak dapat ditambahkan ke tabel eksternal.

Contoh: Tambahkan kunci asing pada store_sales yang mereferensi tabel item.

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)
);
ALTER TABLE store_sales ADD CONSTRAINT ss_item_sk FOREIGN KEY (ss_item_sk) REFERENCES item (i_item_sk);

Untuk informasi lebih lanjut, lihat Eliminate unnecessary joins using primary and foreign key constraints.

Hapus kunci asing

ALTER TABLE db_name.table_name DROP FOREIGN KEY fk_symbol

Contoh:

ALTER TABLE store_returns DROP FOREIGN KEY sr_item_sk_fk;

Partisi

Ubah siklus hidup partisi

ALTER TABLE db_name.table_name PARTITIONS N

Catatan penggunaan:

  • Pada kluster dengan versi kernel 3.2.4.1 atau lebih baru, atur N ke 0 untuk menghapus manajemen siklus hidup partisi.

  • Siklus hidup baru hanya berlaku setelah pekerjaan BUILD dipicu dan diselesaikan. Jalankan SHOW CREATE TABLE db_name.table_name; untuk memverifikasi.

Contoh 1: Hapus siklus hidup dari tabel customer.

ALTER TABLE customer PARTITIONS 0;

Contoh 2: Ubah siklus hidup dari 30 hari menjadi 40 hari.

ALTER TABLE customer PARTITIONS 40;

Hapus partisi

ALTER TABLE DROP PARTITION memiliki efek yang sama dengan TRUNCATE TABLE PARTITION.
ALTER TABLE db_name.table_name DROP PARTITION (partition_name,...)
Peringatan

Menghapus partisi akan menghapus permanen semua data dalam partisi tersebut. Tindakan ini tidak dapat dikembalikan.

Contoh 1: Hapus partisi 20241220 dari tabel customer.

ALTER TABLE adb_demo.customer DROP PARTITION (20241220);

Contoh 2: Hapus partisi 20241218 dan 20241219.

ALTER TABLE adb_demo.customer DROP PARTITION (20241218,20241219);

Kebijakan penyimpanan

Ubah kebijakan penyimpanan berjenjang

Prasyarat

  • Kluster menggunakan Edisi Perusahaan, Edisi Dasar, Edisi Data Lakehouse, atau Edisi Data Warehouse (mode Elastis).

  • Persyaratan versi kernel:

    • Tabel XUANWU: tidak ada batasan versi kernel.

    • Tabel XUANWU_V2: versi kernel harus 3.2.2.15 atau lebih baru, 3.2.3.13 atau lebih baru, 3.2.4.9 atau lebih baru, atau 3.2.5.3 atau lebih baru.

Untuk melihat dan memperbarui versi minor, login ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.

Untuk tabel XUANWU_V2, tugas terjadwal untuk memindahkan data antara penyimpanan hot dan cold harus diaktifkan:

  • Periksa status: SHOW ADB_CONFIG KEY=SERVERLESS_DATA_STORAGE_CHANGE_SCHEDULE_ENABLE;

    • Jika hasilnya FALSE, tugas dinonaktifkan dan harus diaktifkan.

    • Jika terjadi error, parameter belum diatur dan default-nya TRUE.

  • Aktifkan tugas: SET ADB_CONFIG SERVERLESS_DATA_STORAGE_CHANGE_SCHEDULE_ENABLE = true;

ALTER TABLE db_name.table_name STORAGE_POLICY= {'HOT'|'COLD'|'MIXED' hot_partition_count=N}
Kebijakan penyimpanan baru hanya berlaku setelah pekerjaan BUILD untuk tabel dipicu dan diselesaikan. Secara default, pekerjaan ini berjalan otomatis di latar belakang. Sebelum pekerjaan BUILD selesai, jumlah partisi hot yang dilaporkan oleh information_schema.table_usage mungkin berbeda dari kebijakan yang dikonfigurasi. Jalankan SHOW CREATE TABLE db_name.table_name; untuk mengonfirmasi kebijakan telah berlaku.

Contoh 1: Atur kebijakan penyimpanan ke COLD.

ALTER TABLE customer storage_policy = 'COLD';

Contoh 2: Atur kebijakan penyimpanan ke HOT.

ALTER TABLE customer storage_policy = 'HOT';

Contoh 3: Atur kebijakan penyimpanan ke MIXED dengan 10 partisi hot.

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

FAQ

Apakah saya bisa mengubah urutan kolom?

Tidak. Urutan kolom tidak dapat diubah di AnalyticDB for MySQL.

Bagaimana cara mengubah kolom VARCHAR menjadi LONGTEXT?

Tidak diperlukan konversi. Tipe VARCHAR di AnalyticDB for MySQL setara dengan CHAR, VARCHAR, TEXT, MEDIUMTEXT, dan LONGTEXT di MySQL. Tidak ada perbedaan fungsional di antara mereka.

Jika saya menambahkan kolom AUTO_INCREMENT ke tabel yang sudah berisi data, apakah baris historis akan diisi?

Tidak. Hanya baris yang baru dimasukkan yang akan memiliki nilai auto-increment. Untuk mengisi kembali baris historis, buat tabel baru yang menyertakan kolom AUTO_INCREMENT dan migrasikan datanya ke sana.

Apakah saya bisa mengubah kunci distribusi atau kunci partisi?

Tidak. AnalyticDB for MySQL tidak mendukung penambahan, penghapusan, atau perubahan kunci distribusi atau kunci partisi. Untuk mengubahnya, buat tabel baru dan migrasikan data Anda:

  1. Buat tabel baru dengan kunci distribusi yang diinginkan. Contoh: Ubah kunci distribusi tabel order dari order_id menjadi customer_id.

    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',
      --Other fields are omitted.
      PRIMARY KEY (order_id,customer_id,order_time) --The distribution key customer_id and the partition key order_time must be in the primary key.
    )
    DISTRIBUTED BY HASH(customer_id)
    PARTITION BY VALUE(DATE_FORMAT(order_time, '%Y%m%d')) LIFECYCLE 90
    COMMENT 'Order information table';
  2. Impor data dari tabel sumber menggunakan INSERT OVERWRITE SELECT. Untuk informasi lebih lanjut, lihat INSERT OVERWRITE SELECT.

    INSERT OVERWRITE order_auto_opt_v1
    SELECT * FROM order;
  3. Periksa kesenjangan data. Setelah impor, verifikasi bahwa kunci distribusi baru tidak menyebabkan kesenjangan data. Untuk informasi lebih lanjut, lihat Storage diagnostics.

  4. Ganti nama tabel sumber untuk cadangan.

    RENAME TABLE order TO order_backup;
  5. Ganti nama tabel baru menjadi nama asli.

    RENAME TABLE order_auto_opt_v1 TO order;

Apakah saya bisa menambah atau mengubah kunci primer?

Tidak. Operasi kunci primer berikut tidak didukung:

  • Menambahkan atau menghapus kunci primer

  • Mengonversi tabel tanpa kunci primer menjadi tabel dengan kunci primer, atau sebaliknya

  • Menambah atau menghapus kolom kunci primer

  • Mengganti nama kolom kunci primer

  • Mengubah tipe data kolom kunci primer

Mengapa perubahan siklus hidup atau kebijakan penyimpanan berjenjang saya tidak berlaku?

Perubahan tersebut hanya berlaku setelah pekerjaan BUILD untuk tabel dipicu dan diselesaikan. Jalankan SHOW CREATE TABLE db_name.table_name; untuk mengonfirmasi pengaturan baru telah aktif.

Diagnostik

syntax error, error in: 'DISTRIBUTE BY HASH(id) PARTITION BY VAL...'

Kunci primer, kunci partisi, dan kunci distribusi tidak dapat diubah setelah tabel dibuat. Untuk melakukan perubahan tersebut, buat tabel baru dan migrasikan datanya.

Do not allow concurrent add cluster/zorder index task

Pesan error lengkapnya mirip dengan:

Do not allow concurrent add cluster/zorder index task, which in progress: {"clusterColumnIds":[2],"clusterColumns":["phone_num"],"clusterIndexName":"index1","indexOptions":"ASC","type":"ADD_CLUSTERING_KEY"}

Penyebab: Anda menjalankan ALTER TABLE ... ADD CLUSTERED KEY, tetapi pekerjaan BUILD yang membuatnya berlaku belum selesai. Mencoba menambahkan indeks terkluster lain sebelum yang pertama berlaku memicu error ini.

Solusi: Tunggu hingga pekerjaan BUILD berjalan otomatis, atau picu secara manual. Setelah pekerjaan BUILD selesai dan indeks terkluster berlaku, hapus indeks yang ada dan tambahkan yang baru untuk mengubahnya.

Untuk memeriksa status pekerjaan BUILD:

SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;