Tabel Delta MaxCompute adalah format tabel berkinerja tinggi untuk set data analitik skala besar, tersedia dalam dua bentuk: Append Delta Tables (tanpa primary key) dan PK Delta Tables (dengan primary key).
Ikhtisar
Delta Table adalah format tabel berkinerja tinggi di Alibaba Cloud MaxCompute yang mendukung transaksi ACID, kueri inkremental, time travel, bucketing kluster dinamis, pembaruan data real-time, dan evolusi skema. Dengan kemampuan native data lakehouse dan komputasi near-real-time di MaxCompute, Anda dapat menggunakan SQL standar untuk membuat, memperbarui, dan mengkueri Delta Table tanpa perlu mengelola penyimpanan atau metadata dasar. MaxCompute secara otomatis memelihara dan mengoptimalkan tabel tersebut guna menyeimbangkan kemudahan penggunaan dan efisiensi biaya.
Fitur
|
Kategori |
Fitur |
Append Delta Table |
PK Delta Table |
|
DML Dasar |
Insert, Update, Delete, dan Merge Into. |
Didukung |
Didukung |
|
Transaksi ACID |
Read Committed/Snapshot Isolation. |
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. |
Didukung |
Didukung |
|
Impor data |
|
Unggah Stream/Batch Data langsung terlihat setelah unggahan stream. |
Upsert |
|
Time travel |
Kueri snapshot historis berdasarkan titik waktu atau nomor versi untuk reproduksi hasil atau analisis audit. |
Didukung |
Didukung |
|
Komputasi inkremental |
Delta Live Materialized View (MV) dan Incremental Read. |
Didukung (Dukungan materialized view inkremental sedang dalam pengembangan.) |
Didukung |
|
Optimasi organisasi data |
Secara otomatis memelihara file data inkremental melalui penggabungan file kecil, COMPACTION multi-level, dan pengurutan data. Optimasi organisasi data untuk Append Delta Tables dan Optimasi organisasi data untuk tabel PK Delta. |
Didukung Tidak perlu konfigurasi bucket. Dynamic Bucketing menyesuaikan diri secara otomatis 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 / Penyembunyian data dinamis / Kontrol akses tingkat baris. |
Didukung |
Didukung |
|
Pemulihan bencana dan backup |
Snapshot tabel / Backup lokal / Pemulihan bencana redundansi zona. |
Didukung |
Didukung |
|
Biaya |
Kompresi kolom AliORC dan penyimpanan bertingkat. |
Didukung |
Didukung |
Pengalaman pengguna
Pembaruan data real-time untuk layanan real-time
Delta Table mendukung penulisan real-time dan upsert melalui Stream Upload. Data langsung terlihat. MaxCompute menyeimbangkan latensi penulisan dengan performa kueri melalui strategi penyimpanan bertingkat:
-
Memastikan penulisan real-time: Data baru ditulis ke bucket non-clustered tanpa pengurutan, sehingga menjamin latensi rendah dan throughput tinggi.
-
Meningkatkan performa kueri SQL: Layanan Incremental Reclustering latar belakang secara asinkron mengatur ulang data inkremental ke dalam bucket yang diurutkan dan dikelompokkan. Mesin kueri melakukan pruning pada data dasar yang diurutkan dan hanya memindai sejumlah kecil data inkremental, sehingga menyeimbangkan kesegaran data dengan efisiensi.
Pemrosesan dan analisis data inkremental yang efisien
MaxCompute menyediakan fitur pemrosesan inkremental lanjutan. Gabungkan Komputasi inkremental dan Delta Live Materialized Views (preview) untuk membangun pipeline pemrosesan data real-time.
Beradaptasi dengan pertumbuhan bisnis dan mengatasi batasan format tabel sebelumnya
-
Alokasi bucket dinamis: Append Delta Tables mengalokasikan bucket secara dinamis tanpa memerlukan spesifikasi DDL. Seiring volume data bertambah, layanan Dynamic Bucketing secara otomatis membagi atau membuat bucket baru, beradaptasi dengan perubahan serta mencegah skew dan fragmentasi.
-
Evolusi skema: Delta Table mendukung penambahan, penghapusan, modifikasi, dan penggantian nama kolom dengan kompatibilitas mundur penuh untuk mencegah kehilangan data secara tidak sengaja.
-
Kemampuan tabel terpadu: Satu Delta Table mendukung INSERT INTO, UPDATE, DELETE, dan MERGE INTO dengan penyimpanan clustering terurut — menggabungkan kemampuan yang sebelumnya memerlukan tabel partisi, clustered, dan transaksional terpisah.
-
Dukungan multi-engine: Akses Delta Table dari MaxCompute SQL, MaxFrame, Spark on MaxCompute, dan engine open-source (Flink, Spark, StarRocks) melalui Spark Connector dan API penyimpanan terbuka.
Menyeimbangkan performa dan keandalan
-
Delta Table menangani volume data dari terabyte hingga petabyte dengan operasi metadata cepat. Kueri memanfaatkan partition pruning, column pruning, dan predicate pushdown untuk meminimalkan pemindaian data.
-
Transaksi ACID: Delta Table menggunakan kontrol konkurensi optimistik untuk menangani konkurensi multi-penulis. Konflik penulisan terdeteksi dan dicoba ulang secara otomatis.
-
Keamanan dan kepatuhan: Delta Table mendukung enkripsi penyimpanan, ACL tingkat tabel dan kolom, izin tingkat baris, serta penyembunyian data dinamis.
-
Backup dan rollback: Mekanisme recycle bin berbasis versi memungkinkan Anda mengembalikan tabel ke kondisi sehat sebelumnya setelah terjadi korupsi data atau penghapusan tidak disengaja.
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>];
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 menentukan seberapa jauh ke belakang 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 mengembalikan hasil 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:
-
PRIMARY KEY (PK): Wajib untuk PK Delta Table. Mendukung satu atau beberapa kolom dengan kombinasi nilai unik. Mengikuti sintaks primary key SQL standar. Kolom primary key harus NOT NULL dan tidak dapat dimodifikasi.
Setelah primary key ditetapkan, data dideduplikasi berdasarkan kolom tersebut. Batasan unik berlaku dalam satu partisi atau seluruh tabel non-partisi.
-
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 per partisi atau tabel non-partisi, yang juga menentukan konkurensi penulisan. Dapat dimodifikasi untuk tabel partisi (berlaku untuk partisi baru); tidak dapat dimodifikasi untuk tabel non-partisi. Panduan:
|
|
acid.data.retain.hours |
Tidak |
Nilai default adalah 24. Rentang nilai adalah |
Rentang waktu (dalam jam) selama 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 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. 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 mengubahnya setelah tabel dibuat. |
Catatan
|
Item |
Append Delta Table |
PK Delta Table |
Clustered Table |
|
Jumlah bucket |
Tidak perlu menentukan write.bucket.num. Bucket diskalakan secara dinamis sesuai volume data. |
Tentukan jumlah bucket dalam DDL. Default: 16. |
/ |
|
Kebijakan organisasi data |
Hanya RANGE CLUSTERED BY (CLUSTERED BY tidak didukung). Tidak perlu SORT BY — data diurutkan berdasarkan field RANGE CLUSTERED BY secara default. |
CLUSTERED BY tidak diizinkan. Kluster hash dibuat otomatis berdasarkan primary key. |
CLUSTERED BY |
|
Lifecycle |
Harus memenuhi |
/ |
/ |
-
Anda tidak dapat mengonversi langsung 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 operasi DML: Insert atau overwrite data (INSERT INTO | INSERT OVERWRITE), UPDATE | DELETE, dan MERGE INTO.
DQL
Delta Table mendukung analisis kueri tujuan umum melalui operasi DQL (SELECT).
Impor data
-
Append Delta Table mendukung unggah batch dan unggah stream. Tanpa primary key, operasi Upsert dan Delete tidak didukung.
-
PK Delta Table mendukung API Tunnel Upsert/Delete. Upsert menyisipkan baris jika primary key tidak ada, atau memperbarui field non-primary-key jika sudah ada.
Optimasi organisasi data
-
Append Delta Table menggunakan Range Clustering untuk organisasi data (Optimasi organisasi data untuk Append Delta Tables). Secara default, Row_ID adalah kunci clustering dan bucket diskalakan secara dinamis. Setelah Anda menentukan Cluster Key, incremental reclustering latar belakang mempertahankan urutan data.
-
PK Delta Table menggunakan Hash Clustering pada primary key untuk penulisan dan pembaruan yang efisien (Optimasi organisasi data untuk tabel PK Delta).