Memperbarui informasi tentang sebuah tabel.
Mengubah pemilik tabel
MaxCompute memungkinkan Anda mengubah pemilik sebuah tabel.
Sintaksis
alter table <table_name> changeowner to <new_owner>;Parameter
table_name: Wajib. Nama tabel yang pemiliknya ingin Anda ubah.
new_owner: Wajib. Pemilik baru dari tabel tersebut.
Contoh
-- Mengubah pemilik tabel test1 menjadi ALIYUN$xxx@aliyun.com. alter table test1 changeowner to 'ALIYUN$xxx@aliyun.com';
Memodifikasi komentar tabel
MaxCompute memungkinkan Anda memodifikasi komentar sebuah tabel.
Sintaksis
alter table <table_name> set comment '<new_comment>';Parameter
table_name: Wajib. Nama tabel yang komentarnya ingin Anda modifikasi.
new_comment: Wajib. Komentar baru untuk tabel tersebut.
Contoh
alter table sale_detail set comment 'komentar baru untuk tabel sale_detail';Anda dapat mengeksekusi pernyataan
desc <table_name>MaxCompute untuk melihat hasil modifikasicommentdi dalam tabel.
Mengubah nilai LastModifiedTime
SQL MaxCompute memungkinkan Anda mengeksekusi pernyataan TOUCH untuk mengubah nilai LastModifiedTime ke waktu saat ini. Setelah Anda mengeksekusi pernyataan ini, MaxCompute menganggap bahwa data tabel telah berubah, dan memulai ulang siklus hidup tabel dari waktu yang ditentukan oleh LastModifiedTime.
Sintaksis
alter table <table_name> touch;Parameter
table_name: Wajib. Nama tabel yang LastModifiedTime-nya ingin Anda ubah.
Contoh
alter table sale_detail touch;
Memodifikasi atribut pengelompokan tabel
MaxCompute memungkinkan Anda menambahkan atau menghapus atribut pengelompokan pada tabel dengan mengeksekusi pernyataan ALTER TABLE.
Sintaksis
Sintaksis pernyataan yang digunakan untuk menambahkan atribut pengelompokan hash 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];Sintaksis pernyataan yang digunakan untuk menghapus atribut pengelompokan hash dari tabel:
alter table <table_name> not clustered;Jika Anda tidak menentukan jumlah bucket dalam tabel terkelompok rentang, MaxCompute secara otomatis menentukan jumlah optimal berdasarkan volume data. Sintaksis:
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];Sintaksis pernyataan yang digunakan untuk menghapus atribut pengelompokan rentang dari tabel atau partisi:
alter table <table_name> not clustered; alter table <table_name> partition [<pt_spec>] not clustered;CatatanPernyataan
ALTER TABLEhanya dapat memodifikasi atribut pengelompokan untuk tabel terpartisi. Atribut pengelompokan tabel non-partisi tidak dapat dimodifikasi setelah tabel dibuat. PernyataanALTER TABLEcocok untuk tabel yang sudah ada. Setelah Anda menentukan atribut pengelompokan, partisi baru akan disimpan berdasarkan atribut pengelompokan yang Anda tentukan.ALTER TABLEhanya berlaku untuk partisi baru dalam tabel terpartisi. Partisi baru termasuk yang dihasilkan menggunakanINSERT OVERWRITEdan disimpan berdasarkan atribut pengelompokan baru. Atribut pengelompokan dan metode penyimpanan tetap tidak berubah untuk partisi asli. Setelah Anda menentukan atribut pengelompokan untuk tabel, Anda dapat menghapus atribut pengelompokan dan menambahkan atribut pengelompokan untuk tabel lagi. Anda dapat menentukan kolom pengelompokan, kolom pengurutan, dan jumlah bucket yang berbeda untuk partisi baru.ALTER TABLEhanya berlaku untuk partisi baru. Oleh karena itu, pernyataan ini tidak dapat digunakan untuk menentukan partisi.
Parameter
Parameter sama dengan yang digunakan untuk CREATE TABLE.
Contoh
-- Membuat tabel terpartisi. create table if not exists sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE) partitioned by (sale_date STRING, region STRING); -- Memodifikasi atribut pengelompokan tabel. alter table sale_detail clustered by (customer_id) sorted by (customer_id) into 10 buckets;Untuk informasi lebih lanjut tentang atribut pengelompokan, lihat Pengelompokan Hash dan Pengelompokan Rentang.
Mengganti nama tabel
MaxCompute memungkinkan Anda mengganti nama tabel. Setelah Anda mengganti nama tabel, hanya nama tabel yang berubah. Data di dalam tabel tidak berubah.
Sintaksis
alter table <table_name> rename to <new_table_name>;Parameter
table_name: Wajib. Nama tabel yang ingin Anda ganti namanya.
new_table_name: Wajib. Nama baru untuk tabel tersebut. Jika nama yang ditentukan oleh parameter new_table_name sudah ada, kesalahan akan dikembalikan.
Contoh
alter table sale_detail rename to sale_detail_rename;
Mengubah siklus hidup tabel
MaxCompute memungkinkan Anda mengubah siklus hidup yang dikonfigurasikan untuk tabel terpartisi atau tabel non-partisi yang sudah ada.
Sintaksis
alter table <table_name> set lifecycle <days>;Parameter
table_name: Wajib. Nama tabel yang siklus hidupnya ingin Anda ubah.
days: Wajib. Siklus hidup setelah modifikasi. Nilainya harus bilangan bulat positif. Satuan: hari.
Contoh
-- Mengubah siklus hidup yang dikonfigurasikan untuk tabel test_lifecycle menjadi 50 hari. alter table test_lifecycle set lifecycle 50;
Menonaktifkan atau mengembalikan siklus hidup
MaxCompute memungkinkan Anda menonaktifkan atau mengembalikan siklus hidup yang dikonfigurasikan untuk tabel atau partisi tertentu.
Sintaksis
alter table <table_name> partition [<pt_spec>] {enable|disable} lifecycle;Parameter
table_name: Wajib. Nama tabel yang siklus hidupnya ingin Anda nonaktifkan atau pulihkan.
pt_spec: Opsional. Partisi tabel yang siklus hidupnya ingin Anda nonaktifkan atau pulihkan. Nilai parameter ini dalam format
partition_col1=col1_value1, partition_col2=col2_value1.... Jika tabel memiliki partisi multi-level, Anda harus menentukan nilai semua kolom kunci partisi.enable: Mengembalikan siklus hidup tabel atau partisi tertentu dari tabel.
Tabel dan partisinya dapat diklaim kembali berdasarkan siklus hidup. Pengaturan siklus hidup tabel dan partisinya saat ini digunakan secara default.
Sebelum Anda mengaktifkan fitur siklus hidup untuk tabel, Anda dapat memodifikasi pengaturan siklus hidup tabel dan partisinya. Ini mencegah data salah diklaim karena penggunaan pengaturan sebelumnya.
disable: Menonaktifkan fitur siklus hidup untuk tabel atau partisi tertentu.
Menonaktifkan siklus hidup tabel dan partisinya lebih diutamakan daripada mengembalikan siklus hidup tabel dan partisinya. Jika Anda menentukan
table disable lifecycle,pt_spec enable lifecyclemenjadi tidak valid.Setelah Anda menonaktifkan fitur siklus hidup untuk tabel, pengaturan siklus hidup untuk tabel, dan flag enable atau disable untuk partisi tabel dipertahankan.
Setelah fitur siklus hidup dinonaktifkan untuk tabel, Anda masih dapat mengubah pengaturan siklus hidup tabel dan partisinya.
Contoh
Contoh 1: Menonaktifkan fitur siklus hidup untuk tabel trans.
alter table trans disable lifecycle;Contoh 2: Menonaktifkan fitur siklus hidup untuk partisi dt='20141111' di tabel trans.
alter table trans partition (dt='20141111') disable lifecycle;
Menambahkan partisi
MaxCompute memungkinkan Anda menambahkan partisi ke tabel terpartisi yang sudah ada.
Batasan
Tabel MaxCompute dapat memiliki maksimum 60.000 partisi.
Untuk menambahkan nilai kolom kunci partisi ke tabel yang memiliki partisi multi-level, Anda harus menentukan semua partisi.
Operasi ini hanya dapat menambahkan nilai kolom kunci partisi. Nama kolom kunci partisi tidak dapat ditambahkan.
Sintaksis
alter table <table_name> add [if not exists] partition <pt_spec> [partition <pt_spec> partition <pt_spec>...];Parameter
table_name: Wajib. Nama tabel terpartisi yang ingin Anda tambahkan partisi.
if not exists: Opsional. Jika Anda tidak mengonfigurasi parameter if not exists dan partisi dengan nama yang sama sudah ada, operasi ini gagal dan kesalahan dikembalikan.
pt_spec: Wajib. 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, dan partition_col_value menunjukkan nilai kolom kunci partisi. Nama kolom kunci partisi tidak peka huruf besar/kecil, tetapi nilainya peka huruf besar/kecil.
Contoh
Contoh 1: Menambahkan partisi ke tabel sale_detail. Partisi menyimpan catatan penjualan di wilayah China (Hangzhou) pada Desember 2013.
alter table sale_detail add if not exists partition (sale_date='201312', region='hangzhou');Contoh 2: Menambahkan dua partisi ke tabel sale_detail. Partisi menyimpan catatan penjualan di wilayah China (Beijing) dan China (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: Menambahkan satu atau lebih partisi ke tabel sale_detail dan hanya menentukan kolom kunci partisi sale_date untuk partisi. Kesalahan dikembalikan karena Anda harus menentukan dua kolom kunci partisi sale_date dan region untuk partisi.
alter table sale_detail add if not exists partition (sale_date='20111011');
Menghapus partisi
MaxCompute memungkinkan Anda menghapus partisi dari tabel terpartisi yang sudah ada.
MaxCompute memungkinkan Anda menghapus partisi berdasarkan kondisi filter yang ditentukan. Jika Anda ingin menghapus beberapa partisi yang memenuhi kondisi filter tertentu sekaligus, Anda dapat menggunakan ekspresi untuk menentukan kondisi filter, gunakan kondisi filter untuk mencocokkan partisi, dan hapus partisi 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>), fungsi yang digunakan dalam ekspresi harus berupa fungsi skalar bawaan.
Peringatan
Setelah Anda menghapus partisi dari tabel di proyek MaxCompute Anda, volume data yang tersimpan di proyek MaxCompute Anda berkurang.
Anda dapat menentukan siklus hidup untuk tabel terpartisi. Dengan cara ini, MaxCompute secara otomatis mengklaim kembali partisi yang datanya tidak diperbarui dalam waktu yang ditentukan oleh siklus hidup. Untuk informasi lebih lanjut tentang siklus hidup, lihat Siklus Hidup.
Sintaksis
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
table_name: Wajib. Nama tabel terpartisi dari mana Anda ingin menghapus partisi.
if exists: Opsional. Jika Anda tidak menentukan opsi if exists dan partisi yang ingin Anda hapus tidak ada, kesalahan dikembalikan.
pt_spec: Wajib. Partisi yang ingin Anda hapus. Nilai parameter ini dalam format
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi, dan 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: Kondisi filter. Parameter ini diperlukan ketika Anda menentukan kondisi filter. Parameter ini tidak peka huruf besar/kecil. Format parameter adalah sebagai berikut:
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>), ...]partition_col: Nama kolom kunci partisi.
relational_operators: Operator relasional. Untuk informasi lebih lanjut, lihat Operator.
partition_col_value: Nilai dalam kolom kunci partisi. Nilai tersebut mungkin merupakan 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 relational_operators untuk membandingkan nilai yang diproses dengan partition_col_value.
Kondisi filter yang digunakan untuk menghapus partisi mendukung operator logika NOT, AND, dan OR. Anda dapat menggunakan PARTITION (<NOT partition_filtercondition>) untuk mendapatkan himpunan pelengkap dari kondisi filter yang Anda tentukan. Anda dapat menggunakan PARTITION (<partition_filtercondition1 ANDOR partition_filtercondition2>) untuk mendapatkan kondisi yang digunakan untuk mencocokkan partisi yang ingin Anda hapus.
Beberapa klausa PARTITION (<partition_filtercondition>) didukung. Jika klausa-klausa ini dipisahkan oleh koma (,), hubungan logis antara klausa adalah OR. Kondisi filter diperoleh berdasarkan hubungan logis OR dan digunakan untuk mencocokkan partisi yang ingin Anda hapus.
Contoh
Hapus data dari partisi dengan kondisi filter tidak ditentukan.
-- Hapus partisi dari tabel sale_detail. Partisi menyimpan catatan penjualan di wilayah China (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 menyimpan catatan penjualan di wilayah China (Hangzhou) dan China (Shanghai) pada Desember 2013. alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou'),partition(sale_date='201312',region='shanghai');Hapus data dari partisi dengan kondisi filter ditentukan.
-- Buat tabel terpartisi bernama sale_detail. 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 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 menggunakan beberapa klausa PARTITION (<partition_filtercondition>). Hubungan logis antara klausa ini 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 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 region_sale_detail. 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 logis antara dua klausa PARTITION (<partition_filtercondition>) adalah OR. Setelah pernyataan dijalankan, partisi di mana nilai kolom sale_date lebih awal dari 201911 atau partisi di mana nilai kolom region adalah beijing akan dihapus. alter table region_sale_detail drop if exists partition(sale_date < '201911'),partition(region = 'beijing'); -- Jalankan pernyataan berikut untuk menghapus partisi di mana nilai kolom sale_date lebih awal dari 201911 dan nilai kolom region adalah beijing. alter table region_sale_detail drop if exists partition(sale_date < '201911', region = 'beijing');Saat menghapus partisi multi-level sekaligus, Anda tidak dapat menentukan kondisi filter berdasarkan beberapa kolom kunci partisi dalam satu klausa
PARTITION partition_filtercondition. Jika tidak, kesalahan berikut akan 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 akan dikembalikan. Contoh penggunaan salah: alter table region_sale_detail drop if exists partition(sale_date < '201911' AND region = 'beijing');
Mengubah LastModifiedTime partisi
SQL MaxCompute memungkinkan Anda mengeksekusi pernyataan TOUCH untuk mengubah LastModifiedTime partisi dalam tabel terpartisi. Operasi ini dapat mengubah LastModifiedTime partisi menjadi waktu saat ini. Dalam hal ini, MaxCompute menganggap bahwa data diperbarui, dan siklus hidup baru partisi dimulai dari waktu yang ditentukan oleh LastDataModifiedTime.
Batasan
Jika tabel berisi partisi multi-level, Anda harus menentukan semua tingkat partisi saat mengubah LastModifiedTime partisi dalam tabel.
Sintaksis
alter table <table_name> touch partition (<pt_spec>);Parameter
table_name: Wajib. Nama tabel terpartisi yang LastModifiedTime-nya ingin Anda ubah. Jika tabel tidak ada, kesalahan dikembalikan.
pt_spec: Wajib. Partisi yang LastModifiedTime-nya ingin Anda ubah. Nilai parameter ini dalam format
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi, dan partition_col_value menunjukkan nilai kolom kunci partisi. Jika nama kolom atau nilai kolom yang ditentukan tidak ada, kesalahan dikembalikan.
Contoh
-- Ubah LastModifiedTime partisi di mana nilai kolom sale_date adalah 201312 dan nilai kolom region adalah shanghai dalam tabel sale_detail. alter table sale_detail touch partition (sale_date='201312', region='shanghai');
Mengubah nilai kolom kunci partisi
SQL MaxCompute memungkinkan Anda mengeksekusi pernyataan RENAME untuk mengubah nilai kolom kunci partisi.
Batasan
Pernyataan RENAME dapat mengubah nilai kolom kunci partisi tetapi tidak dapat mengubah nama kolom.
Jika tabel berisi partisi multi-level, Anda harus menentukan semua tingkat partisi saat mengubah LastModifiedTime partisi dalam tabel.
Sintaksis
alter table <table_name> partition (<pt_spec>) rename to partition (<new_pt_spec>);Parameter
table_name: Wajib. Nama tabel di mana Anda ingin mengubah nilai kolom dalam partisi.
pt_spec: Wajib. Partisi di mana Anda ingin mengubah nilai kolom. Nilai parameter ini dalam format
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi, dan partition_col_value menunjukkan nilai kolom kunci partisi. Jika nama kolom atau nilai kolom yang ditentukan tidak ada, kesalahan dikembalikan.new_pt_spec: Wajib. Informasi partisi baru. Nilai parameter ini dalam format
(partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...). partition_col menunjukkan nama kolom kunci partisi, dan new_partition_col_value menunjukkan nilai kolom kunci partisi baru.
Contoh
-- Ubah nilai kolom dalam partisi tabel sale_detail. alter table sale_detail partition (sale_date = '201312', region = 'hangzhou') rename to partition (sale_date = '201310', region = 'beijing');
Menggabungkan partisi
SQL MaxCompute memungkinkan Anda mengeksekusi pernyataan MERGE PARTITION untuk menggabungkan beberapa partisi tabel menjadi satu partisi. Operasi ini menghapus informasi dimensi partisi yang digabungkan dan memigrasikan data partisi ke partisi yang ditentukan.
Batasan
Partisi tabel eksternal tidak dapat digabungkan. Setelah partisi tabel terkelompok digabungkan menjadi satu partisi, partisi tersebut tidak memiliki atribut pengelompokan.
Anda dapat menggabungkan maksimum 4.000 partisi sekaligus.
Sintaksis
alter table <table_name> merge [if exists] partition (<predicate>) [, partition(<predicate2>) ...] overwrite partition (<fullpartitionSpec>) [purge];Parameter
table_name: Wajib. Nama tabel terpartisi yang partisinya ingin Anda gabungkan.
if exists: Opsional. Jika Anda tidak mengonfigurasi parameter if exists dan partisi yang ingin Anda gabungkan tidak ada, kesalahan dikembalikan saat Anda menggabungkan partisi. Jika if exists ditentukan tetapi tidak ada partisi yang memenuhi kondisi
merge, partisi baru tidak dapat dihasilkan setelah Anda menggabungkan partisi. Jika Anda menggabungkan partisi dan memodifikasi data sumber menggunakan pernyataan pada saat yang sama, kesalahan dikembalikan meskipun Anda menentukan if exists. Pernyataan tersebut mungkinINSERT,RENAME, atauDROP.predicate: Wajib. Kondisi yang digunakan untuk mencocokkan partisi yang ingin Anda gabungkan.
fullpartitionSpec: Wajib. Partisi yang dihasilkan setelah Anda menggabungkan partisi.
purge: Opsional. Jika Anda menentukan parameter ini, log dalam direktori sesi dihapus. Secara default, log yang dihasilkan dalam tiga hari terakhir dihapus. Untuk informasi lebih lanjut, lihat Purge.
Contoh
Contoh 1: Gabungkan partisi yang memenuhi kondisi tertentu ke partisi tujuan.
-- Lihat partisi yang dihasilkan dalam tabel terpartisi setelah Anda menggabungkan 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 Anda menggabungkan partisi. 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 ke partisi tujuan.
-- Gabungkan partisi tertentu ke partisi tujuan. 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 terpartisi. show partitions intpstringstringstring; ds=20181101/hh=00/mm=00
Menambahkan kolom atau komentar kolom
MaxCompute memungkinkan Anda menambahkan kolom atau komentar kolom ke tabel non-partisi atau tabel terpartisi yang sudah ada.
Anda tidak dapat menentukan posisi kolom baru dalam tabel. Secara default, kolom baru ditambahkan sebagai kolom terakhir.
MaxCompute memungkinkan Anda menambahkan kolom tipe STRUCT, seperti
struct<x: string, y: bigint>danmap<string, struct<x: double, y: double>>.
Sintaksis
alter table <table_name> add columns (<col_name1> <type1> comment ['<col_comment>'][, <col_name2> <type2> comment '<col_comment>'...]);Parameter
table_name: Wajib. Nama tabel ke mana Anda ingin menambahkan kolom.
col_name: Wajib. Nama kolom yang ingin Anda tambahkan ke tabel.
type: Wajib. Tipe data kolom yang ingin Anda tambahkan ke tabel.
col_comment: Opsional. Komentar kolom yang ingin Anda tambahkan ke tabel.
Contoh
Contoh 1: Tambahkan dua kolom ke tabel sale_detail.
alter table sale_detail add columns (customer_name STRING, education BIGINT);Contoh 2: Tambahkan dua kolom dan komentar mereka ke tabel sale_detail.
alter table sale_detail add columns (customer_name STRING comment 'Pelanggan', education BIGINT comment 'Pendidikan' );Contoh 3: Tambahkan kolom tipe data kompleks ke tabel sale_detail.
alter table sale_detail add columns (region struct<province:string, area:string>);
Menghapus kolom
MaxCompute memungkinkan Anda menghapus satu atau beberapa kolom tertentu dari tabel non-partisi atau tabel terpartisi yang sudah ada.
Jika Anda menghapus kolom dari tabel dalam salah satu skenario berikut, operasi baca dan tulis pada tabel terpengaruh.
Jika pekerjaan Anda adalah pekerjaan MapReduce dan versi MapReduce adalah V1.0, Anda tidak dapat menggunakan pekerjaan Graph untuk membaca data dari atau menulis data ke tabel yang kolomnya dihapus.
Jika pekerjaan Anda adalah pekerjaan Spark yang berjalan di konsol Cupid dan salah satu versi Spark berikut digunakan, Anda dapat menggunakan pekerjaan Anda untuk membaca data dari tabel tetapi tidak dapat menulis data ke tabel.
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Jika pekerjaan Anda adalah pekerjaan PAI, Anda dapat menggunakan pekerjaan Anda untuk membaca data dari tabel. Anda tidak dapat menggunakan pekerjaan Anda untuk menulis data ke tabel.
Jika pekerjaan Anda adalah pekerjaan Hologres dan versi Hologres lebih awal dari Hologres V1.3, Anda tidak dapat membaca data dari atau menulis data ke tabel yang kolomnya dihapus ketika Hologres merujuk tabel sebagai tabel eksternal.
Jika Anda menghapus kolom dari tabel, Anda tidak dapat menjalankan perintah
CLONE TABLEpada tabel.
Saat Anda menggunakan MaxCompute Streaming Tunnel untuk menulis data ke tabel yang kolomnya dihapus, Anda tidak dapat mengubah skema tabel.
Sintaksis
alter table <table_name> drop columns <col_name1>[, <col_name2>...];Parameter
table_name: Wajib. Nama tabel dari mana Anda ingin menghapus kolom.
col_name: Wajib. Nama kolom yang ingin Anda hapus.
Contoh
-- Hapus kolom customer_id dari tabel sale_detail. Masukkan ya di klien MaxCompute untuk menghapus kolom. alter table sale_detail drop columns customer_id; -- Hapus kolom shop_name dan customer_id dari tabel sale_detail. Masukkan ya di klien MaxCompute untuk menghapus kolom. alter table sale_detail drop columns shop_name, customer_id;
Mengubah tipe data kolom
MaxCompute memungkinkan Anda mengubah tipe data kolom yang ada.
Jika Anda mengubah tipe data kolom dalam salah satu skenario berikut, operasi baca dan tulis pada tabel terpengaruh.
Jika pekerjaan Anda adalah pekerjaan MapReduce dan versi MapReduce adalah V1.0, Anda tidak dapat menggunakan pekerjaan Graph untuk membaca data dari atau menulis data ke tabel yang kolomnya dihapus.
Jika pekerjaan Anda adalah pekerjaan Spark yang berjalan di konsol Cupid dan salah satu versi Spark berikut digunakan, Anda dapat menggunakan pekerjaan Anda untuk membaca data dari tabel. Anda tidak dapat menggunakan pekerjaan Anda untuk menulis data ke tabel.
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Jika pekerjaan Anda adalah pekerjaan PAI, Anda dapat menggunakan pekerjaan Anda untuk membaca data dari tabel. Anda tidak dapat menggunakan pekerjaan Anda untuk menulis data ke tabel.
Jika pekerjaan Anda adalah pekerjaan Hologres dan versi Hologres lebih awal dari Hologres V1.3, Anda tidak dapat membaca data dari atau menulis data ke tabel yang kolomnya dihapus ketika Hologres merujuk tabel sebagai tabel eksternal.
Jika Anda mengubah tipe data kolom dalam tabel, Anda tidak dapat menjalankan perintah
CLONE TABLEpada tabel.
Jika Anda menggunakan MaxCompute Streaming Tunnel untuk menulis data ke tabel, Anda tidak dapat mengubah skema tabel.
Sintaksis
alter table <table_name> change [column] <old_column_name> <new_column_name> <new_data_type>;Parameter
table_name: Wajib. Nama tabel di mana Anda ingin mengubah tipe data kolom.
old_column_name: Wajib. Nama kolom yang tipe datanya ingin Anda ubah.
new_column_name: Wajib. Nama baru kolom yang tipe datanya ingin Anda ubah. Nilai new_column_name bisa sama dengan nilai old_column_name. Dalam hal ini, nama kolom tidak berubah. Nama yang ditentukan oleh parameter new_column_name tidak boleh sama dengan nama kolom lain kecuali nama yang ditentukan oleh parameter old_column_name.
new_data_type: Wajib. Tipe data baru kolom yang ingin Anda ubah.
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;Konversi Tipe Data yang Didukung
CatatanTabel berikut menjelaskan konversi antara tipe data. Y menunjukkan bahwa konversi antara tipe data didukung. N menunjukkan bahwa konversi antara tipe data tidak didukung. - menunjukkan bahwa konversi antara tipe data tidak terlibat. Y() menunjukkan bahwa konversi antara tipe data hanya didukung jika kondisi dalam tanda kurung () terpenuhi.

Mengubah urutan kolom
MaxCompute memungkinkan Anda mengubah urutan kolom dalam tabel non-partisi atau tabel terpartisi yang sudah ada.
Jika Anda mengubah urutan kolom dalam tabel, atau menambahkan kolom ke tabel dan mengubah urutan kolom baru dalam tabel dalam salah satu skenario berikut, operasi baca dan tulis pada tabel terpengaruh.
Jika pekerjaan Anda adalah pekerjaan MapReduce dan versi MapReduce adalah V1.0, Anda tidak dapat menggunakan pekerjaan Graph untuk membaca data dari atau menulis data ke tabel yang kolomnya dihapus.
Jika pekerjaan Anda adalah pekerjaan Spark yang berjalan di konsol Cupid dan salah satu versi Spark berikut digunakan, Anda dapat menggunakan pekerjaan Anda untuk membaca data dari tabel. Anda tidak dapat menggunakan pekerjaan Anda untuk menulis data ke tabel.
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Jika pekerjaan Anda adalah pekerjaan PAI, Anda dapat menggunakan pekerjaan Anda untuk membaca data dari tabel. Anda tidak dapat menggunakan pekerjaan Anda untuk menulis data ke tabel.
Jika pekerjaan Anda adalah pekerjaan Hologres dan versi Hologres lebih awal dari Hologres V1.3, Anda tidak dapat membaca data dari atau menulis data ke tabel yang kolomnya dihapus ketika Hologres merujuk tabel sebagai tabel eksternal.
Jika Anda mengubah urutan kolom dalam tabel, Anda tidak dapat menjalankan perintah
CLONE TABLEpada tabel.
Saat Anda menggunakan MaxCompute Streaming Tunnel untuk menulis data ke tabel yang kolomnya dihapus, Anda tidak dapat mengubah skema tabel.
Sintaksis
alter table <table_name> change <old_column_name> <new_column_name> <column_type> after <column_name>;Parameter
table_name: Wajib. Nama tabel di mana Anda ingin mengubah urutan kolom.
old_column_name: Wajib. Nama asli kolom yang urutannya ingin Anda ubah.
new_col_name: Wajib. Nama baru kolom yang urutannya ingin Anda ubah. Nilai new_col_name bisa sama dengan nilai old_column_name. Dalam hal ini, nama kolom tidak berubah. Nama yang ditentukan oleh parameter new_col_name tidak boleh sama dengan nama kolom lain kecuali nama yang ditentukan oleh parameter old_column_name.
column_type: Wajib. Tipe data asli kolom yang urutannya ingin Anda ubah. Nilai parameter ini tidak dapat diubah.
column_name: Wajib. Kolom setelah mana Anda ingin menempatkan kolom yang ditentukan.
Contoh
-- Ubah nama kolom customer_id menjadi customer dan tempatkan kolom customer setelah kolom total_price dalam tabel sale_detail. alter table sale_detail change customer_id customer string after total_price; -- Tempatkan kolom customer_id setelah kolom total_price dalam tabel sale_detail. Nama kolom customer_id tidak berubah. alter table sale_detail change customer_id customer_id string after total_price;
Mengubah nama kolom
MaxCompute memungkinkan Anda mengubah nama kolom dalam tabel non-partisi atau tabel terpartisi yang sudah ada.
Sintaksis
alter table <table_name> change column <old_col_name> rename to <new_col_name>;Parameter
table_name: Wajib. Nama tabel di mana Anda ingin memodifikasi nama kolom.
old_col_name: Wajib. Nama kolom yang ingin Anda modifikasi. Kolom yang ditentukan oleh old_col_name harus sudah ada dalam tabel.
new_col_name: Wajib. Nama baru untuk kolom tersebut. Tabel tidak mengandung kolom bernama new_col_name.
Contoh
-- Ubah nama kolom customer_name menjadi customer dalam tabel sale_detail. alter table sale_detail change column customer_name rename to customer;
Memodifikasi komentar kolom
MaxCompute memungkinkan Anda memodifikasi komentar kolom dalam tabel non-partisi atau tabel terpartisi yang sudah ada.
Sintaksis
alter table <table_name> change column <col_name> comment '<col_comment>';Parameter
table_name: Wajib. Nama tabel di mana Anda ingin memodifikasi komentar kolom.
col_name: Wajib. Nama kolom yang komentarnya ingin Anda modifikasi. Kolom yang ditentukan oleh col_name harus sudah ada dalam tabel.
col_comment: Wajib. Komentar baru untuk kolom tersebut. Komentar baru harus berupa string yang valid dan tidak melebihi 1.024 byte panjangnya. Jika nilai parameter ini tidak memenuhi persyaratan, kesalahan akan dikembalikan.
Contoh
-- Modifikasi komentar kolom customer dalam tabel sale_detail. alter table sale_detail change column customer comment 'customer';
Mengubah nama dan komentar kolom
MaxCompute memungkinkan Anda mengubah nama atau komentar kolom dalam tabel non-partisi atau tabel terpartisi.
Sintaksis
alter table <table_name> change column <old_col_name> <new_col_name> <column_type> comment '<col_comment>';Parameter
table_name: Wajib. Nama tabel di mana Anda ingin mengubah nama dan komentar kolom.
old_col_name: Wajib. Nama kolom yang ingin Anda ubah namanya dan komentarnya. Kolom yang ditentukan oleh
old_col_nameharus sudah ada dalam tabel.new_col_name: Wajib. Nama baru untuk kolom tersebut. Tabel tidak boleh mengandung kolom bernama
new_col_name.column_type: Wajib. Tipe data kolom.
col_comment: Opsional. Komentar baru untuk kolom tersebut dengan panjang maksimum 1.024 byte.
Contoh
-- Ubah nama kolom customer_name dalam tabel sale_detail menjadi customer_newname dan komentar kolom menjadi customer. alter table sale_detail change column customer_name customer_newname STRING comment 'customer';
Mengubah properti non-null kolom kunci non-partisi dalam tabel
MaxCompute memungkinkan Anda mengubah properti non-null kolom kunci non-partisi dalam tabel. Jika nilai kolom kunci non-partisi dalam tabel tidak boleh null, Anda dapat mengeksekusi pernyataan untuk mengizinkan nilai kolom menjadi null.
Anda dapat mengeksekusi pernyataan DESC EXTENDED table_name; untuk melihat nilai properti Nullable. Properti ini menentukan apakah nilai kolom kunci non-partisi dapat bernilai null. Jika nilai properti Nullable adalah true, nilai kolom dapat bernilai null. Jika nilai properti Nullable adalah false, nilai kolom tidak boleh null.
Batasan
Setelah Anda mengubah nilai properti Nullable menjadi true, Anda tidak dapat mengembalikan pengaturan properti tersebut. Lanjutkan dengan hati-hati.
Sintaksis
alter table <table_name> change column <old_col_name> null;Parameter
table_name: Wajib. Nama tabel tempat Anda ingin mengubah nilai properti Nullable untuk kolom.
old_col_name: Wajib. Nama kolom kunci non-partisi yang properti Nullablenya ingin diubah. Kolom yang ditentukan oleh old_col_name harus sudah ada dalam tabel.
Contoh
-- Buat tabel terpartisi. Nilai dalam kolom id tidak boleh null. create table null_test(id int not null, name string) partitioned by (ds string); -- Izinkan nilai dalam kolom id menjadi null. alter table null_test change column id null;
Menggabungkan file tabel transaksional
File dasar dan file delta pada tabel transaksional menggunakan penyimpanan fisik, sehingga tidak dapat dibaca secara langsung. Saat Anda mengeksekusi pernyataan UPDATE atau DELETE pada tabel transaksional, data dalam file dasar tidak diperbarui. Sebagai gantinya, file delta dihasilkan untuk setiap operasi. Semakin banyak operasi hapus atau perbarui yang dilakukan, semakin besar penggunaan ruang penyimpanan tabel dan biaya yang dikenakan untuk kueri.
Jika Anda mengeksekusi pernyataan UPDATE atau DELETE beberapa kali pada tabel atau partisi tabel, sejumlah besar file delta akan dihasilkan. Saat sistem membaca data dari tabel, file delta dimuat untuk mengidentifikasi baris yang dihapus atau diperbarui. Jumlah file delta yang besar dapat menurunkan efisiensi pembacaan data. Dalam situasi ini, Anda dapat menggabungkan file dasar dengan file delta untuk mengurangi penggunaan penyimpanan dan meningkatkan efisiensi pembacaan.
Sintaksis
alter table <table_name> [partition (<partition_key> = '<partition_value>' [, ...])] compact {minor|major};Parameter
table_name: Wajib. Nama tabel transaksional yang ingin Anda gabungkan file dasar dan delta-nya.
partition_key: Opsional. Nama kolom kunci partisi dalam tabel transaksional terpartisi.
partition_value: Opsional. Nilai kolom kunci partisi dalam tabel transaksional terpartisi.
major|minor: Salah satu harus ditentukan. Perbedaan antara minor compaction dan major compaction:
minor: Menggabungkan setiap file dasar dengan semua file delta yang dihasilkan berdasarkan file dasar dan menghapus file delta.major: Menggabungkan setiap file dasar dengan semua file delta yang dihasilkan berdasarkan file dasar, menghapus file delta, dan menggabungkan file dasar kecil. Jika ukuran file dasar kurang dari 32 MB atau file delta dihasilkan, efek penggabungan file setara dengan efek mengeksekusi pernyataanINSERT OVERWRITE. Namun, jika ukuran file dasar lebih besar dari atau sama dengan 32 MB dan tidak ada file delta yang dihasilkan, data tabel tidak ditimpa.
Contoh
Contoh 1: Menggabungkan file tabel acid_delete. Contoh pernyataan:
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: Menggabungkan file tabel acid_update_pt. Contoh pernyataan:
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 berukuran 64 MB. File dengan ukuran lebih kecil dari blok tersebut disebut file kecil. Sistem ini secara tak terhindarkan menghasilkan file kecil, misalnya saat mengeksekusi pernyataan SQL di MaxCompute atau menggunakan Tunnel untuk mengumpulkan data. Dalam situasi seperti ini, Anda dapat menggunakan fitur ini untuk menggabungkan file kecil dan meningkatkan kinerja komputasi.
Sintaksis
ALTER TABLE <tablename> [PARTITION(<partition_key>=<partition_value>)] MERGE SMALLFILES;Parameter
table_name: Wajib. Nama tabel yang sesuai dengan file yang akan digabungkan.
partition_key: Opsional. Nama kolom kunci partisi jika tabel merupakan tabel terpartisi.
partition_value: Opsional. Nilai kolom kunci partisi jika tabel merupakan tabel terpartisi.
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;
Resource komputasi digunakan untuk menggabungkan file kecil. Jika Anda menggunakan instans pay-as-you-go, biaya akan dikenakan sesuai dengan aturan penagihan pay-as-you-go untuk pernyataan SQL. Untuk informasi lebih lanjut, lihat dan Penetapan harga komputasi (pay-as-you-go).
Untuk informasi lebih lanjut, lihat Gabungkan file kecil.
Pernyataan terkait
CREATE TABLE: membuat tabel non-partisi, tabel terpartisi, tabel eksternal, atau tabel terkelompok.
TRUNCATE: menghapus data dari tabel tertentu.
DROP TABLE: menghapus tabel terpartisi atau tabel non-partisi.
DESC TABLE/VIEW: melihat informasi tentang tabel internal MaxCompute, tampilan, tampilan material, tabel eksternal, tabel terkelompok, atau tabel transaksional.
SHOW: melihat pernyataan SQL DDL yang digunakan untuk membuat tabel, atau menanyakan informasi semua tabel dan tampilan dalam proyek atau informasi semua partisi dalam tabel.