Tabel Delta adalah format tabel berkinerja tinggi di MaxCompute yang dirancang untuk set data analitik berskala besar. Format ini mencakup dua jenis: Append Delta Table untuk tabel tanpa kunci primer dan PK Delta Table untuk tabel dengan kunci primer. Topik ini menjelaskan fitur dasar dan operasi Tabel Delta.
Ikhtisar
Tabel Delta adalah format tabel berkinerja tinggi di Alibaba Cloud MaxCompute. Format ini mendukung fitur seperti transaksi atomicity, consistency, isolation, dan durability (ACID), kueri inkremental, time travel, dynamic cluster bucketing, pembaruan data real-time, serta evolusi skema. Kemampuan native data lakehouse dan komputasi near-real-time di MaxCompute memungkinkan Anda menggunakan SQL standar untuk membuat, memperbarui, dan mengkueri Tabel Delta tanpa perlu mengelola penyimpanan dan metadata dasar yang kompleks. MaxCompute secara otomatis memelihara dan mengoptimalkannya guna memberikan keseimbangan antara kemudahan penggunaan dan efisiensi biaya.
Fitur
Kategori | Fitur | Append Delta Table | Tabel Delta PK |
DML Dasar | Insert, Update, Delete, dan Merge Into. | Didukung | Didukung |
Transaksi ACID | Read Committed/Snapshot Isolation. Untuk informasi selengkapnya, lihat Manajemen transaksi ACID. | Didukung | Didukung |
Kunci primer | Menentukan kunci primer. | Tidak didukung | Mendukung pembaruan kolom parsial |
Evolusi skema | Menambahkan, menghapus, mengganti nama, mengatur ulang urutan, dan mengubah tipe data kolom. Untuk informasi selengkapnya, lihat ALTER TABLE. | Didukung | Didukung |
Impor data |
| Unggah Stream/Batch Data langsung terlihat setelah unggah stream. | Upsert |
Time travel | Mendukung pengkuerian snapshot historis berdasarkan titik waktu atau nomor versi untuk mereproduksi hasil atau melakukan analisis audit. Untuk informasi selengkapnya, lihat Perjalanan Waktu. | Didukung | Didukung |
Komputasi inkremental | Delta Live Materialized View (MV) dan Incremental Read. Untuk informasi selengkapnya, lihat Komputasi inkremental dan Kueri inkremental. | Didukung (Tampilan materialisasi inkremental sedang dalam adaptasi.) | Didukung |
Optimasi organisasi data | Secara otomatis memelihara file data inkremental, termasuk optimasi seperti penggabungan file kecil, COMPACTION multi-level, dan pengurutan data, sehingga penyimpanan dan komputasi data tetap stabil dan efisien. Untuk informasi selengkapnya, lihat Optimasi organisasi data Append Delta Table dan Optimasi organisasi data PK Delta Table. | Didukung Anda tidak perlu mengonfigurasi jumlah bucket. Bucketing Dinamis secara otomatis menyesuaikan diri dengan distribusi data. | Didukung |
Optimasi performa kueri | Statistik tingkat partisi dan tingkat file (seperti Min/Max), pemangkasan partisi, pemangkasan kolom, dan penurunan predikat. | Didukung | Didukung |
Keamanan dan kepatuhan | Enkripsi Penyimpanan / Penyembunyian Data Dinamis / Kontrol Akses Tingkat Baris, dll. | Didukung | Didukung |
Pemulihan bencana dan pencadangan | Pengenalan snapshot tabel (Pratinjau Undangan) / Backup lokal dalam mode Keranjang daur ulang / Pemulihan bencana antar-zona. | Didukung | Dukungan |
Biaya | Kompresi penyimpanan kolom AliORC dan penyimpanan bertingkat. | Didukung | Didukung |
Pengalaman pengguna
Pembaruan data real-time untuk layanan real-time
Tabel Delta mendukung penulisan dan pembaruan data real-time (upsert) melalui Stream Upload. Data langsung terlihat setelah ditulis. Untuk menyeimbangkan performa penulisan data real-time dengan performa kueri, MaxCompute menerapkan strategi penyimpanan bertingkat dan optimasi sebagai berikut:
Memastikan penulisan real-time: Data baru pertama kali ditulis dengan cepat ke bucket non-clustered tanpa pengurutan. Proses ini memastikan latensi rendah dan throughput tinggi untuk penulisan data.
Meningkatkan performa kueri SQL: Layanan Incremental Reclustering di latar belakang secara asinkron mengatur ulang dan mengoptimalkan data inkremental ke dalam bucket yang terurut dan terkluster. Saat Anda menjalankan kueri, mesin kueri dapat secara efisien melakukan pruning pada data dasar yang terurut dan hanya memindai sejumlah kecil data inkremental. Pendekatan ini menyeimbangkan kesegaran data dengan efisiensi kueri.
Pemrosesan dan analisis data inkremental yang efisien
Berdasarkan kemampuan baca-tulis data inkremental di tingkat dasar, MaxCompute menyediakan serangkaian fitur tingkat tinggi yang kaya untuk meningkatkan ketepatan waktu analitik data end-to-end. Anda dapat menggabungkan fitur-fitur canggih seperti komputasi inkremental dan Tampilan Materialisasi Dinamis (Delta Live MV) (Pratinjau Undangan) untuk membangun pipeline pemrosesan data real-time yang efisien dan mempercepat transformasi data menjadi insight bisnis.
Menyesuaikan pertumbuhan bisnis dan mengatasi batasan format tabel sebelumnya
Alokasi bucket dinamis: Append Delta Table mendukung alokasi bucket dinamis. Anda tidak perlu menentukan jumlah bucket dalam pernyataan Data Definition Language (DDL) atau memperkirakan volume data masa depan setiap partisi untuk menentukan jumlah bucket yang sesuai. Seiring penambahan data, layanan Dynamic Bucketing secara otomatis membagi bucket yang ada atau membuat bucket baru. Fitur ini secara dinamis menyesuaikan perubahan volume data bisnis dan mengatasi masalah seperti kesenjangan data dan fragmentasi akibat bucket yang terlalu besar atau terlalu kecil.
Evolusi Skema: Tabel Delta mendukung evolusi skema untuk memenuhi kebutuhan bisnis yang terus berkembang dalam menyesuaikan bidang data dan meningkatkan presisi data. Fitur ini mendukung penambahan, penghapusan, modifikasi, dan penggantian nama kolom, menyediakan kompatibilitas mundur penuh, serta mencegah penghapusan atau kehilangan data secara tidak sengaja.
Mengatasi keterbatasan tabel tradisional: Satu Tabel Delta mendukung operasi seperti INSERT INTO, UPDATE, DELETE, dan MERGE INTO, serta clustering dan pengurutan. Tabel partisi tradisional, tabel terkluster, dan Transaction Table tidak mendukung semua kemampuan ini secara bersamaan.
Mendukung komputasi multi-engine, termasuk MaxCompute SQL, MaxFrame, dan Spark on MaxCompute. Engine open-source seperti Flink, Spark, dan StarRocks juga dapat mengakses Tabel Delta melalui connector dan API penyimpanan terbuka.
Menyeimbangkan performa dan keandalan
Tabel Delta cocok untuk mengelola volume data besar, dari terabyte hingga petabyte. Bahkan dengan volume data yang sangat besar, operasi metadata tetap cepat. Kueri mendukung fitur seperti partition pruning, column pruning, dan predicate pushdown untuk menghindari pemindaian data yang tidak perlu.
Manajemen transaksi ACID: Tabel Delta menggunakan kontrol konkurensi optimistik untuk mendukung operasi konkuren dari beberapa penulis. Konflik penulisan dideteksi dan dicoba ulang untuk memastikan konsistensi data.
Keamanan dan kepatuhan: Tabel Delta memenuhi persyaratan keamanan dan kepatuhan data. Format ini mendukung enkripsi penyimpanan, daftar kontrol akses (ACL) tingkat tabel dan kolom, izin tingkat baris, serta penyembunyian data dinamis.
Backup dan rollback: Mekanisme backup dan rollback berbasis versi yang menggunakan mode Keranjang daur ulang memastikan bahwa jika terjadi korupsi data atau penghapusan tidak sengaja, Anda dapat dengan cepat mengembalikan tabel ke kondisi sehat sebelumnya. Hal ini mengurangi risiko operasi dan maintenance (O&M) serta manajemen.
Operasi SQL
DDL
Membuat Tabel Delta Append
-- Membuat Tabel Delta Append
CREATE TABLE <nama_tabel> (
<nama_kolom> <tipe_data> [NOT NULL] [DEFAULT <nilai_default>] [comment <komentar_kolom>], ...
)
[comment <komentar_tabel>]
[RANGE CLUSTERED BY (<nama_kolom> [, <nama_kolom>, ...]) ]
TBLPROPERTIES (
"table.format.version"="2"
["acid.data.retain.hours"="jam"...]
)
[LIFECYCLE <hari>];Tabel berikut menjelaskan parameter TBLPROPERTIES.
Parameter | Wajib | Deskripsi | Catatan |
"table.format.version"="2" | Ya | Mendeklarasikan format tabel sebagai Delta Table. | |
acid.data.retain.hours | Tidak | Nilai default adalah 24. Rentang nilai adalah | Rentang waktu dalam jam untuk menyimpan status data historis yang dapat dikueri menggunakan Time Travel.
|
acid.incremental.query.out.of.time.range.enabled | Tidak | Nilai default adalah | Jika diatur ke true, endTimestamp yang ditentukan dalam kueri inkremental dapat lebih baru daripada waktu commit terakhir tabel. Jika endTimestamp lebih baru daripada waktu saat ini, beberapa kueri dapat mengembalikan hasil berbeda karena data baru mungkin telah disisipkan. Anda dapat memodifikasi nilai parameter ini untuk suatu tabel. |
Membuat Tabel Delta PK
-- Membuat Tabel Delta PK
CREATE TABLE <nama_tabel> (
<nama_kolom> <tipe_data> [NOT NULL] [DEFAULT <nilai_default>] [comment <komentar_kolom>], ...
PRIMARY KEY (<nama_kolom_pk>[, <nama_kolom_pk2>, ...] )
)
[comment <komentar_tabel>]
TBLPROPERTIES (
"table.format.version"="2"
[, "write.bucket.num" = "N", "acid.data.retain.hours"="jam"...]
)
[LIFECYCLE <hari>];Parameter dijelaskan sebagai berikut:
PRIMARY KEY (PK): Wajib. Anda harus menentukan parameter ini saat membuat PK Delta Table. Kunci primer dapat terdiri dari satu atau beberapa kolom, dan kombinasi nilai dalam kolom-kolom tersebut harus unik dalam tabel. Sintaks mengikuti sintaks kunci primer SQL standar. Kolom kunci primer harus diatur sebagai NOT NULL dan tidak dapat dimodifikasi.
Setelah kunci primer ditetapkan, data dalam tabel dideduplikasi berdasarkan kolom kunci primer. Batasan unik berlaku dalam satu partisi atau seluruh tabel non-partisi.
Tabel berikut menjelaskan parameter TBLPROPERTIES.
Parameter | Wajib | Deskripsi | Catatan |
"table.format.version"="2" | Ya | Mendeklarasikan format tabel sebagai Delta Table. |
|
write.bucket.num | Tidak | Nilai default adalah 16. Rentang nilai adalah | Jumlah bucket untuk setiap partisi atau tabel non-partisi. Ini juga menunjukkan jumlah node konkuren untuk penulisan data. Anda dapat mengubah parameter ini untuk tabel partisi, dan perubahan berlaku untuk partisi baru secara default. Anda tidak dapat mengubah parameter ini untuk tabel non-partisi. Pertimbangkan saran berikut saat menggunakan parameter ini:
|
acid.data.retain.hours | Tidak | Nilai default adalah 24. Rentang nilai adalah | Rentang waktu dalam jam untuk menyimpan status data historis yang dapat dikueri menggunakan Time Travel.
|
acid.incremental.query.out.of.time.range.enabled | Tidak | Nilai default adalah | Jika diatur ke true, endTimestamp yang ditentukan dalam kueri inkremental dapat lebih lambat dari waktu commit terbaru tabel. Jika endTimestamp lebih lambat dari waktu saat ini, beberapa kueri dapat menghasilkan hasil berbeda karena data baru mungkin dimasukkan. Anda dapat memodifikasi nilai parameter ini untuk suatu tabel. |
acid.write.precombine.field | Tidak | Anda dapat menentukan nama salah satu kolom. | Jika nama kolom ditentukan, sistem mendeduplikasi data berdasarkan kolom kunci primer (PK) dan kolom yang ditentukan selama pemrosesan file untuk commit yang sama. Hal ini memastikan keunikan dan konsistensi data. Catatan Jika volume data dalam satu commit melebihi 128 MB, beberapa file akan dihasilkan. Parameter ini tidak berlaku untuk beberapa file. |
acid.partial.fields.update.enable | Tidak | Jika diatur ke | Atur parameter ini saat membuat tabel. Anda tidak dapat mengubahnya setelah tabel dibuat. |
Catatan
Item | Tabel Delta Append | Tabel Delta PK | Tabel terkluster |
Jumlah bucket | Anda tidak perlu menentukan write.bucket.num. Jumlah bucket berubah secara dinamis berdasarkan volume data aktual. | Anda harus menentukan jumlah bucket dalam pernyataan DDL. Nilai default adalah 16. | / |
Kebijakan organisasi data | RANGE CLUSTERED BY. CLUSTERED BY tidak didukung. Anda tidak perlu menentukan bidang SORT BY. Data dalam bucket secara default diurutkan berdasarkan bidang yang ditentukan dalam RANGE CLUSTERED BY. | Anda tidak dapat mengatur CLUSTERED BY. Secara default, kluster hash dibuat berdasarkan kunci primer. | CLUSTERED BY |
Siklus hidup | Harus lebih besar dari atau sama dengan siklus hidup kueri Time Travel. Artinya, | / | / |
Anda tidak dapat langsung mengonversi tabel standar yang sudah ada menjadi Tabel Delta.
PK Delta Table tidak mendukung evolusi skema untuk kolom kunci primer (PK).
Tabel Delta PK saat ini tidak mendukung tipe data JSON.
CREATE TABLE AS tidak didukung.
DML
Tabel Delta mendukung sintaks Data Manipulation Language (DML) seperti Menyisipkan atau menimpa data (INSERT INTO | INSERT OVERWRITE), Memperbarui atau menghapus data (UPDATE | DELETE), dan MERGE INTO.
DQL
Tabel Delta mendukung analisis kueri tujuan umum. Untuk informasi selengkapnya, lihat Operasi DQL (SELECT).
Impor data
Append Delta Table mendukung impor data menggunakan unggah data batch (Upload) dan unggah data stream (Stream Upload). Karena Append Delta Table tidak memiliki kunci primer, transmisi data tidak mendukung operasi Upsert atau Delete.
PK Delta Table mendukung penulisan data menggunakan API Tunnel Upsert/Delete. Jika kunci primer tidak ada, operasi Upsert akan menyisipkan baris baru. Jika kunci primer sudah ada, operasi Upsert akan memperbarui bidang non-kunci primer yang sesuai.
Optimasi organisasi data
Append Delta Table menggunakan struktur Range Clustering di tingkat dasar untuk organisasi data. Untuk informasi selengkapnya tentang optimasi ini, lihat Optimasi organisasi data Append Delta Table. Secara default, Row_ID digunakan sebagai kunci clustering, dan jumlah bucket dialokasikan secara dinamis seiring pertumbuhan volume data. Setelah Anda menentukan Cluster Key, pekerjaan clustering di latar belakang melakukan reclustering inkremental pada data untuk mempertahankan urutan keseluruhan.
Untuk informasi tentang struktur organisasi data PK Delta Table, lihat Optimasi organisasi data PK Delta Table. Tabel ini menggunakan struktur Hash Clustering di tingkat dasar untuk memungkinkan penulisan dan pembaruan data yang efisien dengan bucketing hash pada bidang kunci primer (PK).