All Products
Search
Document Center

MaxCompute:Operasi kolom

Last Updated:Mar 01, 2026

MaxCompute mendukung penambahan, penghapusan, penggantian nama, pengubahan urutan, serta modifikasi kolom pada tabel yang sudah ada.

Ikhtisar operasi

OperasiEvolusi skema diperlukanDeskripsi
Tambah kolom atau komentarYaMenambahkan kolom ke tabel yang sudah ada
Hapus kolomYaMenghapus satu atau beberapa kolom dari tabel
Ubah tipe data kolomYaMengonversi kolom ke tipe data yang berbeda
Ubah urutan kolomYaMemindahkan kolom ke posisi yang berbeda
Ubah nama kolomTidakMengganti nama kolom
Ubah komentar kolomTidakMemperbarui komentar pada kolom
Ubah nama dan komentar kolomTidakMengganti nama kolom dan memperbarui komentarnya secara bersamaan
Ubah properti NOT NULL kolomTidakMengizinkan nilai NULL untuk kolom kunci non-partisi

Platform yang didukung

Jalankan perintah operasi kolom di salah satu platform berikut:

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  • Ubah izin pada tabel target.

  • Schema evolution diaktifkan di tingkat proyek (hanya diperlukan untuk menambah kolom, menghapus kolom, mengubah tipe data kolom, dan mengubah urutan kolom).

Aktifkan schema evolution

Jalankan perintah berikut untuk mengaktifkan schema evolution:

setproject odps.schema.evolution.enable=true;
Catatan

Hanya pemilik proyek atau pengguna dengan role Super_Administrator atau Admin yang dapat mengatur parameter ini. Perubahan akan berlaku sekitar 10 menit setelah diatur. Untuk informasi selengkapnya, lihat Assign built-in management roles to a user.

Tambah kolom atau komentar

Tambahkan kolom ke tabel non-partisi atau partisi yang sudah ada. Kolom baru ditambahkan di akhir tabel. MaxCompute mendukung tipe data kompleks seperti STRUCT<x: STRING, y: BIGINT> dan MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>>.

Sintaks

ALTER TABLE <table_name>
  ADD COLUMNS [IF NOT EXISTS]
  (<col_name1> <type1> COMMENT ['<col_comment>']
  [, <col_name2> <type2> COMMENT '<col_comment>'...]
  );

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel. Kolom baru ditambahkan di akhir; urutan tidak dapat ditentukan.
col_nameYaNama kolom baru.
typeYaTipe data kolom baru.
col_commentTidakKomentar untuk kolom baru.

Contoh

Tambahkan dua kolom ke tabel sale_detail:

ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT);

Tambahkan dua kolom dengan komentar ke tabel sale_detail:

ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' );

Tambahkan kolom bertipe data kompleks ke tabel sale_detail:

ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>);

Jika kolom sudah ada dan pernyataan mencakup IF NOT EXISTS, pernyataan berhasil tetapi kolom tidak ditambahkan lagi:

-- Pernyataan berhasil, tetapi kolom ID tidak ditambahkan berulang.
ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint);

Tambahkan kolom ke tabel Delta:

CREATE TABLE delta_table_test (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT)
  TBLPROPERTIES ("transactional"="true");

ALTER TABLE delta_table_test ADD COLUMNS (val2 bigint);

Hapus kolom

Hapus satu atau beberapa kolom dari tabel non-partisi atau partisi yang sudah ada. Masukkan yes untuk mengonfirmasi penghapusan saat diminta.

Sintaks

-- Hapus satu kolom.
ALTER TABLE <table_name> DROP COLUMN <col_name>;

-- Hapus beberapa kolom.
ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...];

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel tempat kolom akan dihapus.
col_nameYaNama kolom yang akan dihapus.

Contoh

Hapus kolom customer_id dari tabel sale_detail:

-- Hapus kolom customer_id dari tabel sale_detail. Masukkan yes untuk mengonfirmasi penghapusan.
ALTER TABLE sale_detail DROP COLUMN customer_id;

Hapus kolom customer_id menggunakan DROP COLUMNS:

-- Hapus kolom customer_id dari tabel sale_detail. Masukkan yes untuk mengonfirmasi penghapusan.
ALTER TABLE sale_detail DROP COLUMNS customer_id;

Hapus kolom shop_name dan customer_id dari tabel sale_detail:

-- Hapus kolom shop_name dan customer_id dari tabel sale_detail. Masukkan yes untuk mengonfirmasi penghapusan.
ALTER TABLE sale_detail DROP COLUMNS shop_name, customer_id;

Ubah tipe data kolom

Ubah tipe data kolom yang sudah ada.

Sintaks

ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>;

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel yang berisi kolom tersebut.
old_column_nameYaNama saat ini dari kolom tersebut.
new_column_nameYaNama kolom setelah perubahan. Atur nilai ini sama dengan old_column_name untuk mempertahankan nama yang sama. Nilai ini tidak boleh sama dengan nama kolom lain yang sudah ada.
new_data_typeYaTipe data baru kolom tersebut.

Contoh

Ubah tipe data bidang id di tabel sale_detail dari BIGINT menjadi STRING:

ALTER TABLE sale_detail CHANGE COLUMN id id STRING;

Tabel konversi tipe data

Catatan

Y menunjukkan bahwa konversi didukung. N menunjukkan bahwa konversi tidak didukung. – menunjukkan bahwa konversi tidak berlaku. Y() menunjukkan bahwa konversi didukung jika kondisi dalam tanda kurung terpenuhi.

Data type conversion table

Ubah urutan kolom

Pindahkan kolom ke posisi berbeda dalam tabel non-partisi atau partisi yang sudah ada. Secara opsional, ganti nama kolom tersebut sekaligus.

Sintaks

ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>;

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel.
old_column_nameYaNama saat ini dari kolom yang akan dipindahkan.
new_col_nameYaNama baru kolom tersebut. Atur nilai ini sama dengan old_column_name untuk mempertahankan nama yang sama. Nilai ini tidak boleh sama dengan nama kolom lain yang sudah ada.
column_typeYaTipe data asli kolom tersebut. Ini tidak dapat diubah.
column_nameYaKolom setelah mana kolom yang dipindahkan akan ditempatkan.

Contoh

Ganti nama kolom customer menjadi customer_id dan pindahkan setelah kolom total_price:

ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price;

Pindahkan kolom customer_id setelah kolom total_price tanpa mengganti namanya:

ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;

Ubah nama kolom

Ganti nama kolom dalam tabel non-partisi atau partisi yang sudah ada.

Sintaks

ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>;

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel.
old_col_nameYaNama kolom yang akan diganti. Kolom tersebut harus ada.
new_col_nameYaNama baru untuk kolom tersebut. Nama harus unik.

Contoh

Ganti nama kolom customer_name menjadi customer di tabel sale_detail:

ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;

Ubah komentar kolom

Perbarui komentar kolom dalam tabel non-partisi atau partisi yang sudah ada.

Sintaks

ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>';

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel.
col_nameYaNama kolom. Kolom tersebut harus ada.
col_commentYaKomentar baru. Komentar harus berupa string valid dengan panjang maksimal 1024 byte.

Contoh

Ubah komentar kolom customer di tabel sale_detail0113:

ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';

Ubah nama dan komentar kolom

Ganti nama kolom dan perbarui komentarnya secara bersamaan dalam tabel non-partisi atau partisi.

Sintaks

ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>';

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel.
old_col_nameYaNama kolom yang akan diubah. Kolom tersebut harus ada.
new_col_nameYaNama baru untuk kolom tersebut. Nama harus unik.
column_typeYaTipe data kolom tersebut.
col_commentOpsionalKomentar baru. Isinya dapat mencapai panjang 1024 byte.

Contoh

Ganti nama kolom customer menjadi customer_newname dan atur komentarnya menjadi 'customer':

ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';

Ubah properti NOT NULL kolom

Izinkan nilai NULL untuk kolom kunci non-partisi. Operasi ini tidak dapat dikembalikan. Setelah nilai NULL diizinkan, kolom tidak dapat dikembalikan ke status NOT NULL.

Untuk memeriksa apakah kolom mengizinkan nilai NULL, jalankan DESC EXTENDED table_name; dan periksa bidang Nullable:

  • true — Nilai NULL diizinkan.

  • false — Nilai NULL tidak diizinkan.

Sintaks

ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel.
old_col_nameYaNama kolom kunci non-partisi yang akan diubah. Kolom tersebut harus ada.

Contoh

Buat tabel partisi dengan kendala NOT NULL pada kolom id, lalu izinkan nilai NULL:

-- Buat tabel partisi di mana kolom id tidak boleh NULL.
CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string);

-- Lihat properti tabel.
DESC EXTENDED null_test;
-- Hasil berikut dikembalikan:
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
+------------------------------------------------------------------------------------+
| id       | int    |       |               | false    | NULL         |              |
| name     | string |       |               | true     | NULL         |              |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| ds              | string     |                                                     |
+------------------------------------------------------------------------------------+

-- Izinkan kolom id bernilai NULL.
ALTER TABLE null_test CHANGE COLUMN id NULL;
-- Lihat properti tabel.
DESC EXTENDED null_test;
-- Hasil berikut dikembalikan:
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
+------------------------------------------------------------------------------------+
| id       | int    |       |               | true     | NULL         |              |
| name     | string |       |               | true     | NULL         |              |
+------------------------------------------------------------------------------------+
| Partition Columns:                                                                 |
+------------------------------------------------------------------------------------+
| ds              | string     |                                                     |
+------------------------------------------------------------------------------------+

Batasan schema evolution

Ketika operasi schema evolution (mengubah urutan kolom, menambah dan mengatur ulang kolom, atau menghapus kolom) memodifikasi tabel, perilaku baca dan tulis berubah untuk jenis pekerjaan tertentu.

Jenis pekerjaanBacaTulis
MapReduce 1.0 / Tugas GraphTidak didukungTidak didukung
CUPID Spark (Spark-2.3.0-odps0.34.0 atau Spark-3.1.1-odps0.34.0)DidukungTidak didukung
Pekerjaan PAIDidukungTidak didukung
Hologres (versi sebelum 1.3, tabel eksternal)Tidak didukungTidak didukung

Batasan tambahan:

  • CLONE TABLE tidak didukung setelah schema evolution terjadi.

  • Streaming Tunnel melaporkan error setelah schema evolution terjadi.

Referensi