全部产品
Search
文档中心

MaxCompute:Membuat dan menghapus tabel

更新时间:Aug 19, 2025

Topik ini menjelaskan cara menggunakan pernyataan SQL untuk membuat dan menghapus tabel.

Jenis

Fitur

Peran

Lingkungan eksekusi

Buat tabel

Membuat tabel non-partisi, tabel partisi, tabel eksternal, atau tabel terkluster.

Pengguna dengan izin CreateTable untuk proyek.

Anda dapat mengeksekusi pernyataan pada platform berikut:

Hapus tabel

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:

DROP TABLE IF EXISTS <tableName>;  -- Jika tabel tujuan ada, hapus terlebih dahulu.
CREATE TABLE <tableName> ...;      -- Buat tabel.
Catatan

Batasan: Anda tidak dapat menggunakan CREATE OR REPLACE TABLE bersama dengan sintaksis berikut:

  • CREATE TABLE ... IF NOT EXISTS.

  • CREATE TABLE ... AS SELECT.

  • CREATE TABLE ... LIKE.

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 insert tidak menentukan nilai untuk kolom, nilai default ditulis ke kolom.

Catatan

Fungsi seperti GETDATE() dan NOW() tidak didukung sebagai nilai default.

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.

  • Tabel non-partisi: Siklus hidup dihitung dari waktu terakhir data tabel dimodifikasi. Jika data tabel tetap tidak berubah setelah jumlah hari yang ditentukan, MaxCompute secara otomatis mengambil kembali tabel tersebut (mirip dengan operasi DROP TABLE).

  • Tabel partisi: MaxCompute menentukan apakah akan menarik kembali partisi berdasarkan nilai LastModifiedTime. Tidak seperti tabel non-partisi, tabel partisi tidak dihapus meskipun semua partisinya telah ditarik kembali. Anda dapat mengonfigurasi siklus hidup untuk tabel, tetapi tidak untuk partisi.

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.

Catatan

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 _pt_col_0_ sebagai nama default. Sistem memeriksa apakah nama tersebut ada dalam tabel. Jika nama tersebut ada, sistem secara otomatis menambahkan akhiran (seperti _pt_col_1_ atau _pt_col_2_) hingga nama yang tidak digunakan ditemukan.

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 CLUSTERED BY, pilih kolom yang memiliki rentang nilai luas dan sedikit nilai kunci duplikat. Selain itu, untuk mengoptimalkan operasi join, Anda juga harus mempertimbangkan untuk memilih Join Keys atau Aggregation Keys yang umum digunakan, yang mirip dengan kunci utama dalam database tradisional.

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 set odps.stage.reducer.num =<konkurensi>; untuk meningkatkan batas ini. Namun, nilai maksimumnya adalah 4.000. Jika tidak, kinerja akan terpengaruh.

Catatan

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.

Catatan
  • Tabel terkluster membantu mengoptimalkan aspek berikut:

    • Pemangkasan bucket

    • Optimasi agregasi.

    • Optimasi penyimpanan.

  • Tabel terkluster memiliki batasan berikut:

    • INSERT INTO tidak didukung. Anda hanya dapat menggunakan INSERT OVERWRITE untuk 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

STORED AS '<format_file>'

Ya

Menentukan format_file berdasarkan format data tabel eksternal.

WITH SERDEPROPERTIES(options)

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 true menunjukkan bahwa tabel mendukung transaksi ACID (atomicity, consistency, isolation, and durability). Ini menggunakan model Kontrol Konkurensi Multi-Versi (MVCC) untuk menyediakan isolasi snapshot.

write.bucket.num

Tidak

Nilai default: 16. Nilai valid: (0, 4096].

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:

  • Jika data ditulis menggunakan MaxCompute tunnel, nilai parameter ini menentukan jumlah node konkuren yang digunakan untuk menulis data. Pengaturan parameter ini memengaruhi lalu lintas impor dan juga tunduk pada jumlah maksimum node konkuren dalam tunnel.

  • Jika data ditulis menggunakan pernyataan SQL, nilai parameter ini menentukan konkurensi reducer yang digunakan untuk menulis data. Pengaturan ini tunduk pada jumlah maksimum node reducer konkuren.

  • Kami merekomendasikan Anda menulis sekitar 500 MB data ke setiap bucket. Misalnya, jika ukuran partisi adalah 500 GB, kami merekomendasikan Anda menambahkan 1.000 bucket hash. Dengan cara ini, ukuran setiap bucket hash 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.

acid.data.retain.hours

Tidak

Nilai default: 24. Nilai valid: [24, 168].

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.

  • Jika Anda menyetel parameter ini ke 0, status data historis tidak dipertahankan, dan kueri perjalanan waktu tidak didukung.

  • Jika status data historis dipertahankan selama periode waktu yang tidak termasuk dalam rentang yang ditentukan oleh parameter ini, data dapat dihapus. Anda dapat menggunakan metode compact untuk mereklaim ruang yang ditempati oleh data.

  • Jika Anda melakukan kueri perjalanan waktu SQL pada data yang dihasilkan lebih awal dari rentang waktu yang ditentukan oleh parameter ini, kesalahan akan dikembalikan. Misalnya, jika nilai parameter ini adalah 72, dan kueri perjalanan waktu dilakukan untuk mengkueri status data historis 72 jam yang lalu, kesalahan akan dikembalikan.

acid.incremental.query.out.of.time.range.enabled

Tidak

Nilai default: false.

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 true, Anda dapat menggunakan SQL atau Tunnel untuk melakukan pembaruan kolom parsial pada tabel Delta.

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 update dan delete pada tabel transaksional untuk memperbarui atau menghapus data pada tingkat baris. Untuk informasi lebih lanjut, lihat Memperbarui atau menghapus data (UPDATE | DELETE).

Tabel transaksional memiliki batasan berikut:

  • MaxCompute memungkinkan Anda menyetel tabel sebagai tabel transaksional hanya saat Anda membuat tabel. Anda tidak dapat menggunakan pernyataan ALTER TABLE untuk 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 didukung
  • Saat 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 partition tidak 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, atau insert overwrite pada data penting dalam tabel transaksional, Anda harus secara manual mencadangkan data ke tabel lain menggunakan operasi select+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 partisi reguler.

    CREATE TABLE IF NOT EXISTS sale_detail(
     shop_name     STRING,
     customer_id   STRING,
     total_price   DOUBLE)
    PARTITIONED BY (sale_date STRING, region STRING);
  • 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.

    1. Buat tabel asli mytable dan tulis data ke tabel tersebut.

      CREATE OR REPLACE TABLE my_table(a BIGINT);
      
      INSERT INTO my_table(a) VALUES (1),(2),(3);
    2. Gunakan OR REPLACE untuk membuat tabel dengan nama yang sama dan modifikasi bidang tabel.

      CREATE OR REPLACE TABLE my_table(b STRING);
    3. 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.

    Catatan

    Tabel sumber sale_detail adalah tabel partisi. Namun, ketika tabel baru sale_detail_ctas1 dibuat menggunakan pernyataan CREATE TABLE ... AS select_statement ..., properti partisi tidak direplikasi. Kolom kunci partisi tabel sumber dianggap sebagai kolom biasa. Oleh karena itu, sale_detail_ctas1 adalah tabel non-partisi dengan lima kolom.

  • Buat tabel dan gunakan konstanta sebagai nilai kolom dalam klausa SELECT.

    Catatan

    Jika 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 _c4 dan _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.

    Catatan

    Skema 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.

    1. 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    20241110
    2. Eksekusi 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.

    1. 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    c
    2. Eksekusi 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.