Delta Table 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 primary key dan PK Delta Table untuk tabel dengan primary key. Topik ini menjelaskan fitur dasar dan operasi Delta Table.
Ikhtisar
Delta Table 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 Delta Table 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 |
PK Delta Table |
|
DML Dasar |
Insert, Update, Delete, dan Merge Into. |
Didukung |
Dukungan |
|
Transaksi ACID |
Read Committed/Snapshot Isolation. Untuk informasi selengkapnya, lihat Manajemen transaksi ACID. |
Didukung |
Didukung |
|
Primary key |
Menentukan primary key. |
Tidak didukung |
Mendukung pembaruan kolom parsial |
|
Evolusi skema |
Menambah, 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 Time Travel. |
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 Mengoptimalkan organisasi data untuk Append Delta Table dan Optimasi organisasi data untuk tabel PK Delta. |
Didukung Anda tidak perlu mengonfigurasi jumlah bucket. Dynamic Bucketing secara otomatis menyesuaikan diri dengan distribusi data. |
Didukung |
|
Optimasi performa kueri |
Statistik tingkat partisi dan tingkat file (seperti Min/Max), partition pruning, column pruning, dan predicate pushdown. |
Didukung |
Didukung |
|
Keamanan dan kepatuhan |
Enkripsi penyimpanan / Dynamic data masking / Kontrol akses tingkat baris. |
Didukung |
Didukung |
|
Pemulihan bencana dan backup |
Snapshot tabel / Backup dan restorasi / Pemulihan bencana zonal. |
Dukungan |
Dukungan |
|
Biaya |
Kompresi penyimpanan kolom AliORC dan penyimpanan bertingkat. |
Didukung |
Dukungan |
Pengalaman pengguna
Pembaruan data real-time untuk layanan real-time
Delta Table 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 dan optimasi bertingkat:
-
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 mengorganisasi ulang dan mengoptimalkan data inkremental ke dalam bucket yang diurutkan dan dikelompokkan. Saat Anda menjalankan kueri, mesin kueri dapat secara efisien memangkas data dasar yang telah diurutkan 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 lapisan dasarnya, MaxCompute menyediakan serangkaian fitur tingkat lanjut untuk meningkatkan ketepatan waktu analitik data end-to-end. Anda dapat menggabungkan fitur-fitur canggih seperti Komputasi inkremental dan Delta Live Materialized View (Delta Live MV) (Pratinjau Undangan) guna membangun pipeline pemrosesan data real-time yang efisien dan mempercepat transformasi data menjadi wawasan 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 untuk setiap partisi guna 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 diri dengan perubahan volume data bisnis dan mengatasi masalah seperti kesenjangan data dan fragmentasi akibat bucket yang terlalu besar atau terlalu kecil.
-
Evolusi Skema: Delta Table 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 yang tidak disengaja.
-
Mengatasi keterbatasan tabel tradisional: Satu Delta Table mendukung operasi seperti INSERT INTO, UPDATE, DELETE, dan MERGE INTO, serta penyimpanan clustered dan terurut dalam satu tabel. Tabel partisi tradisional, tabel clustered, dan Transaction Table tidak dapat 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 Delta Table melalui Spark Connector dan API penyimpanan terbuka.
Menyeimbangkan performa dan keandalan
-
Delta Table cocok untuk mengelola volume data besar, mulai 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: Delta Table menggunakan optimistic concurrency control untuk mendukung operasi konkuren dari beberapa penulis. Konflik penulisan terdeteksi dan dicoba ulang untuk memastikan konsistensi data.
-
Keamanan dan kepatuhan: Delta Table memenuhi persyaratan keamanan dan kepatuhan data. Format ini mendukung enkripsi penyimpanan, daftar kontrol akses (ACL) tingkat tabel dan kolom, izin tingkat baris, serta dynamic data masking.
-
Backup dan rollback: Mekanisme backup dan rollback berbasis versi, yang menggunakan mode recycle bin, memastikan bahwa jika terjadi korupsi data atau penghapusan tidak disengaja, Anda dapat segera mengembalikan tabel ke kondisi sehat sebelumnya. Hal ini mengurangi risiko operasi dan pemeliharaan (O&M) serta manajemen.
Operasi SQL
DDL
Buat Tabel Delta Append
-- Membuat Append Delta Table
CREATE TABLE <table_name> (
<col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...
)
[comment <table_comment>]
[RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) ]
TBLPROPERTIES (
"table.format.version"="2"
["acid.data.retain.hours"="hours"...]
)
[LIFECYCLE <days>];
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 yang menyatakan berapa lama status data historis 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 terbaru tabel. Jika endTimestamp lebih baru daripada waktu saat ini, beberapa kueri dapat menghasilkan respons yang berbeda karena data baru mungkin telah disisipkan. Anda dapat mengubah nilai parameter ini untuk suatu tabel. |
Membuat PK Delta Table
-- Membuat PK Delta Table
CREATE TABLE <table_name> (
<col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...
PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )
)
[comment <table_comment>]
TBLPROPERTIES (
"table.format.version"="2"
[, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...]
)
[LIFECYCLE <days>];
Parameter dijelaskan sebagai berikut:
-
PRIMARY KEY (PK): Wajib. Anda harus menentukan parameter ini saat membuat PK Delta Table. Primary key dapat terdiri dari satu atau beberapa kolom, dan kombinasi nilai dalam kolom-kolom tersebut harus unik dalam tabel. Sintaks mengikuti sintaks primary key SQL standar. Kolom primary key harus diatur sebagai NOT NULL dan tidak dapat dimodifikasi.
Setelah Anda menetapkan primary key, data dalam tabel dideduplikasi berdasarkan kolom primary key. Kendala unik berlaku dalam satu partisi atau untuk 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 untuk tabel non-partisi. Ini juga menunjukkan jumlah node konkuren untuk penulisan data. Anda dapat memodifikasi parameter ini untuk tabel partisi, dan perubahan berlaku untuk partisi baru secara default. Anda tidak dapat memodifikasi 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 yang menyatakan berapa lama status data historis 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 terbaru tabel. Jika endTimestamp lebih baru daripada waktu saat ini, beberapa kueri mungkin mengembalikan hasil yang berbeda karena data baru mungkin telah disisipkan. Anda dapat mengubah nilai parameter ini untuk suatu tabel. |
|
acid.write.precombine.field |
Tidak |
Anda dapat menentukan nama satu kolom. |
Jika nama kolom ditentukan, sistem mendeduplikasi data berdasarkan kolom primary key (PK) dan kolom yang ditentukan selama pemrosesan file untuk commit yang sama. Hal ini memastikan keunikan dan konsistensi data. Catatan
Jika volume data dari 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 |
Tetapkan parameter ini saat membuat tabel. Anda tidak dapat memodifikasinya setelah tabel dibuat. |
Catatan
|
Item |
Append Delta Table |
PK Delta Table |
Clustered Table |
|
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, cluster hash dibuat berdasarkan primary key. |
CLUSTERED BY |
|
Lifecycle |
Harus lebih besar dari atau sama dengan lifecycle kueri Time Travel. Artinya, |
/ |
/ |
-
Anda tidak dapat langsung mengonversi tabel standar yang sudah ada menjadi Delta Table.
-
PK Delta Table tidak mendukung evolusi skema untuk kolom primary key (PK).
-
PK Delta Table saat ini tidak mendukung tipe data JSON.
-
CREATE TABLE AS tidak didukung.
DML
Delta Table mendukung sintaks Data Manipulation Language (DML) seperti Menyisipkan atau menimpa data (INSERT INTO | INSERT OVERWRITE), UPDATE | DELETE, dan MERGE INTO.
DQL
Delta Table mendukung analisis kueri tujuan umum. Untuk informasi selengkapnya, lihat Operasi DQL (SELECT).
Impor data
-
Karena Append Delta Table tidak memiliki primary key, format ini tidak mendukung operasi
upsertataudeleteselama impor data. Format ini mendukung impor data menggunakan unggahan data batch (Upload) dan unggahan data stream (Stream Upload). -
PK Delta Table mendukung penulisan data menggunakan API Tunnel Upsert/Delete. Jika primary key tidak ada, operasi
upsertakan menyisipkan baris baru. Jika sudah ada, operasiupsertakan memperbarui bidang non-primary key.
Optimasi organisasi data
-
Append Delta Table menggunakan struktur Range Clustering di lapisan dasar untuk organisasi data. Untuk informasi selengkapnya tentang optimasi ini, lihat Mengoptimalkan organisasi data untuk 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 untuk tabel PK Delta. Tabel ini menggunakan struktur Hash Clustering di lapisan dasar untuk memungkinkan penulisan dan pembaruan data yang efisien dengan bucketing hash pada bidang primary key (PK).