Topik ini menjelaskan cara menggunakan pernyataan SQL untuk membuat dan menghapus tabel.
Jenis | Fitur | Peran | Lingkungan eksekusi |
Membuat tabel non-partisi, tabel partisi, tabel eksternal, atau tabel terkluster. | Pengguna dengan izin CreateTable untuk proyek. | Anda dapat mengeksekusi pernyataan pada platform berikut: | |
Menghapus tabel partisi atau tabel non-partisi. | Pengguna yang memiliki izin DROP pada tabel. |
Buat tabel
Buat tabel non-partisi, tabel partisi, tabel eksternal, atau tabel terkluster.
Batasan
Tabel partisi dapat memiliki maksimal enam tingkat partisi. Sebagai contoh, jika sebuah tabel menggunakan tanggal sebagai kolom kunci partisi, tingkat partisi dapat berupa
tahun/bulan/minggu/hari/jam/menit.Secara default, sebuah tabel dapat memiliki maksimal 60.000 partisi. Anda dapat menyesuaikan jumlah maksimum partisi dalam tabel sesuai kebutuhan.
Untuk informasi lebih lanjut tentang batasan pada tabel, lihat Batasan SQL.
Sintaksis
Buat tabel internal (termasuk tabel non-partisi dan tabel partisi).
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <nama_tabel> ( <nama_kolom> <tipe_data>, ... ) [komentar <komentar_tabel>] [PARTITIONED BY (<nama_kolom> <tipe_data> [komentar <komentar_kolom>], ...)] [AUTO PARTITIONED BY (<ekspresi_partisi_otomatis> [AS <nama_kolom_partisi_otomatis>]) [TBLPROPERTIES('ingestion_time_partition'='true')] ];Buat tabel terkluster.
CREATE TABLE [IF NOT EXISTS] <nama_tabel> ( <nama_kolom> <tipe_data>, ... ) [CLUSTERED BY | RANGE CLUSTERED BY (<nama_kolom> [, <nama_kolom>, ...]) [SORTED BY (<nama_kolom> [ASC | DESC] [, <nama_kolom> [ASC | DESC] ...])] INTO <jumlah_bucket> bucket];Buat tabel eksternal.
Contoh berikut menunjukkan cara membuat tabel eksternal OSS menggunakan parser teks data bawaan. Untuk informasi lebih lanjut, lihat Tabel Eksternal ORC.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> ( <nama_kolom> <tipe_data>, ... ) STORED AS '<format_file>' [WITH SERDEPROPERTIES (options)] LOCATION '<lokasi_oss>';Buat tabel dan tentukan jenis tabel.
Buat tabel transaksional. Anda dapat memperbarui atau menghapus data tabel setelah tabel dibuat. Namun, beberapa batasan diberlakukan pada tabel transaksional. Kami merekomendasikan agar Anda membuat tabel transaksional sesuai kebutuhan.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <nama_tabel> ( <nama_kolom <tipe_data> [NOT NULL] [DEFAULT <nilai_default>] [komentar <komentar_kolom>], ... [komentar <komentar_tabel>] [TBLPROPERTIES ("transactional"="true")];Buat tabel Delta. Anda dapat menggunakan kunci utama untuk melakukan operasi pada tabel. Misalnya, Anda dapat melakukan upsert, kueri inkremental, dan kueri perjalanan waktu pada tabel.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <nama_tabel> ( <nama_kolom <tipe_data> [NOT NULL] [DEFAULT <nilai_default>] [komentar <komentar_kolom>], ... [PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )]) [komentar <komentar_tabel>] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <hari>];
Buat tabel berdasarkan tabel yang ada.
Buat tabel berdasarkan tabel yang ada dan replikasi data dari tabel yang ada ke tabel baru. Properti partisi tidak direplikasi. Anda dapat membuat tabel berdasarkan tabel eksternal yang ada atau tabel eksternal proyek eksternal yang digunakan untuk menerapkan solusi danau data terpadu.
CREATE TABLE [IF NOT EXISTS] <nama_tabel> [LIFECYCLE <hari>] AS <pernyataan_select>;Buat tabel yang memiliki skema yang sama dengan tabel yang ada. Data di tabel yang ada tidak direplikasi. Anda dapat membuat tabel berdasarkan tabel eksternal yang ada atau tabel eksternal proyek eksternal yang digunakan untuk menerapkan solusi danau data terpadu.
CREATE TABLE [IF NOT EXISTS] <nama_tabel> [LIFECYCLE <hari>] LIKE <nama_tabel_eksisting>;
Parameter
Parameter umum
Parameter | Diperlukan | Deskripsi | Catatan |
OR REPLACE | Tidak | Jika tabel yang ditentukan oleh <nama_tabel> sudah ada, Anda dapat mengeksekusi pernyataan DROP TABLE untuk tabel tersebut, lalu buat tabel dengan nama yang sama untuk penggantian. | Anda dapat menggunakan parameter ini sebagai pengganti pernyataan berikut: Catatan Batasan: Anda tidak dapat menggunakan CREATE OR REPLACE TABLE bersama dengan sintaksis berikut:
|
EXTERNAL | Tidak | Menentukan bahwa tabel yang akan dibuat adalah tabel eksternal. | Tidak ada |
IF NOT EXISTS | Tidak | Mencegah kesalahan dilemparkan jika tabel dengan nama yang sama sudah ada. Jika tabel ada, pernyataan diabaikan. | Jika Anda tidak menentukan parameter IF NOT EXISTS dan tabel dengan nama yang sama ada, kesalahan akan dikembalikan. Jika Anda menentukan parameter IF NOT EXISTS, pesan sukses akan dikembalikan terlepas dari apakah skema tabel yang ada sama dengan tabel yang akan dibuat. Metadata tabel yang ada tetap tidak berubah. |
nama_tabel | Ya | Nama tabel. | Nama tidak peka huruf besar/kecil dan hanya boleh berisi huruf, angka, dan garis bawah (_). Disarankan nama dimulai dengan huruf. Nama tidak boleh melebihi 128 byte panjangnya; jika tidak, kesalahan akan dikembalikan. |
PRIMARY KEY(pk) | Tidak | Kunci utama tabel. | Anda dapat menentukan satu atau lebih kolom sebagai kunci utama. Ini menunjukkan bahwa kombinasi kolom-kolom ini harus unik dalam tabel. Anda harus mematuhi sintaksis SQL standar untuk kunci utama. Kolom yang didefinisikan sebagai kunci utama harus disetel ke not null dan tidak dapat diubah. Penting Parameter ini hanya berlaku untuk tabel Delta. |
nama_kolom | Ya | Nama kolom tabel. | Nama tidak peka huruf besar/kecil dan hanya boleh berisi huruf, angka, dan garis bawah (_). Disarankan nama dimulai dengan huruf. Nama tidak boleh melebihi 128 byte panjangnya; jika tidak, kesalahan akan dikembalikan. |
komentar_kolom | Tidak | Komentar kolom. | Komentar harus berupa string yang valid yang tidak melebihi 1.024 byte panjangnya. Jika nilai parameter ini tidak memenuhi persyaratan, kesalahan akan dikembalikan. |
tipe_data | Ya | Tipe data kolom. | Tipe data bisa BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING, atau tipe data lainnya. Untuk informasi lebih lanjut, lihat Edisi tipe data. |
NOT NULL | Tidak | Jika Anda menentukan parameter ini untuk kolom, nilai kolom tersebut tidak boleh NULL. | Untuk informasi lebih lanjut tentang cara memodifikasi atribut NOT NULL, lihat Operasi partisi. |
nilai_default | Tidak | Nilai default untuk kolom. | Jika operasi Catatan Fungsi seperti |
komentar_tabel | Tidak | Komentar tabel. | Komentar harus berupa string yang valid yang tidak melebihi 1.024 byte panjangnya. Jika nilai parameter ini tidak memenuhi persyaratan, kesalahan akan dikembalikan. |
LIFECYCLE | Tidak | Siklus hidup tabel. | Nilai harus bilangan bulat positif. Satuan: hari.
|
Parameter untuk tabel partisi
MaxCompute mendukung dua jenis tabel partisi: tabel partisi reguler dan tabel partisi otomatis (AUTO PARTITION). Pilih jenis tabel berdasarkan cara pembuatan kolom kunci partisi sesuai dengan skenario yang digunakan.
Parameter untuk tabel partisi reguler
Parameter | Diperlukan | Deskripsi | Catatan |
PARTITIONED BY | Ya | Menentukan partisi tabel partisi reguler. | Anda dapat menentukan partisi hanya menggunakan salah satu metode berikut: PARTITIONED BY atau AUTO PARTITIONED BY. |
nama_kolom | Ya | Nama kolom kunci partisi. | Nama tidak peka huruf besar/kecil dan hanya boleh berisi huruf, angka, dan garis bawah (_). Disarankan nama dimulai dengan huruf. Nama tidak boleh melebihi 128 byte panjangnya; jika tidak, kesalahan akan dikembalikan. |
tipe_data | Ya | Tipe data kolom kunci partisi. | Dalam edisi tipe data MaxCompute V1.0, kolom kunci partisi harus bertipe STRING. Dalam edisi tipe data MaxCompute V2.0, kolom kunci partisi dapat bertipe TINYINT, SMALLINT, INT, BIGINT, VARCHAR, atau STRING. Untuk informasi lebih lanjut, lihat Edisi tipe data. Jika Anda menggunakan bidang partisi untuk mempartisi tabel, pemindaian tabel penuh tidak diperlukan saat Anda menambahkan partisi, memperbarui data partisi, atau membaca data partisi. Ini meningkatkan efisiensi pemrosesan data. |
komentar_kolom | Tidak | Komentar kolom kunci partisi. | Komentar harus berupa string yang valid yang tidak melebihi 1.024 byte panjangnya. Jika nilai parameter ini tidak memenuhi persyaratan, kesalahan akan dikembalikan. |
Nilai kolom kunci partisi tidak boleh mengandung karakter ganda-byte, seperti karakter Cina. Nilai kolom kunci partisi harus dimulai dengan huruf dan dapat berisi huruf, angka, serta karakter khusus yang didukung. Panjangnya tidak boleh melebihi 255 byte. Karakter khusus yang didukung termasuk spasi, titik dua (:), garis bawah (_), tanda dolar ($), tanda pagar (#), titik (.), tanda seru (!), dan simbol at (@). Perilaku karakter lainnya tidak ditentukan, seperti karakter escape \t, \n, dan /.
Parameter untuk tabel AUTO PARTITION
Tabel Partisi Otomatis (AUTO PARTITION) mendukung pembuatan otomatis kolom kunci partisi dengan cara tertentu.
Parameter | Diperlukan | Deskripsi | Catatan |
AUTO PARTITIONED BY | Ya | Menentukan partisi tabel AUTO PARTITION. | Anda dapat menentukan partisi hanya menggunakan salah satu metode berikut: PARTITIONED BY atau AUTO PARTITIONED BY. |
ekspresi_partisi_otomatis | Ya | Mendefinisikan cara menghitung kolom kunci partisi. Saat ini, hanya fungsi TRUNC_TIME yang didukung untuk menghasilkan kolom kunci partisi, dan hanya satu kolom kunci partisi yang didukung. | Fungsi TRUNC_TIME mendukung pemotongan kolom waktu atau tanggal dalam tabel berdasarkan unit waktu tertentu untuk menghasilkan kolom kunci partisi. |
nama_kolom_partisi_otomatis | Tidak | Nama kolom kunci partisi yang dihasilkan. Jika Anda tidak menentukan nama untuk kolom kunci partisi, sistem menggunakan | Setelah partisi dihitung menggunakan ekspresi partisi, kolom kunci partisi bertipe STRING dihasilkan berdasarkan hasil perhitungan. Anda dapat secara eksplisit menentukan nama kolom. Tipe kolom dan nilai kolom tidak dapat dioperasikan langsung. |
TBLPROPERTIES('ingestion_time_partition'='true') | Tidak | Menentukan apakah akan menghasilkan kolom kunci partisi berdasarkan waktu penulisan data. | Untuk informasi lebih lanjut tentang cara menggunakan tabel partisi otomatis berdasarkan waktu penulisan data, lihat Tabel partisi otomatis berdasarkan waktu penulisan data. |
Parameter untuk tabel terkluster
Tabel terkluster diklasifikasikan menjadi tabel hash-clustered dan tabel range-clustered.
Parameter untuk tabel hash-clustered
Parameter | Diperlukan | Deskripsi | Catatan |
CLUSTERED BY | Ya | Kunci hash. | MaxCompute melakukan operasi hash pada kolom yang ditentukan dan mendistribusikan data ke setiap bucket berdasarkan nilai hash. Untuk mencegah kesenjangan data dan hotspot serta mencapai kinerja eksekusi paralel yang lebih baik, untuk klausa |
SORTED BY | Ya | Menentukan cara mengurutkan bidang dalam bucket. | Kami merekomendasikan Anda menyetel SORTED BY ke nilai yang sama dengan CLUSTERED BY untuk mencapai kinerja yang lebih baik. Selain itu, ketika Anda menentukan klausa SORTED BY, MaxCompute secara otomatis menghasilkan indeks dan menggunakan indeks tersebut untuk mempercepat eksekusi selama kueri. |
jumlah_bucket | Ya | Jumlah bucket hash. | Parameter ini diperlukan dan nilainya bervariasi berdasarkan jumlah data. Secara default, MaxCompute mendukung maksimal 1.111 reducer. Ini berarti MaxCompute mendukung maksimal 1.111 bucket hash. Anda dapat menggunakan |
Untuk menjaga kinerja optimal, kami merekomendasikan Anda memperhatikan aturan berikut saat menentukan jumlah bucket hash:
Jaga ukuran setiap bucket hash sekitar 500 MB. Misalnya, jika ukuran partisi adalah 500 GB, kami merekomendasikan Anda menentukan 1.000 bucket. Dengan cara ini, ukuran setiap bucket rata-rata adalah 500 MB. Jika tabel berisi sejumlah besar data, Anda dapat meningkatkan ukuran setiap bucket dari 500 MB menjadi ukuran dalam rentang 2 GB hingga 3 GB. Anda juga dapat menggunakan
set odps.stage.reducer.num=<konkurensi>;untuk melebihi batas 1.111 bucket.Untuk skenario optimasi
join, menghapus langkah shuffle dan sort dapat secara signifikan meningkatkan kinerja. Oleh karena itu, jumlah bucket hash tabel harus merupakan kelipatan dari jumlah bucket hash tabel lainnya. Misalnya, satu tabel memiliki 256 bucket hash dan tabel lainnya memiliki 512 bucket hash. Kami merekomendasikan Anda menggunakan 2n sebagai jumlah bucket hash, seperti 512, 1.024, 2.048, atau 4.096. Dengan cara ini, sistem dapat secara otomatis membagi dan menggabungkan bucket hash dan menghapus langkah shuffle dan sort untuk meningkatkan efisiensi eksekusi.
Parameter untuk tabel range-clustered
Parameter | Diperlukan | Deskripsi | Catatan |
RANGE CLUSTERED BY | Ya | Kolom range-clustered. | MaxCompute melakukan operasi bucket pada kolom yang ditentukan dan mendistribusikan data ke setiap bucket berdasarkan ID bucket. |
SORTED BY | Ya | Menentukan urutan pengurutan kolom dalam setiap bucket. | Anda dapat menggunakan parameter ini dengan cara yang sama seperti Anda menggunakannya untuk tabel hash-clustered. |
jumlah_bucket | Ya | Jumlah bucket hash. | Jumlah bucket dalam tabel range-clustered tidak perlu mengikuti praktik terbaik 2n untuk tabel hash-clustered. Jika distribusi data masuk akal, jumlah bucket apa pun dapat digunakan. Jika Anda tidak menentukan jumlah bucket dalam tabel range-clustered, MaxCompute secara otomatis menentukan jumlah optimal berdasarkan jumlah data. |
Jika operasi JOIN dan AGGREGATE dilakukan pada tabel range-clustered dan kunci join atau kunci grup adalah kunci range-clustered atau awalan dari kunci range-clustered, Anda dapat mengelola flag untuk menonaktifkan shuffling. Ini meningkatkan efisiensi eksekusi. Anda dapat menggunakan set odps.optimizer.enable.range.partial.repartitioning=true/false; untuk mengonfigurasi fitur ini. Fitur ini dinonaktifkan secara default.
Tabel terkluster membantu mengoptimalkan aspek berikut:
Pemangkasan bucket
Optimasi agregasi.
Optimasi penyimpanan.
Tabel terkluster memiliki batasan berikut:
INSERT INTOtidak didukung. Anda hanya dapat menggunakanINSERT OVERWRITEuntuk menambahkan data.Data yang diimpor menggunakan perintah Tunnel tidak disusun secara berurutan. Oleh karena itu, Anda tidak dapat mengimpor data ke tabel range-clustered menggunakan perintah Tunnel.
Fitur cadangan dan pemulihan data tidak didukung.
Parameter untuk tabel eksternal
Contoh berikut menunjukkan parameter untuk membuat tabel eksternal OSS. Untuk informasi lebih lanjut tentang cara membuat tabel eksternal, lihat Tabel Eksternal.
Parameter | Diperlukan | Deskripsi |
| Ya | Menentukan format_file berdasarkan format data tabel eksternal. |
| Tidak | Parameter yang terkait dengan otorisasi, kompresi, dan parsing karakter tabel eksternal. |
lokasi_oss | Ya | Lokasi penyimpanan OSS data tabel eksternal. Untuk informasi lebih lanjut, lihat Tabel eksternal OSS. |
Parameter untuk Tabel Transaksi dan Tabel Delta
Parameter untuk tabel Delta
Tabel Delta mendukung kemampuan seperti pembacaan dan penulisan mendekati real-time, pembacaan dan penulisan inkremental, penyimpanan inkremental, dan pembaruan real-time. Hanya tabel Delta yang memiliki kunci utama yang didukung.
Parameter | Diperlukan | Deskripsi | Catatan |
PRIMARY KEY(PK) | Ya | Parameter ini diperlukan saat Anda membuat tabel Delta. Anda dapat menentukan beberapa kolom sebagai kunci utama. | Anda harus mematuhi sintaksis SQL standar untuk kunci utama. Kolom yang didefinisikan sebagai kunci utama harus disetel ke not null dan tidak dapat diubah. Setelah Anda menentukan kunci utama untuk tabel Delta, data duplikat dihapus dari tabel berdasarkan kunci utama. Batasan unik untuk kolom kunci utama valid dalam partisi tunggal atau dalam tabel non-partisi. |
transaksional | Ya | Parameter ini diperlukan saat Anda membuat tabel Delta. Anda harus menyetel parameter ini ke true. | Menyetel properti ini ke |
write.bucket.num | Tidak | Nilai default: 16. Nilai valid: | Parameter ini menunjukkan jumlah bucket dalam partisi tabel partisi atau dalam tabel non-partisi. Parameter ini juga menentukan jumlah node konkuren yang digunakan untuk menulis data. Anda dapat mengubah nilai parameter ini untuk tabel partisi. Jika partisi baru ditambahkan ke tabel partisi, konfigurasi parameter ini berlaku untuk partisi baru secara default. Anda tidak dapat mengubah nilai parameter ini untuk tabel non-partisi. Perhatikan poin-poin berikut:
|
acid.data.retain.hours | Tidak | Nilai default: 24. Nilai valid: | Rentang waktu selama status data historis dapat dikueri menggunakan fitur perjalanan waktu. Satuan: jam. Untuk mengkueri status data historis untuk periode lebih dari 168 jam (7 hari), hubungi dukungan teknis MaxCompute.
|
acid.incremental.query.out.of.time.range.enabled | Tidak | Nilai default: | Jika Anda menyetel parameter ini ke true, nilai properti endTimestamp yang ditentukan oleh kueri inkremental dapat berupa titik waktu yang lebih lambat dari waktu commit maksimum data dalam tabel. Jika nilai properti endTimestamp lebih besar dari waktu saat ini, data baru mungkin dimasukkan ke tabel Delta, dan Anda mungkin mendapatkan hasil berbeda untuk beberapa kueri. Anda dapat mengubah nilai parameter ini untuk tabel. |
acid.write.precombine.field | Tidak | Anda dapat menggunakan parameter ini untuk menentukan nama hanya satu kolom. | Jika Anda menentukan nama kolom, sistem melakukan deduplikasi data berdasarkan kolom kunci utama dalam file yang berisi pernyataan SQL yang dikomit bersama dengan parameter ini. Ini memastikan keunikan dan konsistensi data. Catatan Jika ukuran data yang dikomit pada satu waktu melebihi 128 MB, beberapa file dihasilkan. Parameter ini tidak dapat digunakan untuk deduplikasi data dari beberapa file. |
acid.partial.fields.update.enable | Tidak | Jika Anda menyetel parameter ini ke | Anda dapat menyetel parameter ini saat Anda membuat tabel. Setelah tabel dibuat, Anda tidak dapat mengubah nilai parameter ini. |
Persyaratan untuk parameter umum lainnya dari tabel Delta:
LIFECYCLE: Siklus hidup tabel harus lebih besar dari atau sama dengan siklus hidup selama kueri perjalanan waktu dapat dilakukan. Rumusnya adalah
lifecycle >= acid.data.retain.hours / 24. Saat Anda membuat tabel, MaxCompute memeriksa siklus hidup tabel yang Anda tentukan. Jika siklus hidup yang ditentukan tidak memenuhi persyaratan, kesalahan akan dikembalikan.Fitur yang tidak didukung lainnya: Tabel Delta tidak mendukung klausa CLUSTER BY dan CREATE TABLE AS dan tidak dapat digunakan sebagai tabel eksternal.
Batasan lainnya:
Hanya MaxCompute SQL yang dapat langsung melakukan operasi pada tabel Delta.
Anda tidak dapat mengubah tabel biasa yang ada menjadi tabel Delta.
Anda tidak dapat mengubah skema kolom kunci utama tabel Delta.
Parameter untuk Tabel Transaksi
Parameter | Diperlukan | Deskripsi |
TBLPROPERTIES(transaksional"="true") | Ya | Parameter ini digunakan untuk menyetel tabel sebagai tabel transaksional. Anda dapat melakukan operasi |
Tabel transaksional memiliki batasan berikut:
MaxCompute memungkinkan Anda menyetel tabel sebagai tabel transaksional hanya saat Anda membuat tabel. Anda tidak dapat menggunakan pernyataan
ALTER TABLEuntuk mengubah tabel yang ada menjadi tabel transaksional. Jika Anda mengeksekusi pernyataan berikut, kesalahan akan dikembalikan:ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transaksional"="true"); --Kesalahan dikembalikan. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transaksional tidak didukungSaat Anda membuat tabel terkluster atau tabel eksternal, Anda tidak dapat menyetelnya sebagai tabel transaksional.
Anda tidak dapat beralih antara tabel transaksional dan tabel internal MaxCompute, tabel eksternal, atau tabel terkluster.
File tabel transaksional tidak dapat digabungkan secara otomatis. Anda harus secara manual mengeksekusi operasi penggabungan. Untuk informasi lebih lanjut, lihat Gabung File Tabel Transaksional.
Operasi
merge partitiontidak didukung.Batasan tertentu diberlakukan pada akses ke tabel transaksional dari pekerjaan sistem lain. Misalnya, jika pekerjaan Anda adalah pekerjaan Graph, Anda tidak dapat menggunakan pekerjaan tersebut untuk membaca data dari atau menulis data ke tabel transaksional. Jika pekerjaan Anda adalah pekerjaan Spark atau Platform for AI (PAI), Anda dapat menggunakan pekerjaan tersebut hanya untuk membaca data dari tabel transaksional dan Anda tidak dapat menggunakan pekerjaan tersebut untuk menulis data ke tabel transaksional.
Sebelum Anda melakukan operasi
update,delete, atauinsert overwritepada data penting dalam tabel transaksional, Anda harus secara manual mencadangkan data ke tabel lain menggunakan operasiselect+insert.
Parameter untuk membuat tabel berdasarkan tabel yang ada
Anda dapat menggunakan pernyataan
CREATE TABLE [IF NOT EXISTS] <nama_tabel> [LIFECYCLE <hari>] AS <pernyataan_select>;untuk membuat tabel dan mereplikasi data ke tabel baru.Namun, properti partisi dan properti siklus hidup tabel sumber tidak direplikasi ke tabel yang dibuat. Kolom kunci partisi tabel sumber dianggap sebagai kolom biasa dalam tabel yang dibuat.
Anda juga dapat menggunakan parameter siklus hidup untuk mereklaim tabel. Anda juga dapat mengeksekusi pernyataan ini untuk membuat tabel internal dan mereplikasi data tabel eksternal ke tabel internal.
Anda dapat menggunakan pernyataan
CREATE TABLE [IF NOT EXISTS] <nama_tabel> [LIFECYCLE <hari>] LIKE <nama_tabel_eksisting>;untuk membuat tabel yang menggunakan skema yang sama dengan tabel yang ada.Namun, tabel yang dibuat menggunakan pernyataan ini tidak mereplikasi data atau properti siklus hidup tabel sumber.
Anda juga dapat menggunakan parameter siklus hidup untuk mereklaim tabel. Anda juga dapat mengeksekusi pernyataan ini untuk membuat tabel internal yang memiliki skema yang sama dengan tabel eksternal yang ada.
Contoh
Buat tabel non-partisi
Buat tabel non-partisi
CREATE TABLE test1 (key STRING);Buat tabel non-partisi dan konfigurasikan nilai default untuk bidang tabel.
CREATE TABLE test_default( tinyint_name tinyint NOT NULL default 1Y, smallint_name SMALLINT NOT NULL DEFAULT 1S, int_name INT NOT NULL DEFAULT 1, bigint_name BIGINT NOT NULL DEFAULT 1, binary_name BINARY , float_name FLOAT , double_name DOUBLE NOT NULL DEFAULT 0.1, decimal_name DECIMAL(2, 1) NOT NULL DEFAULT 0.0BD, varchar_name VARCHAR(10) , char_name CHAR(2) , string_name STRING NOT NULL DEFAULT 'N', boolean_name BOOLEAN NOT NULL DEFAULT TRUE );
Buat tabel partisi
Buat tabel AUTO PARTITION dan gunakan fungsi perhitungan waktu untuk menghasilkan partisi berdasarkan kolom data bertipe waktu.
-- Potong kolom sale_date berdasarkan bulan untuk menghasilkan kolom partisi bernama sale_month, dan partisi tabel berdasarkan kolom partisi ini. CREATE TABLE IF NOT EXISTS auto_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE, sale_date DATE ) AUTO PARTITIONED BY (TRUNC_TIME(sale_date, 'month') AS sale_month);Buat tabel AUTO PARTITION dan tentukan bahwa partisi dihasilkan berdasarkan waktu penulisan data. Dalam hal ini, sistem secara otomatis mendapatkan waktu ketika data ditulis ke MaxCompute dan menghasilkan partisi menggunakan fungsi perhitungan waktu.
-- Setelah tabel dibuat, ketika data ditulis ke tabel, sistem secara otomatis mendapatkan waktu penulisan data _partitiontime, memotongnya berdasarkan hari, menghasilkan kolom partisi bernama sale_date, dan mempartisi tabel berdasarkan kolom partisi ini. CREATE TABLE IF NOT EXISTS auto_sale_detail2( shop_name STRING, customer_id STRING, total_price DOUBLE, _partitiontime TIMESTAMP_NTZ) AUTO PARTITIONED BY (TRUNC_TIME(_partitiontime, 'day') AS sale_date) TBLPROPERTIES('ingestion_time_partition'='true');
Buat tabel baru
Buat tabel untuk menggantikan tabel yang ada.
Buat tabel asli
mytabledan tulis data ke tabel tersebut.CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3);Gunakan OR REPLACE untuk membuat tabel dengan nama yang sama dan modifikasi bidang tabel.
CREATE OR REPLACE TABLE my_table(b STRING);Kueri tabel
my_table. Kode berikut menunjukkan hasil yang dikembalikan:+------------+ | b | +------------+ +------------+
Pernyataan SQL berikut tidak valid:
CREATE OR REPLACE TABLE IF NOT EXISTS my_table(b STRING); CREATE OR REPLACE TABLE my_table AS SELECT; CREATE OR REPLACE TABLE my_table LIKE newtable;Buat tabel, replikasi data dari tabel yang ada ke tabel baru, lalu konfigurasikan siklus hidup untuk tabel baru.
-- Buat tabel bernama sale_detail_ctas1, replikasi data dari tabel sale_detail ke tabel sale_detail_ctas1, dan konfigurasikan siklus hidup. SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas1 LIFECYCLE 10 AS SELECT * FROM sale_detail;Anda dapat mengeksekusi perintah
DESC EXTENDED sale_detail_ctas1;untuk melihat struktur tabel, siklus hidup, dan detail lainnya.CatatanTabel sumber
sale_detailadalah tabel partisi. Namun, ketika tabel barusale_detail_ctas1dibuat menggunakan pernyataanCREATE TABLE ... AS select_statement ..., properti partisi tidak direplikasi. Kolom kunci partisi tabel sumber dianggap sebagai kolom biasa. Oleh karena itu,sale_detail_ctas1adalah tabel non-partisi dengan lima kolom.Buat tabel dan gunakan konstanta sebagai nilai kolom dalam klausa SELECT.
CatatanJika Anda menggunakan konstanta sebagai nilai kolom dalam klausa
SELECT, kami merekomendasikan Anda menentukan nama kolom. Kolom keempat dan kelima dari tabel sale_detail_ctas3 yang dibuat serupa dengan_c4dan_c5.Nama kolom ditentukan.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas2 AS SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region FROM sale_detail;Nama kolom tidak ditentukan.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas3 AS SELECT shop_name, customer_id, total_price, '2013', 'China' FROM sale_detail;
Buat tabel yang menggunakan skema yang sama dengan tabel yang ada dan konfigurasikan siklus hidup untuk tabel baru.
CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;Anda dapat mengeksekusi perintah
DESC EXTENDED sale_detail_like;untuk melihat struktur tabel, siklus hidup, dan detail lainnya.CatatanSkema tabel sale_detail_like sama dengan tabel sale_detail. Kedua tabel memiliki properti yang sama, seperti nama kolom, komentar kolom, dan komentar tabel, selain dari siklus hidup. Namun, data dalam tabel sale_detail tidak direplikasi ke tabel sale_detail_like.
Buat tabel yang memiliki skema yang sama dengan tabel eksternal.
-- Buat tabel bernama mc_oss_extable_orc_like yang memiliki skema yang sama dengan tabel eksternal mc_oss_extable_orc. CREATE TABLE mc_oss_extable_orc_like LIKE mc_oss_extable_orc;Anda dapat mengeksekusi perintah
DESC mc_oss_extable_orc_like;untuk melihat struktur tabel dan detail lainnya.+------------------------------------------------------------------------------------+ | Pemilik: ALIYUN$****@***.aliyunid.com | Proyek: max_compute_7u************yoq | | KomentarTabel: | +------------------------------------------------------------------------------------+ | WaktuPembuatan: 2022-08-11 11:10:47 | | WaktuDDLTerakhir: 2022-08-11 11:10:47 | | WaktuModifikasiTerakhir: 2022-08-11 11:10:47 | +------------------------------------------------------------------------------------+ | TabelInternal: YA | Ukuran: 0 | +------------------------------------------------------------------------------------+ | KolomAsli: | +------------------------------------------------------------------------------------+ | Bidang | Jenis | Label | Komentar | +------------------------------------------------------------------------------------+ | id | string | | | | name | string | | | +------------------------------------------------------------------------------------+
Buat tabel yang menggunakan tipe data baru
SET odps.sql.type.system.odps2=true;
CREATE TABLE test_newtype (
c1 TINYINT,
c2 SMALLINT,
c3 INT,
c4 BIGINT,
c5 FLOAT,
c6 DOUBLE,
c7 DECIMAL,
c8 BINARY,
c9 TIMESTAMP,
c10 ARRAY<MAP<BIGINT,BIGINT>>,
c11 MAP<STRING,ARRAY<BIGINT>>,
c12 STRUCT<s1:STRING,s2:BIGINT>,
c13 VARCHAR(20))
LIFECYCLE 1;Buat tabel hash-clustered atau range-clustered
Buat tabel hash-clustered non-partisi.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Buat tabel hash-clustered partisi.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Buat tabel range-clustered non-partisi.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Buat tabel range-clustered partisi.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Buat tabel transaksional
Membuat tabel transaksional non-partisi.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transaksional"="true");Membuat tabel transaksional partisi.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transaksional"="true");
Buat tabel internal
Buat tabel internal dan replikasi data tabel partisi eksternal ke tabel internal. Properti partisi tidak direplikasi ke tabel internal.
Buat tabel eksternal OSS dan tabel internal MaxCompute.
-- Buat tabel eksternal OSS dan masukkan data. CREATE EXTERNAL TABLE max_oss_test(a INT, b INT, c INT) STORED AS TEXTFILE LOCATION "oss://oss-cn-hangzhou-internal.aliyuncs.com/<bucket_name>"; INSERT INTO max_oss_test VALUES (101, 1, 20241108), (102, 2, 20241109), (103, 3, 20241110); SELECT * FROM max_oss_test; -- Hasil a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Eksekusi pernyataan CREATE TABLE AS untuk membuat tabel internal. CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test; -- Kueri tabel internal. SELECT * FROM from_exetbl_oss; -- Semua data dalam tabel internal dikembalikan. a b c 101 1 20241108 102 2 20241109 103 3 20241110Eksekusi
DESC from_exetbl_as_par;untuk menanyakan struktur tabel internal. Informasi berikut dikembalikan:+------------------------------------------------------------------------------------+ | Pemilik: ALIYUN$*********** | | Proyek: ***_*****_*** | | KomentarTabel: | +------------------------------------------------------------------------------------+ | WaktuPembuatan: 2023-01-10 15:16:33 | | WaktuDDLTerkahir: 2023-01-10 15:16:33 | | WaktuModifikasiTerakhir: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | TabelInternal: YA | Ukuran: 919 | +------------------------------------------------------------------------------------+ | KolomAsli: | +------------------------------------------------------------------------------------+ | Bidang | Jenis | Label | Komentar | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
Buat tabel internal dan replikasi data tabel partisi eksternal ke tabel internal. Properti partisi direplikasi ke tabel internal.
Buat tabel internal bernama
from_exetbl_like.-- Kueri tabel eksternal danau data dari MaxCompute. SELECT * FROM max_oss_test; -- Hasil a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Eksekusi pernyataan CREATE TABLE LIKE untuk membuat tabel internal. CREATE TABLE from_exetbl_like LIKE max_oss_test; -- Kueri tabel internal. SELECT * FROM from_exetbl_like; -- Hanya skema tabel internal yang dikembalikan. a b cEksekusi
DESC from_exetbl_like;untuk menanyakan struktur tabel internal. Informasi berikut dikembalikan:+------------------------------------------------------------------------------------+ | Pemilik: ALIYUN$************ | | Proyek: ***_*****_*** | | KomentarTabel: | +------------------------------------------------------------------------------------+ | WaktuPembuatan: 2023-01-10 15:09:47 | | WaktuDDLTerkahir: 2023-01-10 15:09:47 | | WaktuModifikasiTerakhir: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | TabelInternal: YA | Ukuran: 0 | +------------------------------------------------------------------------------------+ | KolomAsli: | +------------------------------------------------------------------------------------+ | Bidang | Jenis | Label | Komentar | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | KolomPartisi: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
Buat tabel Delta
Buat tabel Delta.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transaksional"="true");Buat tabel Delta dan konfigurasikan properti tabel utama.
CREATE TABLE mf_tt2 ( pk BIGINT NOT NULL, pk2 BIGINT NOT NULL, val BIGINT, val2 BIGINT, PRIMARY KEY (pk, pk2) ) TBLPROPERTIES ( "transaksional"="true", "write.bucket.num" = "64", "acid.data.retain.hours"="120" ) LIFECYCLE 7;
Hapus tabel
Menghapus tabel non-partisi atau tabel partisi.
Perhatian
Sebelum Anda menghapus tabel, konfirmasikan bahwa tabel dapat dihapus. Lanjutkan dengan hati-hati. Jika Anda secara tidak sengaja menghapus tabel, Anda dapat memulihkan tabel jika fitur cadangan dan pemulihan diaktifkan untuk proyek dan tabel dihapus dalam periode retensi data cadangan yang ditentukan untuk proyek. Untuk informasi lebih lanjut tentang cadangan dan pemulihan, lihat Cadangan Lokal.
Setelah Anda menghapus tabel, volume data yang disimpan dalam proyek MaxCompute berkurang.
Sintaksis
DROP TABLE [IF EXISTS] <nama_tabel>; Parameter
Parameter | Diperlukan | Deskripsi |
IF EXISTS | Tidak | Jika Anda tidak menentukan parameter IF EXISTS dan tabel tidak ada, kesalahan akan dikembalikan. Jika Anda menentukan parameter IF EXISTS, pesan sukses akan dikembalikan terlepas dari apakah tabel ada. |
nama_tabel | Ya | Nama tabel yang ingin Anda hapus. |
Contoh
--Hapus tabel sale_detail. Pesan sukses akan dikembalikan terlepas dari apakah tabel sale_detail ada.
DROP TABLE IF EXISTS sale_detail; Referensi
Untuk informasi lebih lanjut tentang cara mereplikasi data tabel ke tabel lain, lihat CLONE TABLE.
Untuk informasi lebih lanjut tentang cara memodifikasi dan melihat informasi tabel, lihat Memodifikasi dan Melihat Tabel.
Untuk informasi lebih lanjut tentang cara melakukan operasi pada partisi tabel yang ada, lihat Operasi Partisi.
Untuk informasi lebih lanjut tentang cara melakukan operasi pada kolom tabel yang ada, lihat Operasi Kolom.