Topik ini menjelaskan cara membuat 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 kolom tanggal sebagai kolom kunci partisi, enam tingkat partisi tersebut adalah
tahun/bulan/minggu/hari/jam/menit.Secara default, sebuah tabel dapat memiliki maksimal 60.000 partisi. Anda dapat menyesuaikan jumlah maksimum partisi dalam sebuah tabel sesuai dengan kebutuhan bisnis Anda.
Untuk informasi lebih lanjut tentang batasan pada tabel, lihat Batasan SQL MaxCompute.
Sintaksis
Buat tabel internal
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <nama_tabel> (
<nama_kolom> <tipe_data>, ... )
[comment <komentar_tabel>]
[PARTITIONED BY (<nama_kolom> <tipe_data> [comment <komentar_kolom>], ...)]
;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> buckets];Buat tabel eksternal
Sebagai contoh, buat tabel eksternal OSS menggunakan resolver data teks bawaan.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <nama_tabel_mc_oss_ext> (
<nama_kolom> <tipe_data>, ... )
STORED AS '<format_file>'
[WITH SERDEPROPERTIES (opsi)]
LOCATION '<lokasi_oss>';Buat tabel dan tentukan jenis tabel
Buat tabel transaksional. Anda dapat memperbarui atau menghapus data tabel setelah tabel dibuat. Namun, batasan tertentu diberlakukan pada tabel transaksional. Kami merekomendasikan Anda membuat tabel transaksional sesuai kebutuhan.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <nama_tabel> ( <nama_kolom <tipe_data> [NOT NULL] [DEFAULT <nilai_default>] [comment <komentar_kolom>], ... [comment <komentar_tabel>] [TBLPROPERTIES ("transactional"="true")];Buat tabel Delta. Anda dapat menggunakan kunci utama untuk melakukan operasi pada tabel. Sebagai contoh, 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>] [comment <komentar_kolom>], ... [PRIMARY KEY (<pk_nama_kolom>[, <pk_nama_kolom2>, ...] )]) [comment <komentar_tabel>] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="jam"...])] [LIFECYCLE <hari>];
Buat tabel baru 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 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 dalam tabel yang ada tidak direplikasi. Anda dapat membuat tabel berdasarkan tabel eksternal yang ada atau tabel proyek eksternal yang digunakan untuk menerapkan solusi danau data terpadu.
CREATE TABLE [IF NOT EXISTS] <nama_tabel> [LIFECYCLE <hari>] LIKE <nama_tabel_yang_ada>;
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 membuat 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 dapat 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 dapat 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 dan tidak boleh 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 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 dan tidak boleh 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). Anda dapat memilih jenis berdasarkan cara Anda ingin kolom kunci partisi dibuat dalam berbagai skenario.
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 dapat 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 dan tidak boleh melebihi 1.024 byte panjangnya. Jika nilai parameter ini tidak memenuhi persyaratan, kesalahan akan dikembalikan. |
Nilai kolom kunci partisi tidak boleh mengandung karakter ganda, seperti karakter Cina. Nilai kolom kunci partisi harus dimulai dengan huruf dan dapat berisi huruf, angka, dan 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 tanda 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. |
auto_partition_expression | Ya | Menentukan 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. |
auto_partition_column_name | 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 titik panas serta mencapai kinerja eksekusi paralel yang lebih baik, untuk klausa |
SORTED BY | Ya | Menentukan cara mengurutkan bidang dalam sebuah 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:
Pertahankan ukuran setiap bucket hash sekitar 500 MB. Sebagai contoh, 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 sebuah 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 dari sebuah tabel harus merupakan kelipatan dari jumlah bucket hash tabel lainnya. Sebagai contoh, 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-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 penguraian 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 pada 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 menanyakan 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 yang berbeda untuk beberapa kueri. Anda dapat mengubah nilai parameter ini untuk sebuah 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 akan 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 pernyataan 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("transactional"="true"); --Kesalahan dikembalikan. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supportedSaat Anda membuat tabel terkluster atau tabel eksternal, Anda tidak dapat menyetelnya sebagai tabel transaksional.
Anda tidak dapat mengonversi 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 Gabungkan file tabel transaksional.
Operasi
merge partitiontidak didukung.Batasan tertentu diberlakukan pada akses ke tabel transaksional dari pekerjaan sistem lainnya. Sebagai contoh, 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 pekerjaan 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 menarik kembali tabel. Anda juga dapat mengeksekusi pernyataan ini untuk membuat tabel internal dan mereplikasi data dari tabel eksternal ke tabel internal.
Anda dapat menggunakan pernyataan
CREATE TABLE [IF NOT EXISTS] <nama_tabel> [LIFECYCLE <hari>] LIKE <nama_tabel_yang_ada>;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 menarik kembali 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
CREATE TABLE test1 (key STRING);Buat tabel partisi
Buat tabel partisi bernama sale_detail.
CREATE TABLE IF NOT EXISTS sale_detail(
nama_toko STRING,
id_pelanggan STRING,
total_harga DOUBLE)
PARTITIONED BY (tanggal_penjualan STRING, wilayah STRING);Buat tabel baru untuk menggantikan tabel asli
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 baru dan replikasi data dari tabel yang ada ke tabel baru
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 mengambil informasi rinci tentang skema dan siklus hidup tabel dengan mengeksekusi perintah DESC EXTENDED sale_detail_ctas1;.
Tabel sale_detail adalah tabel partisi. Namun, tabel yang dibuat oleh pernyataan CREATE TABLE ... AS select_statement ..., sale_detail_ctas1, tidak mereplikasi properti partisi. Ini memperlakukan kolom kunci partisi tabel sumber sebagai kolom biasa dalam tabel target. Dengan demikian, sale_detail_ctas1 adalah tabel non-partisi dengan lima kolom.
Buat tabel baru dan gunakan konstanta dalam pernyataan SELECT sebagai nilai kolom
Saat menggunakan konstanta sebagai nilai kolom dalam klausa SELECT, kami merekomendasikan untuk menentukan nama kolom. Kolom keempat dan kelima dari tabel yang dibuat sale_detail_ctas3 diberi nama _c4 dan _c5.
Nama kolom ditentukan.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas2 AS SELECT nama_toko, id_pelanggan, total_harga, '2013' AS tanggal_penjualan, 'China' AS wilayah FROM sale_detail;Nama kolom tidak ditentukan.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas3 AS SELECT nama_toko, id_pelanggan, total_harga, '2013', 'China' FROM sale_detail;
Buat tabel baru dengan skema yang sama dengan tabel yang ada
Buat tabel dengan 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 mengambil informasi rinci tentang skema dan siklus hidup tabel dengan menjalankan perintah DESC EXTENDED sale_detail_like;.
Skema tabel sale_detail_like identik dengan tabel sale_detail, termasuk properti seperti nama kolom, komentar kolom, dan komentar tabel, kecuali untuk siklus hidup. Namun, data dari tabel sale_detail tidak direplikasi ke tabel sale_detail_like.
Buat tabel baru dengan 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 mengambil informasi rinci tentang skema tabel dengan mengeksekusi perintah DESC mc_oss_extable_orc_like;.
+------------------------------------------------------------------------------------+
| Pemilik: ALIYUN$*********** |
| Proyek: ***_*****_*** |
| 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 |
+------------------------------------------------------------------------------------+
| Kolom Asli: |
+------------------------------------------------------------------------------------+
| Bidang | Jenis | Label | Komentar |
+------------------------------------------------------------------------------------+
| id | string | | |
| nama | string | | |
+------------------------------------------------------------------------------------+Buat tabel dengan 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
Tabel non-partisi
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Tabel 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
Tabel non-partisi
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Tabel partisi
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Buat tabel transaksional
Tabel non-partisi
CREATE TABLE t5(id BIGINT) TBLPROPERTIES("transaksional"="true");Tabel partisi
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES("transaksional"="true");
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;
Buat tabel non-partisi dan tentukan nilai default untuk bidang
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 internal dan replikasi data dari tabel eksternal partisi
Tabel internal tidak berisi properti partisi.
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 perintah
DESC from_exetbl_as_par;untuk mengambil skema tabel internal.+------------------------------------------------------------------------------------+ | Pemilik: ALIYUN$*********** | | Proyek: ***_*****_*** | | KomentarTabel: | +------------------------------------------------------------------------------------+ | WaktuPembuatan: 2023-01-10 15:16:33 | | WaktuDDLTerakhir: 2023-01-10 15:16:33 | | WaktuModifikasiTerakhir: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | TabelInternal: YA | Ukuran: 919 | +------------------------------------------------------------------------------------+ | Kolom Asli: | +------------------------------------------------------------------------------------+ | Bidang | Jenis | Label | Komentar | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
Tabel internal berisi properti partisi.
Buat tabel internal
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 perintah
DESC from_exetbl_like;untuk mengambil skema tabel internal.+------------------------------------------------------------------------------------+ | Pemilik: ALIYUN$************ | | Proyek: ***_*****_*** | | KomentarTabel: | +------------------------------------------------------------------------------------+ | WaktuPembuatan: 2023-01-10 15:09:47 | | WaktuDDLTerakhir: 2023-01-10 15:09:47 | | WaktuModifikasiTerakhir: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | TabelInternal: YA | Ukuran: 0 | +------------------------------------------------------------------------------------+ | Kolom Asli: | +------------------------------------------------------------------------------------+ | Bidang | Jenis | Label | Komentar | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | Kolom Partisi: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
Perintah terkait
ALTER TABLE: Modifikasi operasi tabel.
TRUNCATE: Bersihkan data dari tabel yang ditentukan.
DROP TABLE: Hapus tabel partisi atau non-partisi.
DESC TABLE/VIEW: Ambil informasi tentang tabel internal MaxCompute, tampilan, tampilan materialisasi, tabel eksternal, tabel terkluster, dan tabel transaksional.
SHOW: Ambil pernyataan DDL SQL tabel, daftar semua tabel dan tampilan dalam proyek, atau daftar semua partisi dalam tabel.