MaxCompute memungkinkan Anda memodifikasi kolom dalam tabel yang sudah ada, termasuk menambahkan atau menghapus kolom serta mengubah tipe datanya untuk memenuhi kebutuhan bisnis.
Perintah
Tabel berikut menjelaskan perintah SQL MaxCompute untuk operasi kolom.
Aksi | Deskripsi | Role | Platform |
Menambahkan kolom atau komentar ke tabel non-partisi atau tabel partisi yang sudah ada. | Pengguna dengan izin Alter pada tabel | Anda dapat menjalankan perintah ini di platform berikut: | |
Menghapus kolom dari tabel non-partisi atau tabel partisi yang sudah ada. | |||
Mengubah tipe data kolom yang sudah ada. | |||
Menyesuaikan urutan kolom tertentu dalam tabel. | |||
Mengubah nama kolom dalam tabel non-partisi atau tabel partisi yang sudah ada. | |||
Mengubah komentar kolom dalam tabel non-partisi atau tabel partisi yang sudah ada. | |||
Mengubah nama dan komentar kolom dalam tabel non-partisi atau tabel partisi yang sudah ada secara bersamaan. | |||
Mengubah properti NOT NULL kolom yang bukan kunci partisi. |
Catatan penggunaan
Evolusi skema mencakup operasi seperti menambahkan kolom dengan tipe data kompleks, menghapus kolom, mengatur ulang kolom, dan mengubah tipe data kolom. Saat Anda mengatur ulang kolom, menambah lalu mengatur ulang kolom, atau menghapus kolom, perilaku baca-tulis tabel akan terpengaruh, dan batasan berikut berlaku:
Jika jenis job adalah MapReduce 1.0, tugas Graph tidak dapat membaca atau menulis data ke tabel yang telah dimodifikasi.
Untuk job CUPID, hanya versi Spark berikut yang dapat membaca data dari tabel tersebut; penulisan data ke tabel tersebut tidak didukung:
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Job PAI dapat membaca data dari tabel, tetapi tidak dapat menulis data ke tabel tersebut.
Untuk job Hologres, jika Anda menggunakan versi Hologres sebelum 1.3, Anda tidak dapat membaca atau menulis ke tabel yang telah dimodifikasi saat mereferensikannya sebagai tabel eksternal.
Setelah evolusi skema, CLONE TABLE tidak didukung.
Streaming Tunnel melaporkan error jika evolusi skema telah terjadi.
Tambahkan kolom atau komentar
Anda dapat menambahkan kolom atau komentar ke tabel non-partisi atau tabel partisi yang sudah ada. Untuk informasi lebih lanjut mengenai batasan, lihat Catatan penggunaan. MaxCompute mendukung penambahan kolom bertipe STRUCT, seperti STRUCT<x: STRING, y: BIGINT> dan MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>>.
Prasyarat
Jalankan perintah
setproject odps.schema.evolution.enable=true;untuk mengaktifkan evolusi skema.Izin: Ini adalah properti tingkat proyek. Untuk menjalankan perintah ini, Anda harus menjadi pemilik proyek atau memiliki role Super_Administrator atau Admin tingkat proyek. Untuk informasi lebih lanjut, lihat Tetapkan role manajemen bawaan kepada pengguna.
Waktu efektif: Perubahan berlaku dalam waktu sekitar 10 menit.
Sintaksis
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 yang akan dimodifikasi. Kolom baru ditambahkan di akhir tabel.
col_name
Ya
Nama kolom baru.
type
Ya
Tipe data kolom baru.
col_comment
Tidak
Komentar untuk 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 dengan komentar 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_info struct<province:string, area:string>);Contoh 4: Jika Anda menggunakan IF NOT EXISTS untuk menambahkan kolom yang sudah ada, perintah akan mengembalikan pesan sukses tanpa menambahkan kolom tersebut lagi.
-- Pernyataan berhasil, tetapi kolom ID tidak ditambahkan berulang. ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint);Contoh 5: 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
Anda dapat menghapus satu atau beberapa kolom dari tabel non-partisi atau tabel partisi yang sudah ada. Untuk informasi lebih lanjut mengenai batasan, lihat Catatan penggunaan.
Prasyarat
Jalankan perintah
setproject odps.schema.evolution.enable=true;untuk mengaktifkan evolusi skema.Izin: Ini adalah properti tingkat proyek. Untuk menjalankan perintah ini, Anda harus menjadi pemilik proyek atau memiliki role Super_Administrator atau Admin tingkat proyek. Untuk informasi lebih lanjut, lihat Tetapkan role manajemen bawaan kepada pengguna.
Waktu efektif: Perubahan berlaku dalam waktu sekitar 10 menit.
Sintaksis
-- 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
table_name: Wajib. Nama tabel yang akan dimodifikasi.
col_name: Wajib. Nama kolom yang akan dihapus.
Contoh
-- Contoh 1: Hapus kolom customer_id dari tabel sale_detail. ALTER TABLE sale_detail DROP COLUMNS customer_id; -- Contoh 2: Hapus kolom shop_name dan total_price dari tabel sale_detail. ALTER TABLE sale_detail DROP COLUMNS shop_name, total_price;
Ubah tipe data kolom
Anda dapat mengubah tipe data kolom yang sudah ada. Untuk informasi lebih lanjut mengenai batasan, lihat Catatan penggunaan.
Prasyarat
Jalankan perintah
setproject odps.schema.evolution.enable=true;untuk mengaktifkan evolusi skema.Izin: Ini adalah properti tingkat proyek. Untuk menjalankan perintah ini, Anda harus menjadi pemilik proyek atau memiliki role Super_Administrator atau Admin tingkat proyek. Untuk informasi lebih lanjut, lihat Tetapkan role manajemen bawaan kepada pengguna.
Waktu efektif: Perubahan berlaku dalam waktu sekitar 10 menit.
Sintaksis
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 tersebut.
old_column_name
Ya
Nama kolom yang akan dimodifikasi.
new_column_name
Ya
Nama baru kolom tersebut.
old_column_name dapat sama dengan new_column_name, yang menunjukkan bahwa nama kolom tidak diubah. Namun, new_column_name tidak boleh sama dengan nama kolom lain selain old_column_name.
new_data_type
Ya
Tipe data baru untuk kolom tersebut.
Contoh
-- Ubah tipe data bidang id dalam tabel sale_detail dari BIGINT menjadi STRING. ALTER TABLE sale_detail CHANGE COLUMN id id STRING;Konversi tipe data yang didukung
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.

Ubah urutan kolom
Anda dapat mengubah urutan kolom dalam tabel non-partisi atau tabel partisi yang sudah ada. Untuk informasi lebih lanjut mengenai batasan, lihat Catatan penggunaan.
Prasyarat
Jalankan perintah
setproject odps.schema.evolution.enable=true;untuk mengaktifkan evolusi skema.Izin: Ini adalah properti tingkat proyek. Untuk menjalankan perintah ini, Anda harus menjadi pemilik proyek atau memiliki role Super_Administrator atau Admin tingkat proyek. Untuk informasi lebih lanjut, lihat Tetapkan role manajemen bawaan kepada pengguna.
Waktu efektif: Perubahan berlaku dalam waktu sekitar 10 menit.
Sintaksis
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 yang akan dimodifikasi.
old_column_name
Ya
Nama kolom yang akan dipindahkan.
new_col_name
Ya
Nama baru kolom tersebut.
new_col_name dapat sama dengan old_column_name, yang menunjukkan bahwa nama kolom tidak diubah. Namun, new_col_name tidak boleh sama dengan nama kolom lain selain old_column_name.
column_type
Ya
Tipe data asli kolom tersebut. Ini tidak dapat diubah.
column_name
Ya
Memindahkan kolom yang akan diatur ulang setelah column_name.
Contoh
-- Ubah nama kolom customer dalam tabel sale_detail 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 dalam tabel sale_detail setelah kolom total_price tanpa mengubah nama kolom. ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;
Ubah nama kolom
Anda dapat mengubah nama kolom dalam tabel non-partisi atau tabel partisi yang sudah ada.
Sintaksis
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang akan dimodifikasi.
old_col_name
Ya
Nama saat ini dari kolom tersebut. Kolom tersebut harus ada.
new_col_name
Ya
Nama baru untuk kolom tersebut. Nama kolom harus unik dalam tabel.
Contoh
-- Ubah nama kolom customer_name dalam tabel sale_detail menjadi customer. ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;
Ubah komentar kolom
Anda dapat mengubah komentar kolom dalam tabel non-partisi atau tabel partisi yang sudah ada.
Sintaksis
ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>';Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang akan dimodifikasi.
col_name
Ya
Nama kolom yang komentarnya ingin diubah. Kolom tersebut harus ada.
col_comment
Ya
Komentar baru, yang harus berupa string valid. Panjang maksimum adalah 1.024 byte.
Contoh
-- Ubah komentar kolom customer dalam tabel sale_detail0113. ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';
Ubah nama dan komentar kolom
Anda dapat mengubah nama dan komentar kolom dalam tabel non-partisi atau tabel partisi.
Sintaksis
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 akan dimodifikasi.
old_col_name
Ya
Nama saat ini dari kolom yang akan dimodifikasi. Kolom tersebut harus ada.
new_col_name
Ya
Nama baru untuk kolom tersebut. Nama kolom harus unik dalam tabel.
column_type
Ya
Tipe data kolom tersebut.
col_comment
Opsional
Komentar baru. Panjang maksimum adalah 1.024 byte.
Contoh
-- Ubah nama kolom customer dalam tabel sale_detail menjadi customer_newname dan ubah komentarnya menjadi 'customer'. ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';
Ubah properti NOT NULL kolom
Anda dapat mengubah properti NOT NULL kolom yang bukan kunci partisi. Misalnya, jika kolom non-kunci partisi didefinisikan agar tidak menerima nilai NULL, Anda dapat menggunakan perintah ini untuk mengubahnya agar menerima nilai NULL.
Operasi ini tidak dapat dibalik: Anda tidak dapat mengubah kembali kolom agar tidak menerima nilai NULL setelah mengizinkannya.
Jalankan perintah
DESC EXTENDED table_name;untuk melihat propertiNullabledan menentukan apakah kolom tersebut menerima nilai NULL:Jika
Nullablebernilaitrue, nilai NULL diizinkan.Jika
Nullablebernilaifalse, nilai NULL tidak diizinkan.
Sintaksis
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel yang akan dimodifikasi.
old_col_name
Ya
Nama kolom non-kunci partisi yang akan dimodifikasi. Kolom tersebut harus ada.
Contoh
-- 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 | | +------------------------------------------------------------------------------------+
Referensi
Untuk informasi lebih lanjut mengenai operasi tabel, lihat topik berikut: