All Products
Search
Document Center

MaxCompute:Tipe data Blob dan penyimpanan multimodal

Last Updated:May 09, 2026

Ikhtisar

Tipe data Blob (Binary Large Object) di MaxCompute memungkinkan Anda menyimpan objek biner besar yang tidak terstruktur—seperti gambar, audio, video, dan dokumen—secara langsung dalam tabel. Dengan tipe Blob, Anda dapat mengonsolidasikan file mentah, metadata, dan data anotasi untuk data multimodal dalam satu tabel MaxCompute. Hal ini memungkinkan penggunaan SQL untuk kueri dan pemeliharaan terpadu serta pemrosesan batch dengan MaxFrame dan fungsi user-defined (UDF) berbasis SQL.

Kasus penggunaan

  • Manajemen set data pelatihan AI: Simpan file gambar, audio, atau video beserta label dan anotasi terkait dalam satu tabel, lalu gunakan SQL untuk memfilter sampel data tertentu.

  • Pipeline pemrosesan data multimodal: Satukan penyimpanan hasil antara dan akhir dari pipeline multi-langkah, seperti ekstraksi frame video, transkripsi audio-ke-teks, dan pelabelan konten.

  • Lapisan cache pemrosesan multimodal: Berfungsi sebagai lapisan caching untuk sumber data seperti object storage guna meningkatkan throughput komputasi paralel skala besar dengan MaxFrame dan SQL, mengatasi batasan QPS yang terkait dengan permintaan batch untuk file kecil.

  • Ingesti data tidak terstruktur: Impor file dari berbagai sistem penyimpanan eksternal ke MaxCompute dan perkaya dengan metadata untuk membangun pustaka aset tidak terstruktur tingkat perusahaan, dengan manfaat jaminan transaksi dan kontrol akses terpadu.

Spesifikasi

Fitur

Deskripsi

Batas ukuran

Hingga 5 GB untuk setiap objek Blob dalam satu sel.

Format penyimpanan

Format biner

Format tabel yang didukung untuk Blob

Tambahkan Delta Table. Kolom blob mewarisi fitur format tabel, termasuk transaksi ACID, tiering penyimpanan, dan Snapshot.

Layanan optimasi Blob

  • Kompaksi otomatis untuk banyak file Blob kecil.

  • Kompresi otomatis untuk tipe MIME berbasis teks.

Batasan

  • Anda harus mengaktifkan tipe data MaxCompute 2.0: SET odps.sql.type.system.odps2=true;.

  • Tipe Blob tidak dapat disarangkan dalam tipe kompleks seperti ARRAY, MAP, atau STRUCT.

  • Kolom Blob tidak dapat digunakan sebagai primary key atau partition key.

  • Kolom Blob tidak dapat digunakan dalam klausa ORDER BY, GROUP BY, atau JOIN ON.

Penyimpanan multimodal terpadu

Gambar berikut membandingkan arsitektur penyimpanan terdistribusi tradisional dengan arsitektur penyimpanan multimodal terpadu di MaxCompute.

  • Di sebelah kiri, pendekatan tradisional menyimpan file mentah di object storage, sedangkan metadata dan anotasinya tersebar di berbagai gudang data dan data lake. Kueri dan pemrosesan data ini memerlukan koordinasi lintas beberapa sistem.

  • Di sebelah kanan, pendekatan MaxCompute menggunakan tipe kolom Blob untuk menyimpan file biner seperti gambar, audio, dan video bersama metadata terstruktur dalam satu tabel. Hal ini memungkinkan kueri SQL, pemrosesan batch MaxFrame, dan impor data melalui SDK.

image.svg

MaxCompute menyediakan dukungan native untuk tipe kolom Blob, memungkinkan Anda menyimpan semua data—termasuk file mentah, metadata, dan anotasi—dalam satu tabel:

-- Contoh tabel set data multimodal
CREATE TABLE multimodal_dataset (
    id          BIGINT NOT NULL,
    image       BLOB,                       -- Biner gambar mentah
    label       STRING,                     -- Label klasifikasi
    bbox        STRING,                     -- Kotak pembatas anotasi (JSON)
    resolution  STRING,                     -- Metadata resolusi
    created_at  DATETIME                    -- Waktu ingesti
) TBLPROPERTIES("table.format.version"="2");

Pendekatan multimodal tradisional vs. MaxCompute

Arsitektur tradisional mendistribusikan data multimodal—seperti file mentah, metadata, dan anotasi—di berbagai sistem seperti object storage, gudang data, dan data lake. MaxCompute mengatasi tantangan ini dengan menggunakan tipe kolom Blob untuk menyatukan semua data ke dalam satu tabel:

Pendekatan tradisional

Solusi MaxCompute

Biaya maintenance tinggi: Arsitektur multi-engine menyebarkan data, sehingga sulit dikelola secara terpadu.

Penyimpanan dan manajemen terpadu: File mentah, metadata, dan anotasi disimpan dalam satu tabel, menghilangkan kebutuhan untuk memelihara beberapa sistem.

Latensi tinggi untuk kueri lintas engine: Memfilter gambar berdasarkan label memerlukan beberapa langkah, seperti menanyakan metadata ke database sebelum mengambil file dari object storage.

Filtering langsung dengan SQL: Kueri data berdasarkan kondisi seperti label atau timestamp tanpa perlu akses multi-hop lintas sistem.

Tidak adanya jaminan ACID terpadu: Konsistensi data, izin akses, dan alur data tidak dapat dikelola secara terpusat.

Transaksi ACID penuh dan kontrol akses terpadu: Setiap operasi tulis bersifat atomik dan konsisten, serta semua data dikelola oleh sistem izin MaxCompute.

Pipeline pemrosesan terfragmentasi: Alur kerja multimodal khas (ekstraksi audio dari video, transkripsi, pemisahan frame, pelabelan konten, dan ekstraksi metadata) mencakup beberapa sistem, menyebabkan perpindahan data yang sering.

Pipeline pemrosesan terpadu: Hasil antara dan akhir dari pipeline multi-langkah dipusatkan dalam satu tabel, menghilangkan perpindahan data lintas sistem.

Model penyimpanan dan manfaat performa

Model penyimpanan

MaxCompute Blob menggunakan model penyimpanan referensi-entitas terpisah, yang memisahkan kolom data terstruktur dari kolom objek besar Blob ke file fisik berbeda. Seperti ditunjukkan pada gambar berikut, arsitektur ini memiliki tiga lapisan:

  • Lapisan akses menyediakan berbagai metode akses, termasuk SQL, MaxFrame, odpscmd, SDK, dan Storage API.

  • Lapisan layanan menangani kompaksi, routing referensi Blob, manajemen transaksi ACID, tiering penyimpanan, dan backup.

  • Lapisan penyimpanan membagi data menjadi:

    • Data File (file data terstruktur): Menyimpan data kolom non-Blob (seperti id, label, dan metadata) serta pointer referensi (Reference) ke kolom Blob. File-file ini menggunakan format penyimpanan kolom standar yang mendukung penurunan predikat dan pemangkasan kolom secara efisien.

    • Blob File (file objek besar): Menyimpan konten biner mentah objek Blob, lengkap dengan checksum data dan informasi indeks. File penyimpanan secara dinamis dibagi atau digabung berdasarkan ukuran setiap objek Blob.

image

Saat menulis data, sistem mengunggah konten biner ke Blob File dan menulis pointer referensi ke Data File terstruktur. Saat membaca data, sistem pertama-tama mengambil pointer referensi dari kolom terstruktur, lalu memuat konten biner dari Blob File sesuai kebutuhan. Pengunggahan Blob dan penulisan referensi diselesaikan secara atomik dalam satu session commit, dan MaxCompute mengelola operasi baca/tulis sebagai satu transaksi untuk menjamin atomicity.

Proses ini transparan bagi Anda dan tidak memerlukan penanganan khusus.

Manfaat performa

  • Penggabungan dan kompresi file kecil

    • Penyimpanan Blob secara otomatis menggabungkan banyak objek kecil (seperti gambar, cuplikan HTML, dan log sesi JSON) menjadi Blob File yang lebih besar, mendukung operasi baca/tulis batch. Hal ini mengatasi batasan QPS yang terkait dengan permintaan sejumlah besar file kecil.

    • Objek berbasis teks dikompresi secara otomatis saat ditulis dan didekompresi saat dibaca. Misalnya, untuk cuplikan HTML dan teks JSON, hal ini dapat mengurangi ruang penyimpanan hingga rata-rata 50%, menurunkan biaya penyimpanan.

  • Filtering efisien pada metadata tanpa memindai objek file besar

    Saat memfilter data berdasarkan kolom metadata atau label (misalnya, mencari sampel dengan label tertentu), menyimpan objek sebagai tipe Blob—bukan sebagai tipe STRING atau BINARY—dapat meningkatkan performa end-to-end rata-rata hingga dua kali lipat.

    Sebagai contoh, pertimbangkan set data 1 juta gambar dengan ukuran rata-rata 1,4 MB. Tabel berikut membandingkan overhead kueri saat menyimpan gambar sebagai tipe BINARY versus tipe Blob:

    Metode penyimpanan

    Data yang dipindai

    Gambar disimpan dalam kolom BINARY

    Sekitar 1.400 GB (pemindaian tabel penuh)

    Gambar disimpan dalam kolom BLOB

    Sekitar 30 GB (hanya Data File)

    Saat menjalankan kueri filter label berikut, tabel dengan tipe BINARY melakukan pemindaian tabel penuh sebesar 1.400 GB. Sebaliknya, tabel dengan tipe Blob hanya memindai 30 GB data, mengurangi volume hingga 45 kali lipat.

    -- Gambar disimpan sebagai tipe BINARY
    SELECT id, image FROM multimodal_dataset_binary Where label = "cat";
    -- Gambar disimpan sebagai tipe Blob
    SELECT id, read_blob(image) FROM multimodal_dataset_blob Where label = "cat";

Impor dan ekspor data

SDK

Gunakan metode ini untuk pembacaan dan penulisan batch throughput tinggi untuk data skala besar. Anda harus menggunakan MaxCompute Java SDK versi 0.57.1-public atau yang lebih baru.

Untuk objek Blob berukuran kurang dari 1 MB, gunakan antarmuka upload batch. SDK secara otomatis mengelompokkan objek menjadi batch berukuran 64 MB untuk diunggah.

<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-storage-api</artifactId>
    <version>0.57.1-public</version>
</dependency>

Object table

Gunakan metode ini untuk mengimpor banyak file tidak terstruktur yang sudah ada (seperti gambar, audio, video, dan dokumen) dari OSS ke tabel MaxCompute dengan kolom Blob. Anda dapat membuat Object Table untuk mengakses objek dan metadata di bucket OSS, lalu memasukkannya secara massal ke tabel multimodal MaxCompute. Proses ini tidak memerlukan staging.

Contoh:

-- Langkah 1: Buat Object Table untuk mengaitkan dengan data OSS
SET odps.namespace.schema=true;
SET odps.sql.type.system.odps2 = true;
CREATE OBJECT TABLE oss_images
LOCATION 'oss://<accessKeyId>:<accessKeySecret>@<endpoint>/<bucket>/<path>/';

-- Segarkan metadata
ALTER TABLE oss_images REFRESH METADATA;

-- Langkah 2: Buat tabel multimodal yang berisi kolom Blob
CREATE TABLE ods_dataset_images (
  key VARCHAR(2048) COMMENT 'Object key',
  size BIGINT COMMENT 'Object size',
  type VARCHAR(32) COMMENT 'Object type',
  last_modified TIMESTAMP_NTZ COMMENT 'Last modified time',
  storage_class VARCHAR(32) COMMENT 'Storage class',
  etag VARCHAR(64) COMMENT 'ETag information',
  restore_info VARCHAR(256) COMMENT 'Restore information',
  owner_id BIGINT COMMENT 'Owner ID',
  owner_display_name VARCHAR(256) COMMENT 'Owner display name',
  data_file BLOB COMMENT 'Data file'
) COMMENT 'Multimodal table'
tblproperties ('table.format.version'='2') ;

-- Langkah 3: Impor data secara massal ke tabel Blob
INSERT OVERWRITE ods_dataset_images
SELECT key, size, type, last_modified, storage_class, etag, restore_info, owner_id, owner_display_name,
  to_blob(get_data_from_oss('<project_name>.default.oss_images', key)) AS data_file
  FROM oss_images;

Sintaksis SQL

DDL

Anda dapat mendefinisikan beberapa kolom Blob dalam pernyataan CREATE TABLE.

CREATE TABLE video_dataset (
    id        BIGINT,
    video     BLOB,
    thumbnail BLOB,
    title     STRING
) TBLPROPERTIES('table.format.version'='2');

Fungsi Blob

to_blob()

Fungsi to_blob() mengonversi data string atau biner menjadi objek Blob.

Fungsi

Deskripsi

to_blob(STRING value)

Mengonversi seluruh string menjadi Blob.

to_blob(BINARY value)

Mengonversi seluruh nilai biner menjadi Blob.

to_blob(STRING value, BIGINT offset)

Membuat Blob dari substring yang dimulai pada offset yang ditentukan.

to_blob(BINARY value, BIGINT offset)

Membuat Blob dari substring biner yang dimulai pada offset yang ditentukan.

to_blob(STRING value, BIGINT offset, BIGINT length)

Membuat Blob dari substring dengan panjang tertentu, dimulai pada offset yang ditentukan.

to_blob(BINARY value, BIGINT offset, BIGINT length)

Membuat Blob dari substring biner dengan panjang tertentu, dimulai pada byte offset yang ditentukan.

-- Buat Blob dari string
SELECT to_blob('hello world'); -- Mengembalikan: Blob{reference=CAEQAxqqAgEAAAAJA...}

-- Buat Blob dari data biner heksadesimal
SELECT to_blob(X'89504E47');   -- Header file PNG

-- Substring dengan offset
SELECT to_blob('hello world', 6);           -- Hasil: 'world'
SELECT to_blob('hello world', 0, 5);        -- Hasil: 'hello'

read_blob()

Fungsi read_blob() mengembalikan konten objek Blob sebagai STRING atau BINARY.

Fungsi

Deskripsi

read_blob(BLOB value)

Membaca seluruh konten Blob sebagai STRING.

read_blob(BLOB value, BIGINT offset)

Membaca konten mulai dari offset yang ditentukan.

read_blob(BLOB value, BIGINT offset, BIGINT length)

Membaca konten dengan panjang tertentu mulai dari offset yang ditentukan.

-- Baca konten Blob
SELECT id, read_blob(image) FROM image_dataset WHERE label = 'cat' LIMIT 10;

-- Baca konten sebagian (misalnya, untuk memeriksa header file)
SELECT id, read_blob(content, 0, 4) AS file_header FROM media_library;

-- Penggunaan bersarang
SELECT read_blob(to_blob('hello world'));  -- Mengembalikan 'hello world'

length()

-- Mendapatkan panjang Blob dalam byte
SELECT id, length(read_blob(image)) AS image_size FROM image_dataset;

Quick start

-- Buat tabel dengan kolom Blob
CREATE TABLE blob_table (col1 BLOB)
TBLPROPERTIES (
  "table.format.version"="2" 
);

-- Tulis data
INSERT INTO blob_table VALUES (to_blob("hello world"));

-- Baca data
SELECT read_blob(col1) FROM blob_table;