MaxCompute memungkinkan Anda memodifikasi kolom pada tabel yang sudah ada, termasuk menambahkan kolom, menghapus kolom, atau mengubah tipe data kolom sesuai kebutuhan.
Commands
Perintah SQL MaxCompute untuk operasi kolom adalah sebagai berikut:
Operation | Features | Role | Platform |
Tambahkan kolom atau komentar ke tabel non-partisi atau partisi yang sudah ada. | Pengguna dengan izin Alter pada tabel | Anda dapat menjalankan perintah dalam topik ini pada platform berikut: | |
Hapus kolom dari tabel non-partisi atau partisi yang sudah ada. | |||
Ubah tipe data kolom yang sudah ada. | |||
Sesuaikan urutan kolom tertentu dalam tabel. | |||
Ubah nama kolom pada tabel non-partisi atau partisi yang sudah ada. | |||
Ubah komentar kolom pada tabel non-partisi atau partisi yang sudah ada. | |||
Ubah nama dan komentar kolom pada tabel non-partisi atau partisi yang sudah ada secara bersamaan. | |||
Ubah properti NOT NULL pada kolom bukan kunci partisi. |
Scope
Evolusi skema mencakup operasi seperti menambahkan kolom dengan tipe data kompleks, menghapus kolom, mengubah urutan kolom, dan mengubah tipe data kolom pada tabel yang sudah ada. Jika Anda mengubah urutan kolom, menambahkan kolom baru sekaligus mengubah urutannya, atau menghapus kolom, perilaku baca-tulis tabel akan berubah. Batasan berikut berlaku:
Jika jenis pekerjaan adalah MapReduce 1.0, tugas Graph tidak dapat membaca atau menulis ke tabel yang telah dimodifikasi.
Untuk pekerjaan CUPID, hanya versi Spark berikut yang dapat membaca dari tabel tersebut. Mereka tidak dapat menulis ke tabel tersebut:
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Pekerjaan PAI dapat membaca dari tabel tersebut, tetapi tidak dapat menulis ke dalamnya.
Untuk pekerjaan Hologres, jika Anda menggunakan versi Hologres yang lebih lama dari 1.3, Anda tidak dapat membaca atau menulis ke tabel yang telah dimodifikasi ketika tabel tersebut dirujuk sebagai tabel eksternal.
Jika terjadi evolusi skema, CLONE TABLE tidak didukung.
Jika terjadi evolusi skema, error akan dilaporkan saat Anda menggunakan Streaming Tunnel.
Add columns or comments
Anda dapat menambahkan kolom atau komentar ke tabel non-partisi atau partisi yang sudah ada. Perhatikan cakupan evolusi skema. MaxCompute mendukung penambahan kolom bertipe STRUCT, seperti STRUCT<x: STRING, y: BIGINT> dan MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>>.
Pengaturan parameter
Untuk mengaktifkan fitur ini, atur parameter
setproject odps.schema.evolution.enable=true;.Izin: Ini adalah parameter tingkat proyek. Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Assign built-in management roles to a user.
Periode efektif: Parameter ini berlaku sekitar 10 menit setelah diatur.
Format perintah
ALTER TABLE <table_name> ADD COLUMNS [IF NOT EXISTS] (<col_name1> <type1> COMMENT ['<col_comment>'] [, <col_name2> <type2> COMMENT '<col_comment>'...] );Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel tempat Anda ingin menambahkan kolom. Anda tidak dapat menentukan urutan kolom baru. Kolom tersebut akan ditambahkan di akhir tabel secara default.
col_name
Yes
Nama kolom baru.
type
Yes
Tipe data kolom baru.
col_comment
No
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 menjalankan pernyataan SQL untuk menambahkan kolom yang sudah ada, seperti kolom ID, ke tabel sale_detail, pesan sukses akan dikembalikan dan kolom tersebut tidak ditambahkan 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);
Delete columns
Anda dapat menghapus satu atau beberapa kolom tertentu dari tabel non-partisi atau partisi yang sudah ada. Perhatikan cakupan evolusi skema.
Pengaturan parameter
Untuk mengaktifkan fitur ini, atur parameter
setproject odps.schema.evolution.enable=true;.Izin: Ini adalah parameter tingkat proyek. Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Assign built-in management roles to a user.
Periode efektif: Parameter ini berlaku sekitar 10 menit setelah diatur.
Format perintah
-- 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: Required. Nama tabel tempat Anda ingin menghapus kolom.
col_name: Required. Nama kolom yang akan dihapus.
Contoh
-- 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 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;
Change column data types
Anda dapat mengubah tipe data kolom yang sudah ada. Perhatikan cakupan evolusi skema.
Pengaturan parameter
Untuk mengaktifkan fitur ini, atur parameter
setproject odps.schema.evolution.enable=true;.Izin: Ini adalah parameter tingkat proyek. Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Assign built-in management roles to a user.
Periode efektif: Parameter ini berlaku sekitar 10 menit setelah diatur.
Format perintah
ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>;Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel yang tipe data kolomnya ingin diubah.
old_column_name
Yes
Nama kolom yang tipe datanya ingin diubah.
new_column_name
Yes
Nama kolom setelah tipe datanya diubah.
old_column_name dapat sama dengan new_column_name, yang berarti nama kolom tidak diubah. Namun, new_column_name tidak boleh sama dengan nama kolom lain selain old_column_name.
new_data_type
Yes
Tipe 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
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.

Change the column order
Anda dapat mengubah urutan kolom dalam tabel non-partisi atau partisi yang sudah ada. Perhatikan cakupan evolusi skema.
Pengaturan parameter
Untuk mengaktifkan fitur ini, atur parameter
setproject odps.schema.evolution.enable=true;.Izin: Ini adalah parameter tingkat proyek. Anda harus menjadi Pemilik proyek atau memiliki peran Super_Administrator atau Admin tingkat proyek. Untuk informasi selengkapnya, lihat Assign built-in management roles to a user.
Periode efektif: Parameter ini berlaku sekitar 10 menit setelah diatur.
Format perintah
ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>;Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel tempat Anda ingin mengubah urutan kolom.
old_column_name
Yes
Nama asli kolom yang urutannya ingin diubah.
new_col_name
Yes
Nama baru kolom tersebut.
new_col_name dapat sama dengan old_column_name, yang berarti nama kolom tidak diubah. Namun, new_col_name tidak boleh sama dengan nama kolom lain selain old_column_name.
column_type
Yes
Tipe data asli kolom tersebut. Ini tidak dapat diubah.
column_name
Yes
Memindahkan kolom yang akan diurutkan ulang setelah column_name.
Contoh
-- Ubah nama kolom customer di 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 di tabel sale_detail setelah kolom total_price tanpa mengubah nama kolom. ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;
Change a column name
Anda dapat mengubah nama kolom pada tabel non-partisi atau partisi yang sudah ada.
Format perintah
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>;Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel yang nama kolomnya ingin diubah.
old_col_name
Yes
Nama kolom yang akan diganti namanya. Kolom tersebut harus ada.
new_col_name
Yes
Nama baru untuk kolom tersebut. Nama kolom harus unik.
Contoh
-- Ganti nama kolom customer_name di tabel sale_detail menjadi customer. ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;
Change a column comment
Anda dapat mengubah komentar kolom pada tabel non-partisi atau partisi yang sudah ada.
Sintaks
ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>';Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel yang komentar kolomnya ingin diubah.
col_name
Yes
Nama kolom yang komentarnya ingin diubah. Kolom tersebut harus ada.
col_comment
Yes
Komentar baru. Komentar harus berupa string valid dengan panjang maksimal 1024 byte. Jika tidak, error akan dilaporkan.
Contoh
-- Ubah komentar kolom customer di tabel sale_detail0113. ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';
Change a column name and comment
Anda dapat mengubah nama dan komentar kolom pada tabel non-partisi atau partisi.
Format perintah
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>';Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel yang nama dan komentar kolomnya ingin diubah.
old_col_name
Yes
Nama kolom yang akan dimodifikasi. Kolom tersebut harus ada.
new_col_name
Yes
Nama baru untuk kolom tersebut. Nama kolom harus unik.
column_type
Yes
Tipe data kolom tersebut.
col_comment
Optional
Komentar baru. Isinya dapat mencapai panjang 1024 byte.
Contoh
-- Ubah nama kolom customer di tabel sale_detail menjadi customer_newname dan ubah komentarnya menjadi 'customer'. ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';
Change the NOT NULL property of a column
Anda dapat mengubah properti NOT NULL pada kolom bukan kunci partisi dalam tabel agar mengizinkan nilai NULL.
Setelah Anda mengizinkan nilai NULL untuk suatu kolom, Anda tidak dapat mengembalikan perubahan ini untuk melarang nilai NULL. Lakukan dengan hati-hati.
Anda dapat menjalankan perintah
DESC EXTENDED table_name;untuk melihat nilai propertiNullabledan menentukan apakah kolom tersebut mengizinkan nilai NULL:Jika
Nullablebernilaitrue, nilai NULL diizinkan.Jika
Nullablebernilaifalse, nilai NULL tidak diizinkan.
Format perintah
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;Parameter
Parameter
Required
Description
table_name
Yes
Nama tabel yang properti NOT NULL kolomnya ingin diubah.
old_col_name
Yes
Nama kolom bukan kunci partisi yang akan dimodifikasi. Kolom tersebut harus merupakan kolom bukan kunci partisi yang sudah 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 | | +------------------------------------------------------------------------------------+
References
Untuk informasi selengkapnya tentang perintah operasi tabel, lihat: