Memodifikasi sebuah tabel.
Cakupan
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. Perubahan urutan kolom, penambahan kolom baru bersamaan dengan perubahan urutan kolom, atau penghapusan kolom akan mengubah perilaku baca-tulis tabel. Batasan berikut berlaku:
Jika jenis pekerjaan adalah MapReduce 1.0, tugas Graph tidak dapat membaca dari atau menulis ke tabel yang telah dimodifikasi.
Untuk pekerjaan CUPID, hanya versi Spark berikut yang dapat membaca dari tabel tersebut, tetapi tidak dapat menulis ke dalamnya:
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 dari atau menulis ke tabel yang telah dimodifikasi ketika tabel tersebut dirujuk sebagai foreign table.
Jika terjadi evolusi skema, CLONE TABLE tidak didukung.
Jika terjadi evolusi skema, kesalahan dilaporkan saat Anda menggunakan Streaming Tunnel.
Mengubah pemilik tabel
Mengubah pemilik suatu tabel.
Sintaks
ALTER TABLE <table_name> changeowner TO <new_owner>;Parameter
table_name: Wajib. Nama tabel yang ingin Anda ubah pemiliknya.
new_owner: Wajib. Akun pemilik baru.
Contoh
-- Ubah pemilik tabel test1 menjadi ALIYUN$xxx@aliyun.com. ALTER TABLE test1 changeowner TO 'ALIYUN$xxx@aliyun.com';
Mengubah komentar tabel
Mengubah komentar suatu tabel.
Sintaks
ALTER TABLE <table_name> SET COMMENT '<new_comment>';Parameter
table_name: Wajib. Nama tabel yang ingin Anda ubah komentarnya.
new_comment: Wajib. Komentar baru.
Contoh
ALTER TABLE sale_detail SET COMMENT 'new comments for table sale_detail';Anda dapat menjalankan perintah MaxCompute
DESC <table_name>untuk melihatCOMMENTyang telah diperbarui pada tabel tersebut.
Mengubah waktu modifikasi terakhir tabel
Operasi touch pada MaxCompute SQL mengubah LastModifiedTime tabel menjadi waktu saat ini. Operasi ini menyebabkan MaxCompute memperlakukan data tabel sebagai telah diubah, sehingga perhitungan siklus hidup dimulai ulang.
Sintaks
ALTER TABLE <table_name> touch;Parameter
table_name: Wajib. Nama tabel yang ingin Anda ubah waktu modifikasi terakhirnya.
Contoh
ALTER TABLE sale_detail touch;
Mengubah properti pengelompokan tabel
Untuk tabel partisi, Anda dapat menggunakan pernyataan ALTER TABLE di MaxCompute untuk menambahkan atau menghapus properti pengelompokan.
Sintaks
Sintaks berikut digunakan untuk menambahkan properti hash clustering ke tabel:
ALTER TABLE <table_name> [clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets];Sintaks berikut digunakan untuk menghapus properti hash clustering tabel:
ALTER TABLE <table_name> NOT clustered;Untuk menambahkan properti range clustering, jumlah bucket tidak wajib dan dapat dihilangkan. Dalam hal ini, sistem secara otomatis menentukan jumlah bucket optimal berdasarkan volume data. Sintaksnya sebagai berikut:
ALTER TABLE <table_name> [RANGE clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets];Sintaks berikut digunakan untuk menghapus properti range clustering tabel atau partisi:
ALTER TABLE <table_name> NOT clustered; ALTER TABLE <table_name> PARTITION [<pt_spec>] NOT clustered;CatatanMengubah properti pengelompokan dengan
ALTER TABLEhanya berlaku untuk tabel partisi. Untuk tabel non-partisi, properti pengelompokan tidak dapat diubah setelah dibuat. PernyataanALTER TABLEberlaku untuk tabel yang sudah ada. Setelah Anda menambahkan properti pengelompokan baru, partisi baru akan disimpan berdasarkan properti tersebut.Pernyataan
ALTER TABLEhanya memengaruhi partisi baru pada tabel partisi, termasuk yang dihasilkan olehINSERT OVERWRITE. Partisi baru disimpan berdasarkan properti pengelompokan baru, sedangkan properti pengelompokan dan penyimpanan partisi data lama tetap tidak berubah. Artinya, untuk tabel yang sebelumnya telah memiliki properti pengelompokan, Anda dapat menonaktifkannya, menambahkan pengaturan pengelompokan baru, lalu menentukan kolom kunci partisi, kolom kunci pengurutan, dan jumlah bucket yang berbeda untuk partisi baru.Karena
ALTER TABLEhanya memengaruhi partisi baru, Anda tidak dapat menentukan partisi tertentu dalam pernyataan ini.
Parameter
Parameter-parameter tersebut sama dengan yang ada di CREATE TABLE.
Contoh
-- Buat tabel partisi. CREATE TABLE IF NOT EXISTS sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned BY (sale_date STRING, region STRING); -- Ubah properti pengelompokan tabel. ALTER TABLE sale_detail clustered BY (customer_id) sorted BY (customer_id) INTO 10 buckets;Untuk informasi selengkapnya tentang properti pengelompokan, lihat Hash Clustering dan Range Clustering.
Mengubah properti Tabel Delta PK
Sintaks
-- Perbarui jumlah bucket untuk Tabel Delta PK partisi. ALTER TABLE <table_name> SET tblproperties("write.bucket.num"="64"); -- Perbarui jumlah bucket untuk Tabel Delta PK non-partisi. Setelah pembaruan, data yang ada didistribusikan ulang berdasarkan jumlah bucket baru. ALTER TABLE <table_name> REWRITE tblproperties("write.bucket.num"="128"); -- Perbarui properti retain, yang menentukan rentang waktu (dalam jam) untuk kueri status data historis menggunakan TimeTravel. ALTER TABLE <table_name> SET tblproperties("acid.data.retain.hours"="60");
Mengganti nama tabel
Mengganti nama tabel. Operasi ini hanya mengubah nama tabel dan tidak memodifikasi data di dalam tabel.
Sintaks
ALTER TABLE <table_name> RENAME TO <new_table_name>;Parameter
table_name: Wajib. Tabel yang ingin Anda ganti namanya.
new_table_name: Wajib. Nama baru tabel. Jika tabel dengan nama yang sama seperti new_table_name sudah ada, kesalahan akan dikembalikan.
Contoh
ALTER TABLE sale_detail RENAME TO sale_detail_rename;
Mengubah siklus hidup tabel
Mengubah siklus hidup tabel partisi atau non-partisi yang sudah ada.
Sintaks
ALTER TABLE <table_name> SET LIFECYCLE <days>;Parameter
table_name: Wajib. Nama tabel yang ingin Anda ubah siklus hidupnya.
days: Wajib. Periode siklus hidup baru. Nilai ini harus berupa bilangan bulat positif. Satuannya adalah hari.
Contoh
-- Ubah siklus hidup tabel sale_detail_rename menjadi 50 hari. ALTER TABLE sale_detail_rename SET LIFECYCLE 50;
Menonaktifkan atau mengaktifkan siklus hidup
Menonaktifkan atau mengaktifkan fitur siklus hidup untuk tabel atau partisi tertentu.
Sintaks
ALTER TABLE <table_name> PARTITION [<pt_spec>] {enable|disable} LIFECYCLE;Parameter
table_name: Wajib. Nama tabel yang ingin Anda nonaktifkan atau aktifkan fitur siklus hidupnya.
pt_spec: Opsional. Partisi tabel yang ingin Anda nonaktifkan atau aktifkan fitur siklus hidupnya. Formatnya adalah
partition_col1=col1_value1, partition_col2=col2_value1.... Untuk tabel partisi multi-level, Anda harus menentukan semua nilai partisi.enable: Mengaktifkan fitur siklus hidup untuk tabel atau partisi tertentu.
Pemulihan berdasarkan siklus hidup diterapkan kembali ke tabel dan partisinya. Secara default, konfigurasi siklus hidup saat ini digunakan.
Sebelum mengaktifkan siklus hidup tabel, Anda dapat memodifikasi konfigurasi siklus hidup tabel dan partisi untuk mencegah penghapusan data secara tidak sengaja akibat konfigurasi sebelumnya.
disable: Menonaktifkan fitur siklus hidup untuk tabel atau partisi tertentu.
Mencegah tabel dan semua partisinya dipulihkan oleh siklus hidup. Ini memiliki prioritas lebih tinggi daripada mengaktifkan siklus hidup untuk partisi. Misalnya, jika Anda menjalankan
table disable LIFECYCLE, pengaturanpt_spec enable LIFECYCLEtidak berlaku.Setelah Anda menonaktifkan fitur siklus hidup untuk tabel, konfigurasi siklus hidup tabel dan flag enable serta disable partisinya tetap dipertahankan.
Setelah Anda menonaktifkan fitur siklus hidup untuk tabel, Anda masih dapat memodifikasi konfigurasi siklus hidup tabel dan partisinya.
Contoh
Contoh 1: Nonaktifkan fitur siklus hidup untuk tabel `sale_detail_rename`.
ALTER TABLE sale_detail_rename disable LIFECYCLE;Contoh 2: Nonaktifkan fitur siklus hidup untuk partisi dengan waktu '201912' pada tabel `sale_detail_rename`.
-- Masukkan data uji. ALTER TABLE sale_detail_rename ADD IF NOT EXISTS PARTITION (sale_date= '201910',region = 'shanghai') PARTITION (sale_date= '201911',region = 'shanghai') PARTITION (sale_date= '201912',region = 'shanghai') PARTITION (sale_date= '202001',region = 'shanghai') PARTITION (sale_date= '202002',region = 'shanghai') PARTITION (sale_date= '201910',region = 'beijing') PARTITION (sale_date= '201911',region = 'beijing') PARTITION (sale_date= '201912',region = 'beijing') PARTITION (sale_date= '202001',region = 'beijing') PARTITION (sale_date= '202002',region = 'beijing'); ALTER TABLE sale_detail_rename PARTITION (sale_date= '201912',region='shanghai') disable LIFECYCLE;
Menambahkan partisi
Menambahkan partisi ke tabel partisi yang sudah ada.
Batasan
Untuk menambahkan nilai kolom kunci partisi ke tabel yang memiliki partisi multi-level, Anda harus menentukan semua partisi tersebut.
Operasi ini hanya dapat menambahkan nilai kolom kunci partisi. Nama kolom kunci partisi tidak dapat ditambahkan.
Sintaks
ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...];Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel partisi tempat Anda ingin menambahkan partisi.
IF NOT EXISTS
Tidak
Jika Anda tidak menentukan IF NOT EXISTS dan partisi dengan nama yang sama sudah ada, operasi ini gagal dan kesalahan dikembalikan.
pt_spec
Ya
Partisi yang ingin Anda tambahkan. Nilai parameter ini dalam format
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi. partition_col_value menunjukkan nilai kolom kunci partisi. Nama kolom kunci partisi tidak peka huruf besar/kecil, tetapi nilainya peka huruf besar/kecil.Contoh
Tabel sale_detail digunakan dalam bagian ini. Untuk informasi tentang pernyataan CREATE TABLE tabel ini, lihat Buat tabel bernama sale_detail.
Contoh 1: Tambahkan partisi ke tabel sale_detail. Partisi tersebut menyimpan catatan penjualan di wilayah Tiongkok (Hangzhou) pada Desember 2013.
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='201312', region='hangzhou');Contoh 2: Tambahkan dua partisi ke tabel sale_detail. Partisi tersebut menyimpan catatan penjualan di wilayah Tiongkok (Beijing) dan Tiongkok (Shanghai) pada Desember 2013.
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='201312', region='beijing') PARTITION (sale_date='201312', region='shanghai');Contoh 3: Tambahkan partisi ke tabel sale_detail dan tentukan hanya kolom kunci partisi sale_date untuk partisi tersebut. Kesalahan dikembalikan karena Anda harus menentukan kedua kolom kunci partisi sale_date dan region.
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='20111011');Contoh 4: Tambahkan partisi ke tabel Delta.
-- Buat tabel Delta. CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL) PARTITIONED BY (dd STRING, hh STRING) TBLPROPERTIES ("transactional"="true"); -- Tambahkan partisi ke tabel. ALTER TABLE mf_tt ADD PARTITION (dd='01', hh='01');Contoh 5: Ubah properti tabel Delta.
-- Ubah properti write.bucket.num tabel Delta. Anda hanya dapat mengubah properti tabel Delta partisi. Anda tidak dapat mengubah properti tabel Delta non-partisi. ALTER TABLE mf_tt3 SET tblproperties("write.bucket.num"="64"); -- Ubah properti acid.data.retain.hours tabel Delta. ALTER TABLE mf_tt3 SET tblproperties("acid.data.retain.hours"="60");
Mengubah nilai LastModifiedTime untuk partisi
Mengubah nilai LastDataModifiedTime untuk partisi dalam tabel partisi dengan menjalankan pernyataan TOUCH yang disediakan oleh MaxCompute SQL. Pernyataan ini mengubah nilai LastModifiedTime menjadi waktu saat ini. Dalam kasus ini, MaxCompute menganggap bahwa data telah diperbarui, dan siklus hidup baru partisi dimulai dari waktu yang ditentukan oleh LastModifiedTime.
Batasan
Jika tabel berisi partisi multi-level, Anda harus menentukan semua level partisi saat mengubah nilai LastModifiedTime untuk partisi tersebut.
Sintaks
ALTER TABLE <table_name> touch PARTITION (<pt_spec>);Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel partisi yang ingin Anda ubah nilai LastModifiedTime-nya. Jika tabel tidak ada, kesalahan dikembalikan.
pt_spec
Ya
Partisi yang ingin Anda ubah nilai LastModifiedTime-nya. Format:
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi. partition_col_value menunjukkan nilai kolom kunci partisi. Jika nama kolom atau nilai kolom yang ditentukan tidak ada, kesalahan dikembalikan.Contoh
-- Ubah nilai LastModifiedTime untuk partisi dengan nilai kolom sale_date 201312 dan nilai kolom region shanghai pada tabel sale_detail. ALTER TABLE sale_detail touch PARTITION (sale_date='201312', region='shanghai');
Mengubah nilai dalam kolom kunci partisi
Mengubah nilai dalam kolom kunci partisi. MaxCompute SQL memungkinkan Anda menjalankan pernyataan RENAME untuk mengubah nilai dalam kolom kunci partisi.
Batasan
Pernyataan RENAME dapat mengubah nilai dalam kolom kunci partisi tetapi tidak dapat mengubah nama kolom tersebut.
Jika tabel berisi partisi multi-level, Anda harus menentukan semua level partisi saat mengubah nilai LastModifiedTime untuk partisi tersebut.
Sintaks
ALTER TABLE <table_name> PARTITION (<pt_spec>) rename TO PARTITION (<new_pt_spec>);Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin mengubah nilai dalam kolom kunci partisi.
pt_spec
Ya
Partisi tempat Anda ingin mengubah nilai kolom kunci partisi. Format:
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi. partition_col_value menunjukkan nilai kolom kunci partisi. Jika nama kolom atau nilai kolom yang ditentukan tidak ada, kesalahan dikembalikan.new_pt_spec
Ya
Informasi partisi baru. Format:
(partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi. new_partition_col_value menunjukkan nilai baru kolom kunci partisi.Contoh
-- Ubah nilai kolom kunci partisi tabel sale_detail. ALTER TABLE sale_detail PARTITION (sale_date = '201312', region = 'hangzhou') rename TO PARTITION (sale_date = '201310', region = 'beijing');
Menggabungkan partisi
Menggabungkan beberapa partisi tabel partisi menjadi satu partisi. MaxCompute SQL memungkinkan Anda menjalankan pernyataan MERGE PARTITION untuk menggabungkan beberapa partisi tabel menjadi satu partisi. Operasi ini menghapus informasi dimensi partisi yang digabungkan dan memindahkan data partisi ke partisi yang ditentukan.
Batasan
Partisi tabel eksternal tidak dapat digabungkan. Setelah partisi tabel terkluster digabungkan menjadi satu partisi, partisi tersebut tidak memiliki atribut pengelompokan.
Anda dapat menggabungkan maksimal 4.000 partisi sekaligus.
Sintaks
ALTER TABLE <table_name> MERGE [IF EXISTS] PARTITION (<predicate>) [, PARTITION(<predicate2>) ...] overwrite PARTITION (<fullpartitionSpec>) [purge];Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel partisi yang partisinya ingin Anda gabungkan.
IF EXISTS
Tidak
Jika Anda tidak menentukan IF EXISTS dan partisi yang ditentukan tidak ada, operasi ini gagal dan kesalahan dikembalikan. Jika IF EXISTS ditentukan tetapi tidak ada partisi yang memenuhi kondisi
merge, partisi baru tidak dapat dihasilkan setelah penggabungan. Jika data sumber dimodifikasi oleh operasi sepertiinsert,rename, ataudropselama proses penggabungan, kesalahan dikembalikan meskipun IF EXISTS ditentukan.predicate
Ya
Kondisi yang digunakan untuk mencocokkan partisi yang ingin Anda gabungkan.
fullpartitionSpec
Ya
Partisi yang dihasilkan setelah penggabungan.
purge
Tidak
Kata kunci opsional. Jika Anda mengonfigurasi parameter ini, direktori sesi akan dihapus. Secara default, log yang dihasilkan dalam tiga hari terakhir dihapus. Untuk informasi selengkapnya, lihat Purge.
Contoh
Contoh 1: Gabungkan partisi yang memenuhi kondisi tertentu ke partisi tujuan.
-- Lihat partisi dalam tabel partisi. SHOW partitions intpstringstringstring; ds=20181101/hh=00/mm=00 ds=20181101/hh=00/mm=10 ds=20181101/hh=10/mm=00 ds=20181101/hh=10/mm=10 -- Gabungkan semua partisi yang memenuhi kondisi hh='00' ke partisi ds='20181101', hh='00', mm='00'. ALTER TABLE intpstringstringstring MERGE PARTITION(hh='00') overwrite PARTITION(ds='20181101', hh='00', mm='00'); -- Lihat partisi yang dihasilkan setelah penggabungan. SHOW partitions intpstringstringstring; ds=20181101/hh=00/mm=00 ds=20181101/hh=10/mm=00 ds=20181101/hh=10/mm=10Contoh 2: Gabungkan partisi tertentu menjadi satu partisi.
-- Gabungkan partisi tertentu menjadi satu partisi. ALTER TABLE intpstringstringstring MERGE IF EXISTS PARTITION(ds='20181101', hh='00', mm='00'), PARTITION(ds='20181101', hh='10', mm='00'), partition(ds='20181101', hh='10', mm='10') overwrite partition(ds='20181101', hh='00', mm='00') purge; -- Lihat partisi dalam tabel partisi. SHOW partitions intpstringstringstring; ds=20181101/hh=00/mm=00
Menghapus partisi
Menghapus partisi dari tabel partisi yang sudah ada.
MaxCompute memungkinkan Anda menghapus partisi berdasarkan kondisi filter tertentu. Jika Anda ingin menghapus beberapa partisi yang memenuhi kondisi filter tertentu sekaligus, Anda dapat menggunakan ekspresi untuk menentukan kondisi filter, menggunakan kondisi filter tersebut untuk mencocokkan partisi, dan menghapus partisi tersebut sekaligus.
Batasan
Anda hanya dapat menentukan informasi satu kolom kunci partisi dalam klausa PARTITION (<partition_filtercondition>).
Jika Anda menggunakan ekspresi untuk menentukan PARTITION (<partition_filtercondition>), hanya fungsi skalar bawaan yang dapat digunakan dalam ekspresi tersebut.
Peringatan
Setelah Anda menghapus partisi, volume data yang disimpan dalam proyek MaxCompute berkurang.
Anda dapat menentukan siklus hidup untuk tabel partisi. Dengan demikian, MaxCompute secara otomatis memulihkan partisi yang datanya tidak diperbarui dalam waktu yang ditentukan oleh siklus hidup. Untuk informasi selengkapnya tentang siklus hidup, lihat Siklus hidup.
Sintaks
Kondisi filter tidak ditentukan.
-- Hapus satu partisi sekaligus. ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>; -- Hapus beberapa partisi sekaligus. ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>,PARTITION <pt_spec>[,PARTITION <pt_spec>....];Kondisi filter ditentukan.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <partition_filtercondition>;
Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel partisi tempat Anda ingin menghapus partisi.
IF EXISTS
Tidak
Jika Anda tidak menentukan opsi if exists dan partisi yang ditentukan tidak ada, kesalahan dikembalikan.
pt_spec
Ya
Partisi yang ingin Anda hapus. Format:
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi. partition_col_value menunjukkan nilai kolom kunci partisi. Nama kolom kunci partisi tidak peka huruf besar/kecil, tetapi nilainya peka huruf besar/kecil.partition_filtercondition
Tidak
Kondisi filter. Parameter ini wajib saat Anda menentukan kondisi filter. Tidak peka huruf besar/kecil. Format:
partition_filtercondition : PARTITION (<partition_col> <relational_operators> <partition_col_value>) | PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>) | PARTITION (<partition_filtercondition1> AND|OR <partition_filtercondition2>) | PARTITION (NOT <partition_filtercondition>) | PARTITION (<partition_filtercondition1>)[,PARTITION (<partition_filtercondition2>), ...]Parameter:
partition_col: nama kolom kunci partisi.
relational_operators: operator relasional. Untuk informasi selengkapnya, lihat Operator.
partition_col_value: Nilai perbandingan atau ekspresi reguler. Tipe data nilai ini harus sama dengan tipe data kolom kunci partisi.
scalar(): fungsi skalar. Fungsi skalar menghasilkan skalar berdasarkan nilai input, memproses nilai dalam kolom yang ditentukan oleh partition_col, dan menggunakan operator relasional yang ditentukan oleh relational_operators untuk membandingkan nilai yang diproses dengan nilai yang ditentukan oleh partition_col_value.
Kondisi filter mendukung operator logika NOT, AND, dan OR. Anda dapat menggunakan PARTITION (NOT <partition_filtercondition>) untuk mendapatkan himpunan komplemen dari kondisi filter yang Anda tentukan. Anda dapat menggunakan PARTITION (<partition_filtercondition1> AND|OR <partition_filtercondition2>) untuk mendapatkan kondisi yang digunakan untuk mencocokkan partisi.
Beberapa klausa PARTITION (<partition_filtercondition>) didukung. Jika klausa-klausa ini dipisahkan dengan koma (,), hubungan logika antar klausa adalah OR. Kondisi filter diperoleh berdasarkan hubungan logika OR dan digunakan untuk mencocokkan partisi.
Contoh
Kondisi filter tidak ditentukan.
-- Hapus partisi dari tabel sale_detail. Partisi tersebut menyimpan catatan penjualan di wilayah Tiongkok (Hangzhou) pada Desember 2013. ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='201312',region='hangzhou'); -- Hapus dua partisi dari tabel sale_detail. Partisi tersebut menyimpan catatan penjualan di wilayah Tiongkok (Hangzhou) dan Tiongkok (Shanghai) pada Desember 2013. ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='201312',region='hangzhou'),PARTITION(sale_date='201312',region='shanghai');Kondisi filter ditentukan.
-- Buat tabel partisi. CREATE TABLE IF NOT EXISTS sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned BY (sale_date STRING); -- Tambahkan partisi ke tabel. ALTER TABLE sale_detail ADD if NOT EXISTS PARTITION (sale_date= '201910') PARTITION (sale_date= '201911') PARTITION (sale_date= '201912') PARTITION (sale_date= '202001') PARTITION (sale_date= '202002') PARTITION (sale_date= '202003') PARTITION (sale_date= '202004') PARTITION (sale_date= '202005') PARTITION (sale_date= '202006') PARTITION (sale_date= '202007'); -- Hapus beberapa partisi dari tabel sekaligus. ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date < '201911'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date >= '202007'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date LIKE '20191%'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date IN ('202002','202004','202006')); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date BETWEEN '202001' AND '202007'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(substr(sale_date, 1, 4) = '2020'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date < '201912' OR sale_date >= '202006'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date > '201912' AND sale_date <= '202004'); ALTER TABLE sale_detail DROP IF EXISTS PARTITION(NOT sale_date > '202004'); -- Hapus partisi dengan menggunakan beberapa klausa PARTITION (<partition_filtercondition>). Hubungan logika antar klausa tersebut adalah OR. ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date < '201911'), PARTITION(sale_date >= '202007'); -- Tambahkan partisi dalam format lain. ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date= '2019-10-05') PARTITION (sale_date= '2019-10-06') PARTITION (sale_date= '2019-10-07'); -- Gunakan ekspresi reguler untuk mencocokkan partisi yang ingin Anda hapus dan hapus partisi tersebut sekaligus. ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date RLIKE '2019-\\d+-\\d+'); -- Buat tabel bernama region_sale_detail. Tabel tersebut berisi partisi multi-level. CREATE TABLE IF NOT EXISTS region_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned BY (sale_date STRING , region STRING ); -- Tambahkan partisi ke tabel. ALTER TABLE region_sale_detail ADD IF NOT EXISTS PARTITION (sale_date= '201910',region = 'shanghai') PARTITION (sale_date= '201911',region = 'shanghai') PARTITION (sale_date= '201912',region = 'shanghai') PARTITION (sale_date= '202001',region = 'shanghai') PARTITION (sale_date= '202002',region = 'shanghai') PARTITION (sale_date= '201910',region = 'beijing') PARTITION (sale_date= '201911',region = 'beijing') PARTITION (sale_date= '201912',region = 'beijing') PARTITION (sale_date= '202001',region = 'beijing') PARTITION (sale_date= '202002',region = 'beijing'); -- Jalankan pernyataan berikut untuk menghapus partisi multi-level sekaligus. Hubungan logika antara dua klausa PARTITION (<partition_filtercondition>) adalah OR. Setelah pernyataan dijalankan, partisi dengan nilai kolom sale_date lebih awal dari 201911 atau partisi dengan nilai kolom region beijing dihapus. ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911'),PARTITION(region = 'beijing'); -- Jalankan pernyataan berikut untuk menghapus partisi dengan nilai kolom sale_date lebih awal dari 201911 dan nilai kolom region beijing. ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911', region = 'beijing');Saat Anda menghapus partisi multi-level sekaligus, Anda tidak dapat menentukan kondisi filter yang didasarkan pada beberapa kolom kunci partisi dalam satu klausa
PARTITION (<partition_filtercondition>). Jika tidak, kesalahan berikut dikembalikan:FAILED: ODPS-0130071:[1,82] Semantic analysis exception - invalid column reference region, partition expression must have one and only one column reference.-- Jika Anda menentukan informasi beberapa kolom kunci partisi dalam klausa PARTITION (<partition_filtercondition>), kesalahan dikembalikan. Contoh penggunaan yang salah: ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911' AND region = 'beijing');
Menambahkan kolom atau komentar
Anda dapat menambahkan kolom atau komentar ke tabel non-partisi atau partisi yang sudah ada. Perhatikan cakupan evolusi skema. MaxCompute mendukung penambahan kolom dengan tipe 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 Tetapkan peran manajemen bawaan kepada pengguna.
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
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin menambahkan kolom. Anda tidak dapat menentukan urutan kolom baru. Kolom tersebut ditambahkan di akhir tabel secara default.
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 dengan tipe 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 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);
Menghapus kolom
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 Tetapkan peran manajemen bawaan kepada pengguna.
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: Wajib. Nama tabel tempat Anda ingin menghapus kolom.
col_name: Wajib. 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;
Mengubah tipe data kolom
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 Tetapkan peran manajemen bawaan kepada pengguna.
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
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin mengubah tipe data kolom.
old_column_name
Ya
Nama kolom yang tipe datanya ingin Anda ubah.
new_column_name
Ya
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
Ya
Tipe data baru kolom tersebut.
Contoh
-- Ubah tipe data bidang id pada 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.

Mengubah urutan kolom
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 Tetapkan peran manajemen bawaan kepada pengguna.
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
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin mengubah urutan kolom.
old_column_name
Ya
Nama asli kolom yang urutannya ingin Anda ubah.
new_col_name
Ya
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
Ya
Tipe data asli kolom tersebut. Ini tidak dapat diubah.
column_name
Ya
Memindahkan kolom yang akan diurutkan ulang setelah column_name.
Contoh
-- Ubah nama kolom customer pada 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 pada tabel sale_detail setelah kolom total_price tanpa mengubah nama kolom. ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;
Mengubah nama kolom
Anda dapat mengubah nama kolom dalam 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
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin mengubah nama kolom.
old_col_name
Ya
Nama kolom yang akan diganti namanya. Kolom tersebut harus ada.
new_col_name
Ya
Nama baru untuk kolom tersebut. Nama kolom harus unik.
Contoh
-- Ganti nama kolom customer_name pada tabel sale_detail menjadi customer. ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;
Mengubah komentar kolom
Anda dapat mengubah komentar kolom dalam tabel non-partisi atau 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 tempat Anda ingin mengubah komentar kolom.
col_name
Ya
Nama kolom yang komentarnya ingin Anda ubah. Kolom tersebut harus ada.
col_comment
Ya
Komentar baru. Komentar harus berupa string yang valid dengan panjang maksimal 1024 byte. Jika tidak, kesalahan dilaporkan.
Contoh
-- Ubah komentar kolom customer pada tabel sale_detail0113. ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';
Mengubah nama dan komentar kolom
Anda dapat mengubah nama dan komentar kolom dalam 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
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin mengubah nama dan komentar kolom.
old_col_name
Ya
Nama kolom yang akan dimodifikasi. Kolom tersebut harus ada.
new_col_name
Ya
Nama baru untuk kolom tersebut. Nama kolom harus unik.
column_type
Ya
Tipe data kolom tersebut.
col_comment
Opsional
Komentar baru. Isi dapat memiliki panjang hingga 1024 byte.
Contoh
-- Ubah nama kolom customer pada tabel sale_detail menjadi customer_newname dan ubah komentarnya menjadi 'customer'. ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';
Mengubah properti NOT NULL kolom
Anda dapat mengubah properti NOT NULL kolom non-kunci partisi dalam tabel agar mengizinkan nilai NULL.
Setelah Anda mengizinkan nilai NULL untuk 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 mengizinkan nilai NULL:Jika
Nullableadalahtrue, nilai NULL diizinkan.Jika
Nullableadalahfalse, nilai NULL tidak diizinkan.
Format perintah
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel tempat Anda ingin mengubah properti NOT NULL kolom.
old_col_name
Ya
Nama kolom non-kunci partisi yang akan dimodifikasi. Kolom tersebut harus merupakan kolom non-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 | | +------------------------------------------------------------------------------------+
Mengompaksi file tabel transaksional
Penyimpanan fisik dasar tabel transaksional terdiri dari file Base dan file Delta, yang tidak dapat dibaca secara langsung. Saat Anda menjalankan operasi update atau delete pada tabel transaksional, hanya file Delta yang ditambahkan. File Base tidak dimodifikasi. Oleh karena itu, operasi update atau delete yang sering meningkatkan jejak penyimpanan tabel dan biaya kueri.
Jika Anda menjalankan beberapa operasi update atau delete pada tabel atau partisi yang sama, banyak file Delta dihasilkan. Saat sistem membaca data, sistem harus memuat file-file Delta ini untuk menentukan baris mana yang diperbarui atau dihapus. Banyaknya file Delta dapat menurunkan performa pembacaan data. Dalam kasus ini, Anda dapat mengompaksi file Base dan Delta untuk mengurangi penyimpanan dan meningkatkan efisiensi pembacaan data.
Sintaks
ALTER TABLE <table_name> [PARTITION (<partition_key> = '<partition_value>' [, ...])] compact {minor|major};Parameter
table_name: Wajib. Nama tabel transaksional yang file-nya ingin Anda kompaksi.
partition_key: Opsional. Jika tabel transaksional adalah tabel partisi, tentukan nama kolom kunci partisi.
partition_value: Opsional. Jika tabel transaksional adalah tabel partisi, tentukan nilai untuk kolom kunci partisi.
major|minor: Anda harus memilih setidaknya satu. Perbedaannya adalah:
minor: Hanya mengompaksi satu file Base dan semua file Delta-nya untuk menghilangkan file Delta tersebut.major: Tidak hanya mengompaksi satu file Base dan semua file Delta-nya untuk menghilangkan file Delta tersebut, tetapi juga menggabungkan file-file kecil dalam file Base yang sesuai dari tabel. Jika file Base kecil (kurang dari 32 MB) atau jika file Delta ada, ini setara dengan menjalankan operasiinsert overwritepada tabel lagi. Namun, jika file Base cukup besar (32 MB atau lebih) dan tidak ada file Delta, file tersebut tidak ditulis ulang.
Contoh
Contoh 1: Kompaksi file tabel transaksional `acid_delete`. Perintah contohnya sebagai berikut:
ALTER TABLE acid_delete compact minor;Hasil berikut dikembalikan:
Summary: Nothing found to merge, set odps.merge.cross.paths=true IF cross path merge is permitted. OKContoh 2: Kompaksi file tabel transaksional `acid_update_pt`. Perintah contohnya sebagai berikut:
ALTER TABLE acid_update_pt PARTITION (ds = '2019') compact major;Hasil berikut dikembalikan:
Summary: table name: acid_update_pt /ds=2019 instance count: 2 run time: 6 before merge, file count: 8 file size: 2613 file physical size: 7839 after merge, file count: 2 file size: 679 file physical size: 2037 OK
Menggabungkan file kecil
Sistem file terdistribusi menyimpan data dalam blok. File yang lebih kecil dari ukuran blok (64 MB) disebut file kecil. Sistem terdistribusi pasti menghasilkan file kecil. Misalnya, file kecil dapat dihasilkan dari hasil perhitungan SQL atau mesin terdistribusi lainnya, atau dari ingesti data melalui Tunnel. Menggabungkan file kecil dapat meningkatkan performa komputasi.
Sintaks
ALTER TABLE <tablename> [PARTITION(<partition_key>=<partition_value>)] MERGE SMALLFILES;Parameter
table_name: Wajib. Nama tabel yang file-nya ingin Anda gabungkan.
partition_key: Opsional. Jika tabel adalah tabel partisi, tentukan nama kolom kunci partisi.
partition_value: Opsional. Jika tabel adalah tabel partisi, tentukan nilai untuk kolom kunci partisi.
Contoh
SET odps.merge.cross.paths=true; SET odps.merge.smallfile.filesize.threshold=128; SET odps.merge.max.filenumber.per.instance = 2000; ALTER TABLE tbcdm.dwd_tb_log_pv_di PARTITION (ds='20151116') MERGE smallfiles;
Jika Anda menggunakan instans pay-as-you-go, Anda dikenai biaya untuk menggunakan fitur penggabungan file kecil. Aturan penagihan sama dengan pekerjaan SQL pay-as-you-go. Untuk informasi selengkapnya, lihat Biaya komputasi (pay-as-you-go).
Untuk informasi selengkapnya, lihat Menggabungkan file kecil.
Perintah terkait
CREATE TABLE: Membuat tabel non-partisi, tabel partisi, foreign table, atau tabel terkluster.
TRUNCATE: Menghapus semua data dari tabel tertentu.
DROP TABLE: Menghapus tabel partisi atau non-partisi.
DESC TABLE/VIEW: Menampilkan informasi tentang tabel internal MaxCompute, view, materialized view, foreign table, tabel terkluster, atau tabel transaksional.
SHOW: Menampilkan pernyataan SQL DDL tabel, mencantumkan semua tabel dan view dalam proyek, atau mencantumkan semua partisi dalam tabel.