MaxCompute mendukung operasi untuk memodifikasi kolom dalam tabel yang sudah ada, seperti menambahkan kolom, menghapus kolom, dan mengubah tipe data kolom.
Tabel berikut menjelaskan perintah operasi kolom dalam SQL MaxCompute.
Operasi | Fitur | Peran | Titik masuk |
Tambahkan kolom atau komentar ke tabel non-partisi atau tabel partisi yang sudah ada. | Pengguna dengan izin Alter pada tabel | Anda dapat menjalankan perintah dalam topik ini di platform berikut: | |
Hapus kolom dari tabel non-partisi atau tabel partisi yang sudah ada. | |||
Ubah tipe data kolom yang sudah ada. | |||
Sesuaikan urutan kolom tertentu dalam sebuah tabel. | |||
Modifikasi nama kolom dalam tabel non-partisi atau tabel partisi yang sudah ada. | |||
Modifikasi komentar kolom dalam tabel non-partisi atau tabel partisi yang sudah ada. | |||
Secara bersamaan modifikasi nama dan komentar kolom dalam tabel non-partisi atau tabel partisi yang sudah ada. | |||
Modifikasi properti non-null kolom yang bukan kolom kunci partisi. |
Batasan
Evolusi skema mencakup operasi seperti menambahkan kolom dengan tipe data kompleks, menghapus kolom, mengubah urutan kolom, dan mengubah tipe data kolom. Saat Anda melakukan operasi ini, perilaku baca dan tulis tabel berubah, dan batasan berikut berlaku:
Jika pekerjaan tersebut adalah pekerjaan MapReduce 1.0, tugas Graph tidak dapat membaca atau menulis data ke tabel yang telah dimodifikasi.
Untuk pekerjaan CUPID, hanya versi Spark berikut yang dapat digunakan untuk membaca data dari tabel. Versi ini tidak dapat digunakan untuk menulis data ke tabel:
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Pekerjaan PAI dapat membaca data dari tabel tetapi tidak dapat menulis data ke dalamnya.
Untuk pekerjaan Hologres yang menggunakan versi sebelum 1.3, data tidak dapat dibaca dari atau ditulis ke tabel yang dimodifikasi jika tabel tersebut dirujuk sebagai tabel eksternal.
Jika terjadi evolusi skema, CLONE TABLE tidak didukung.
Jika terjadi evolusi skema, kesalahan akan dilaporkan saat Anda menggunakan Streaming Tunnel.
Tambahkan kolom atau komentar
Tambahkan kolom atau komentar ke tabel non-partisi atau tabel partisi yang sudah ada.
MaxCompute mendukung penambahan kolom bertipe STRUCT, seperti
struct<x: string, y: bigint>danmap<string, struct<x: double, y: double>>. Untuk mengaktifkan fitur ini, atur parameter berikut. Perhatikan batasan-nya. Perubahan parameter memerlukan waktu sekitar 10 menit untuk berlaku.setproject odps.schema.evolution.enable=true;Untuk mengatur properti tingkat proyek, Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Menetapkan peran administrator bawaan kepada pengguna.
Sintaks
ALTER TABLE <table_name> ADD columns [if NOT EXISTS] (<col_name1> <type1> comment ['<col_comment>'] [, <col_name2> <type2> comment '<col_comment>'...] );Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin menambahkan kolom. Anda tidak dapat menentukan posisi kolom baru. Secara default, kolom baru ditambahkan sebagai kolom terakhir.
col_name
Ya
Nama kolom baru.
type
Ya
Tipe data kolom baru.
col_comment
Tidak
Komentar kolom baru.
Contoh
Contoh 1: Tambahkan dua kolom ke tabel sale_detail.
ALTER TABLE sale_detail ADD columns if NOT EXISTS(customer_name STRING, education BIGINT);Contoh 2: Tambahkan dua kolom beserta komentarnya ke tabel sale_detail.
ALTER TABLE sale_detail ADD columns (customer_name STRING comment 'customer', education BIGINT comment 'education' );Contoh 3: Tambahkan kolom bertipe data kompleks ke tabel sale_detail.
ALTER TABLE sale_detail ADD columns (region struct<province:string, area:string>);Contoh 4: Tambahkan kolom ke tabel Delta Lake.
ALTER TABLE mf_tt ADD columns (val2 bigint);Contoh 5: Tambahkan kolom ID ke tabel sale_detail. Perintah mengembalikan pesan sukses, tetapi kolom tidak ditambahkan lagi jika sudah ada.
-- Perintah mengembalikan pesan sukses, tetapi kolom ID tidak ditambahkan lagi. ALTER TABLE sale_detail ADD columns if NOT EXISTS(id bigint);
Hapus kolom
Hapus satu atau beberapa kolom tertentu dari tabel non-partisi atau tabel partisi yang sudah ada.
Untuk mengaktifkan fitur ini, atur parameter berikut. Perhatikan batasan-nya. Perubahan parameter memerlukan waktu sekitar 10 menit untuk berlaku.
setproject odps.schema.evolution.enable=true;Untuk mengatur properti tingkat proyek, Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Menetapkan peran administrator bawaan kepada pengguna.
Sintaks
ALTER TABLE <table_name> DROP columns <col_name1>[, <col_name2>...];Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin menghapus kolom.
col_name
Ya
Nama kolom yang ingin Anda hapus.
Contoh: Hapus kolom dari tabel
-- 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. 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.
Untuk mengaktifkan fitur ini, atur parameter berikut. Perhatikan batasan-nya. Perubahan parameter memerlukan waktu sekitar 10 menit untuk berlaku.
setproject odps.schema.evolution.enable=true;Untuk mengatur properti tingkat proyek, Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Menetapkan peran administrator bawaan kepada pengguna.
Sintaks
ALTER TABLE <table_name> change [COLUMN] <old_column_name> <new_column_name> <new_data_type>;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang berisi kolom yang ingin Anda ubah tipe datanya.
old_column_name
Ya
Nama kolom yang ingin Anda ubah tipe datanya.
new_column_name
Ya
Nama baru kolom tersebut.
Catatanold_column_name dapat sama dengan new_column_name. Ini menunjukkan bahwa nama kolom tidak diubah. Namun, new_column_name tidak boleh sama dengan nama kolom yang sudah ada kecuali old_column_name.
new_data_type
Ya
Tipe data baru kolom tersebut.
Contoh
-- Ubah tipe data bidang id dalam tabel mf_evol_t3 dari INT menjadi BIGINT. ALTER TABLE mf_evol_t3 change id id bigint; -- Ubah tipe data bidang id dalam tabel mf_evol_t3 dari BIGINT menjadi STRING. ALTER TABLE mf_evol_t3 change COLUMN id id string;Tabel konversi tipe data
CatatanY 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.

Modifikasi urutan kolom
Modifikasi urutan kolom dalam tabel non-partisi atau tabel partisi yang sudah ada.
Untuk mengaktifkan fitur ini, atur parameter berikut. Perhatikan batasan-nya. Perubahan parameter memerlukan waktu sekitar 10 menit untuk berlaku.
setproject odps.schema.evolution.enable=true;Untuk mengatur properti tingkat proyek, Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Menetapkan peran administrator bawaan kepada pengguna.
Sintaks
ALTER TABLE <table_name> change <old_column_name> <new_column_name> <column_type> after <column_name>;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin memodifikasi urutan kolom.
old_column_name
Ya
Nama asli kolom yang ingin Anda ubah urutannya.
new_col_name
Ya
Nama baru kolom tersebut.
Catatannew_col_name dapat sama dengan old_column_name. Ini menunjukkan bahwa nama kolom tidak diubah. Namun, new_col_name tidak boleh sama dengan nama kolom yang sudah ada kecuali old_column_name.
column_type
Ya
Tipe data asli kolom tersebut. Anda tidak dapat mengubah tipe data.
column_name
Ya
Kolom setelah mana Anda ingin meletakkan kolom yang sedang dipindahkan. Kolom tersebut ditentukan oleh column_name.
Contoh
--Ubah nama kolom customer_id dalam tabel sale_detail menjadi customer dan pindahkan kolom tersebut agar berada setelah kolom total_price. ALTER TABLE sale_detail change customer_id customer string after total_price; --Pindahkan kolom customer_id dalam tabel sale_detail agar berada setelah kolom total_price tanpa mengubah nama kolom. ALTER TABLE sale_detail change customer_id customer_id string after total_price;
Modifikasi nama kolom
Modifikasi nama kolom dalam tabel non-partisi atau tabel partisi yang sudah ada.
Sintaks
ALTER TABLE <table_name> change COLUMN <old_col_name> rename TO <new_col_name>;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang berisi kolom yang ingin Anda ubah namanya.
old_col_name
Ya
Nama kolom yang ingin Anda ubah.
CatatanKolom tersebut harus ada.
new_col_name
Ya
Nama baru kolom tersebut. Nama kolom tidak boleh sama dengan nama kolom yang sudah ada.
Contoh
--Ubah nama kolom customer_name dalam tabel sale_detail menjadi customer. ALTER TABLE sale_detail change COLUMN customer_name rename TO customer;
Modifikasi komentar kolom
Modifikasi komentar kolom dalam tabel non-partisi atau tabel partisi yang sudah ada.
Sintaks
ALTER TABLE <table_name> change COLUMN <col_name> comment '<col_comment>';Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang berisi kolom yang ingin Anda ubah komentarnya.
col_name
Ya
Nama kolom yang ingin Anda ubah komentarnya.
CatatanKolom tersebut harus ada.
col_comment
Ya
Komentar baru. Komentar harus berupa string valid dengan panjang maksimal 1024 byte. Jika tidak, kesalahan akan dilaporkan.
Contoh
--Ubah komentar kolom customer dalam tabel sale_detail. ALTER TABLE sale_detail change COLUMN customer comment 'customer';
Modifikasi nama dan komentar kolom
Modifikasi nama dan komentar kolom dalam tabel non-partisi atau tabel partisi.
Sintaks
ALTER TABLE <table_name> change COLUMN <old_col_name> <new_col_name> <column_type> comment '<col_comment>';Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang berisi kolom yang ingin Anda ubah nama dan komentarnya.
old_col_name
Ya
Nama kolom yang ingin Anda ubah.
CatatanKolom tersebut harus ada.
new_col_name
Ya
Nama baru kolom tersebut. Nama kolom tidak boleh sama dengan nama kolom yang sudah ada.
column_type
Ya
Tipe data kolom tersebut.
col_comment
Opsional
Komentar baru. Komentar dapat memiliki panjang hingga 1024 byte.
Contoh
--Ubah nama kolom customer_name dalam tabel sale_detail menjadi customer_newname dan atur komentarnya menjadi 'customer'. ALTER TABLE sale_detail change COLUMN customer_name customer_newname STRING comment 'customer';
Modifikasi properti non-null kolom
Anda dapat mengubah properti non-null kolom yang bukan kolom kunci partisi. Jika kolom diatur sebagai NOT NULL, Anda dapat menjalankan perintah ini untuk mengizinkan kolom berisi nilai NULL.
Jalankan perintah desc extended table_name; untuk melihat nilai properti Nullable dan memeriksa apakah kolom dapat berisi nilai NULL. Jika Nullable bernilai true, kolom dapat berisi nilai NULL. Jika Nullable bernilai false, kolom tidak dapat berisi nilai NULL.
Batasan
Perubahan ini tidak dapat dikembalikan. Setelah Anda mengubah properti agar mengizinkan nilai NULL untuk kolom, Anda tidak dapat mengubahnya kembali menjadi NOT NULL. Lakukan dengan hati-hati.
Sintaks
ALTER TABLE <table_name> change COLUMN <old_col_name> NULL;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang berisi kolom yang ingin Anda ubah properti non-null-nya.
old_col_name
Ya
Nama kolom non-kunci partisi yang ingin Anda ubah.
CatatanKolom tersebut harus merupakan kolom non-kunci partisi yang sudah ada.
Contoh
--Buat tabel partisi di mana kolom id diatur sebagai NOT NULL. CREATE TABLE null_test(id int NOT NULL, name string) partitioned BY (ds string); --Ubah kolom id agar mengizinkan nilai NULL. ALTER TABLE null_test change COLUMN id NULL;
Referensi
Untuk informasi selengkapnya tentang perintah operasi tabel, lihat topik berikut: