全部产品
Search
文档中心

MaxCompute:Definisi tabel objek

更新时间:Nov 10, 2025

MaxCompute menyediakan fitur tabel objek yang memungkinkan mesin komputasi gudang data mengakses data tidak terstruktur beserta metadatanya di dalam data lake. Topik ini menjelaskan sintaks perintah untuk tabel objek dan memberikan contoh penggunaannya.

Informasi latar belakang

Dalam berbagai tahap alur kerja AI, pengembang gudang data yang memahami data dan bisnis perlu memanfaatkan daya komputasi skala besar berbiaya rendah dari platform data besar untuk pra-pemrosesan data bagi model besar atau pemrosesan data tidak terstruktur. Proses komputasi ini serta hasilnya berinteraksi dengan data baik di gudang data maupun di data lake.

Penggunaan SQL untuk memproses data tidak terstruktur menghadirkan tantangan berikut:

  • Mesin SQL data besar tidak mengenali ukuran objek saat membaca file dari Object Storage Service (OSS). Hal ini menyulitkan optimasi rencana eksekusi, pengendalian konkurensi, atau penentuan jumlah tugas konkuren yang sesuai secara otomatis. Selain itu, karena kondisi penyaring tidak dapat didorong ke bawah secara efektif, daya komputasi tidak dimanfaatkan secara optimal dalam kasus kesenjangan data.

  • Membaca metadata dari OSS tidak efisien karena setiap kueri memerlukan akses jarak jauh ke layanan penyimpanan, sehingga mengakibatkan latensi tinggi.

  • Daftar file dari OSS hanya dapat diambil secara serial dalam satu proses di dalam user-defined table-valued function (UDTF), yang menyebabkan kinerja pembacaan data yang buruk.

  • Anda harus mengimplementasikan logika integrasi izin di dalam user-defined function (UDF) serta logika konektivitas jaringan antara UDF dan layanan penyimpanan.

  • UDF tidak cukup kuat untuk memproses data tidak terstruktur. Gudang data tradisional kurang memiliki fitur unggah gambar kustom yang fleksibel dan aman serta lingkungan runtime yang aman untuk UDF. Selain itu, panggilan jarak jauh ke layanan komputasi terdistribusi harus dikelola secara konkuren.

Deskripsi fitur

MaxCompute menyediakan fitur tabel objek yang memungkinkan mesin komputasi gudang data mengakses data tidak terstruktur beserta metadatanya di dalam data lake. Fitur ini memiliki kemampuan berikut:

  • Memungkinkan mesin membaca metadata objek OSS dalam format tabel.

  • Menyimpan cache berbagai metadata objek OSS secara versi. Mesin SQL kemudian dapat menggunakan metadata ini untuk mengoptimalkan kueri, termasuk penyaringan data dan penurunan kondisi.

  • Membaca konten file data tidak terstruktur menggunakan fungsi dokumen bawaan.

  • Mesin SQL MaxCompute melakukan pemisahan konkuren berdasarkan metadata tabel objek dan memulai komputasi terdistribusi skala besar untuk meningkatkan efisiensi pembacaan dan pemrosesan data.

  • Memungkinkan pengguna mengunggah gambar kustom untuk membuat UDF dan memproses data tidak terstruktur yang dibaca oleh mesin.

  • Memungkinkan mesin memproses data tidak terstruktur, menghasilkan data terstruktur, dan menuliskannya ke tabel internal maupun tabel eksternal di gudang data. Fitur ini juga mendukung pembuatan hasil tidak terstruktur dan menuliskannya kembali ke OSS melalui tabel objek.

  • Mendukung mesin Maxframe dari ekosistem Python.

Batasan

  • Proyek MaxCompute harus mendukung fitur skema. Untuk informasi selengkapnya, lihat Mengaktifkan fitur skema.

  • MaxCompute harus mendukung sistem tipe data 2.0.

  • Tabel objek tidak mendukung partisi.

Penagihan

  • Tabel objek merupakan kumpulan metadata objek dari OSS. Oleh karena itu, biaya penyimpanan dikenakan untuk metadata yang disegarkan dan disimpan di tabel objek. Untuk informasi selengkapnya, lihat Biaya penyimpanan. Karena objek di OSS tidak disimpan di MaxCompute, MaxCompute tidak membebankan biaya penyimpanan untuk objek tersebut. OSS membebankan biaya untuk penyimpanan dan akses data. Untuk informasi selengkapnya, lihat Biaya penyimpanan OSS.

  • Dalam tugas yang menyegarkan metadata OSS, inputsize setiap file yang dipindai adalah nilai yang terkait dengan metadata, bukan ukuran sebenarnya dari file tersebut. Oleh karena itu, total biaya tugas penyegaran ditentukan oleh jumlah file, bukan ukuran sebenarnya dari file yang bersangkutan di OSS. Untuk informasi selengkapnya, lihat Penagihan untuk tabel eksternal SQL.

  • Biaya komputasi timbul ketika Anda menggunakan tabel objek dan metadatanya untuk menganalisis, mengekstrak, dan memproses data tidak terstruktur dari OSS.

    • Dalam mode bayar sesuai penggunaan, analisis metadata tabel objek ditagih sebagai tabel standar. Untuk informasi selengkapnya, lihat Penagihan SQL Standar. Namun, pemrosesan konten data tidak terstruktur di OSS ditagih sebagai tabel eksternal. Untuk informasi selengkapnya, lihat Penagihan SQL untuk tabel eksternal.

    • Dalam mode langganan, sumber daya langganan digunakan. Untuk informasi selengkapnya, lihat Biaya komputasi (Langganan).

Membuat tabel objek

Sintaks

CREATE OBJECT TABLE [IF NOT EXISTS] <objecttable_name> 
WITH SERDEPROPERTIES ('<key>' = '<value>') 
LOCATION '<location>' 
[TBLPROPERTIES ('<key>' = '<value>')] 
[COMMENT '<comment>'] 
;
Catatan
  • Tabel objek harus digunakan dalam proyek internal yang mendukung mode skema. Sakelar sintaks skema juga harus diaktifkan.

  • Anda tidak perlu mendefinisikan kolom untuk tabel objek. Sistem menyediakan kolom metadata.

Parameter

Parameter

Wajib

Deskripsi

objecttable_name

Parameter ini wajib.

Nama tabel.

SERDEPROPERTIES ('<key>'='<value>')

Wajib.

Menentukan peran RAM untuk autentikasi. Jika Anda tidak menentukan parameter ini, peran RAM bernama AliyunODPSDefaultRole dari akun Alibaba Cloud saat ini digunakan untuk mengakses OSS. Contoh: 'odps.properties.rolearn'='acs:ram::uid:role/aliyunodpsdefaultrole'. Sebelum menggunakan peran tersebut, pastikan Anda telah menyelesaikan otorisasi satu klik untuk AliyunODPSDefaultRole. Ini memberikan akses langsung proyek MaxCompute ke sumber daya OSS dari akun Alibaba Cloud saat ini menggunakan token Security Token Service (STS).

Catatan

Anda hanya dapat melakukan otorisasi satu klik jika ProjectOwner proyek MaxCompute adalah akun Alibaba Cloud.

location

Parameter ini wajib.

Jalur bucket OSS yang dipetakan oleh tabel objek. Tabel objek mengekstrak metadata objek di direktori yang ditentukan.

Contoh: oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/.

TBLPROPERTIES ('<key>'='<value>')

Opsi

Menentukan mode pembersihan cache. Saat ini, hanya mode penyegaran manual manual yang didukung. Contoh: 'metadata.cache.mode'='manual'.

comment

Opsional

Komentar pada tabel.

Contoh

SET odps.namespace.schema=true; 
CREATE OBJECT TABLE ot_demo_day 
WITH serdeproperties ( 
 'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole') 
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/';

Menampilkan properti tabel objek

Sintaks

DESC <objecttable_name>

Parameter

objecttable_name: Wajib. Nama tabel.

Contoh

DESC ot_demo_day; 

Hasil berikut dikembalikan.

+------------------------------------------------------------------------------------+
| Owner:                    ALIYUN$****@test.aliyunid.com                        |
| Project:                  test_objecttable                                         |
| Schema:                   default                                                  |
| TableComment:                                                                      |
+------------------------------------------------------------------------------------+
| CreateTime:               2024-09-02 20:01:56                                      |
| LastDDLTime:              2024-09-02 20:01:56                                      |
| LastModifiedTime:         2024-09-02 20:01:56                                      |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| key             | varchar(2048) |       | Nama objek.                                 |
| size            | bigint     |       | Ukuran objek yang dikembalikan dalam byte.   |
| type            | varchar(32) |       | Jenis objek dan nilai valid: Normal, Multipart, Appendable, dan Symlink. |
| last_modified   | timestamp  |       | Waktu terakhir objek dimodifikasi.          |
| storage_class   | varchar(32) |       | Kelas penyimpanan objek.                    |
| etag            | varchar(64) |       | Tag entitas (ETag). Saat objek dibuat, ETag dibuat untuk mengidentifikasi konten objek. |
| restore_info    | varchar(256) |       | Status pemulihan objek.                     |
| owner_id        | bigint     |       | ID pemilik bucket.                          |
| owner_display_name | varchar(256) |       | Nama tampilan pemilik bucket.               |
+------------------------------------------------------------------------------------+

Tabel berikut menjelaskan beberapa kolom dalam hasil tersebut.

Nama kolom

Deskripsi

key

Jalur relatif objek di dalam tabel objek.

size

Ukuran objek, dalam byte.

type

Jenis objek di OSS. Nilai valid: Normal, Multipart, Appendable, dan Symlink.

last_modified

Waktu objek terakhir dimodifikasi di OSS.

storage_class

Kelas penyimpanan objek di OSS. Untuk informasi selengkapnya tentang kelas penyimpanan, lihat Kelas penyimpanan.

etag

Tag entitas (ETag) adalah tanda tangan yang dibuat saat objek dihasilkan. Digunakan untuk mengidentifikasi apakah konten objek berubah antara dua pembaruan. Bukan pengenal unik.

restore_info

Menunjukkan apakah objek dipulihkan dari penyimpanan dingin. Jika objek sedang dipulihkan, kolom ini memberikan informasi terkait.

owner_id

ID pemilik objek.

owner_display_name

Nama tampilan pemilik objek.

Menampilkan pernyataan CREATE TABLE untuk tabel objek

Sintaks

SHOW CREATE TABLE <objecttable_name>;

Parameter

objecttable_name: Wajib. Nama tabel.

Contoh

SHOW CREATE TABLE ot_demo_day; 

Hasil berikut dikembalikan.

CREATE OBJECT TABLE IF NOT EXISTS yunqi_object_****.`default`.ot_demo_day 
WITH SERDEPROPERTIES ( 
  'serialization.format'='1', 
  'odps.properties.rolearn'='acs:ram::139699392458****:role/aliyunodpsdefaultrole') 
LOCATION 
  'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/' 
TBLPROPERTIES ( 
  'last_modified_time'='1731478307', 
  'transient_lastDdlTime'='1731478307', 
  'metadata.cache.mode'='manual', 
  'metadata.staleness.seconds'='3600');

Menyegarkan metadata tabel objek

Data objek aktual untuk tabel objek disimpan di OSS. MaxCompute menyimpan cache metadata objek tersebut dan melakukan kueri serta perhitungan berdasarkan metadata yang di-cache. Oleh karena itu, sebelum menggunakan tabel objek, Anda harus memperbarui cache-nya. Anda dapat menyegarkan cache secara manual atau mengonfigurasi penyegaran berkala saat membuat tabel.

Catatan

Penyegaran manual maupun berkala keduanya merupakan pembaruan penuh.

Penyegaran manual

Setiap penyegaran merupakan sinkronisasi metadata penuh. Anda dapat mengontrol waktu dan frekuensi penyegaran.

  • Sintaks

    ALTER TABLE <objecttable_name> REFRESH METADATA;
  • Parameter

    objecttable_name: Wajib. Nama tabel.

  • Contoh

    ALTER TABLE ot_demo_day REFRESH METADATA;

Penyegaran berkala

Jika objek di direktori OSS yang dipetakan oleh tabel objek sering berubah, Anda dapat menyegarkan metadata secara berkala. Cukup tentukan parameter terkait saat membuat tabel untuk mengurangi biaya pemeliharaan.

  • Sintaks

    SET odps.namespace.schema=true;
    SET odps.sql.type.system.odps2 = true;
    
    CREATE OBJECT TABLE ot_demo_day 
    WITH serdeproperties (
     'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole'
    )
    location 'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-external-****/ottest/'
    tblproperties (
      'metadata.cache.mode' = 'periodic',
      'metadata.staleness.seconds' = '3600'
    );
    
  • Parameter

    • metadata.staleness.seconds: Periode penyegaran. Parameter ini wajib untuk mode periodic. Nilainya harus bilangan bulat dalam rentang [1, 604800], yang merepresentasikan 1 detik hingga 1 minggu. Parameter ini bukan jaminan ketat; penjadwal berusaha melakukan penyegaran sedekat mungkin dengan periode yang ditentukan.

    • metadata.cache.mode: Metode pemicu penyegaran. Anda dapat memilih salah satu opsi berikut:

      • periodic: Pemicu berkala.

      • manual: Pemicu manual (default). Anda dapat mengontrol kapan memicu penyegaran.

Menanyakan tabel objek

Tabel objek memperoleh metadata objek di direktori OSS. Anda dapat menanyakan tabel objek untuk melihat metadata ini serta menggunakan pernyataan SQL untuk menyaring, mencocokkan, dan melakukan perhitungan lain pada metadata, seperti agregasi, join, window, order by, dan limit.

Sintaks

SELECT * FROM <objecttable_name>;

Parameter

objecttable_name: Wajib. Nama tabel.

Contoh

-- Menanyakan data yang diunggah ke direktori OSS tertentu. Jika volume datanya besar, Anda hanya dapat melihat lima catatan.
SELECT * FROM  ot_demo_day [limit 5];

Menanyakan konten objek untuk perhitungan bisnis

Proses kueri hanya melakukan perhitungan pada metadata objek dan tidak melibatkan konten aktual objek. Namun, proses perhitungan perlu membaca konten aktual objek. MaxCompute menyediakan fungsi unduh bawaan yang dapat Anda integrasikan ke dalam proses perhitungan Anda.

Sintaks fungsi GET_DATA_FROM_OSS

Fungsi GET_DATA_FROM_OSS membaca sebagian atau seluruh konten objek dan mengembalikannya dalam format biner.

BINARY GET_DATA_FROM_OSS (
  STRING <full_object_table_name>,
  STRING <key> 
  [, BIGINT <offset>]              
  [, BIGINT <length>] 
  [, STRING <object_not_found_policy>] 
)

Parameter

Parameter

Wajib

Tipe data

Deskripsi

Nilai default

full_object_table_name

Ya

STRING

Jalur lengkap ke OBJECT TABLE dalam model tiga tingkat, termasuk nama Proyek dan Skema, seperti project.schema.object_table.

Jika Anda menggunakan RoleARN untuk autentikasi saat membuat tabel, parameter ini membantu menghasilkan token Security Token Service (STS) secara otomatis untuk mengakses OSS.

Tidak ada

key

Ya

STRING

Nama objek yang diakses di Tabel Objek. Untuk informasi selengkapnya, lihat deskripsi parameter `key` dalam tanggapan yang dijelaskan di Menampilkan properti OBJECT TABLE.

Tidak ada

offset

Tidak

BIGINT

Posisi awal untuk membaca konten objek. Nilainya harus lebih besar dari atau sama dengan 0.

0. Artinya operasi baca dimulai dari awal objek.

length

Tidak

BIGINT

Jumlah byte yang akan dibaca.

-1. Artinya panjangnya tidak dibatasi.

object_not_found_policy

Tidak

STRING

Menentukan bagaimana MaxCompute mengembalikan hasil pemanggilan fungsi jika kunci objek ada di data cache tetapi objek tersebut tidak lagi ada di OSS. Nilai valid:

  • OUTPUT_NULL: Tidak melemparkan pengecualian. Keluarannya adalah NULL.

  • THROW_EXCEPTION: Melemparkan pengecualian dan menghentikan tugas saat ini.

  • WARN_AND_NULL: Tidak melemparkan pengecualian dan mengembalikan NULL. Entri log ditambahkan ke keluaran runtime SQL untuk menunjukkan bahwa objek tidak ada. Jika ketidakkonsistenan ini terjadi pada banyak objek, kinerja keseluruhan tugas mungkin terpengaruh.

Nilai default adalah OUTPUT_NULL.

Contoh 1

Membaca seluruh konten Tabel Objek dan mengembalikannya sebagai nilai biner. Jalur lengkap Tabel Objek adalah <project_name>.default.ot_demo_day. Kode berikut menunjukkan kombinasi parameter yang berbeda.

-- Format lengkap.
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL') FROM ot_demo_day;

-- Pernyataan berikut setara dengan get_data_from_oss('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL').
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key) FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0) FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1) FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 'OUTPUT_NULL') FROM ot_demo_day;

SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, 'OUTPUT_NULL') FROM ot_demo_day;

Contoh 2

Untuk mengeluarkan hasil fungsi GET_DATA_FROM_OSS sebagai tipe STRING, masukkan ke dalam fungsi `STRING`.

SELECT STRING(
  GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL')
) 
FROM ot_demo_day;

Menggunakan optimasi kueri untuk meningkatkan kinerja

Secara default, saat Anda mengakses tabel dalam pernyataan SQL MaxCompute, tugas dibagi menjadi chunk yang masuk akal dan merata berdasarkan jumlah catatan, ukuran catatan dalam byte, dan total sumber daya komputasi yang dibatasi oleh kuota Anda. Pendekatan ini memberikan kemampuan komputasi paralel untuk shard yang berbeda, membantu mengendalikan masalah long-tail dalam tugas paralel, serta meningkatkan kinerja kueri secara keseluruhan.

Metode pembagian ini tidak optimal untuk pernyataan SQL yang perlu mengunduh konten objek dari tabel objek untuk perhitungan dalam memori. Operasi I/O dapat dengan mudah menjadi bottleneck, yang menyebabkan masalah long-tail. Pertimbangkan kasus berikut:

key

size

a0000.jpg

10 MB

a0001.jpg

10 MB

a0002.jpg

10 MB

...

...

a1022.jpg

10 MB

a1023.jpg

10 MB

b.avi

10 GB

Anggap hanya tersedia dua sumber daya pekerja. Jika Anda membagi data berdasarkan jumlah baris atau byte catatan seperti pada tabel internal standar, Anda mungkin membuat dua objek split, yaitu split1 ([a0000.jpg ~ a0511.jpg]) dan split2 ([a0512.jpg ~ a1023.jpg, b.avi]). Ukuran data aktual yang akan diunduh untuk split1 adalah 10 MB × 512 = 5 GB, sedangkan ukuran data untuk split2 adalah 5 GB + 10 GB = 15 GB. Oleh karena itu, beban komputasi untuk split2 jauh lebih tinggi daripada split1, sehingga mengakibatkan fenomena long-tail yang parah.

Pendekatan yang lebih logis adalah membagi tugas berdasarkan ukuran aktual objek saat pernyataan SQL perlu mengunduhnya. Hal ini membantu meminimalkan masalah long-tail. Jika logika konsumsi data objek OSS lebih memakan waktu, kemampuan pemisahan yang fleksibel bahkan lebih penting. Untuk kasus di atas, Anda dapat membuat dua split: split1 ([a0000.jpg ~ a1023.jpg]) dan split2 ([b.avi]). Ukuran unduhan untuk kedua split adalah 10 GB.

Tabel objek MaxCompute menyediakan kemampuan ini. Secara default, tugas dibagi berdasarkan ukuran aktual objek dengan ukuran unit default 1 GB. Anda dapat menyesuaikan nilai ini sesuai kebutuhan. Granularitas dapat diatur ke KB, MB, atau GB.

# Nilai default adalah 1 GB. Anda dapat menyesuaikannya.
SET odps.sql.object.table.split.unit.gb = 1;
SELECT get_data_from_oss('project.default.ot_demo_day', key) FROM ot_demo_da WHERE ...


# Atau, Anda dapat mengontrol unit split pada level MB. Ini memiliki prioritas lebih tinggi daripada parameter GB.
SET odps.sql.object.table.split.unit.mb = 1;
SELECT get_data_from_oss('project.default.ot_demo_day', key) FROM ot_demo_da WHERE ...


# Atau, Anda dapat mengontrol unit split pada level KB. Ini memiliki prioritas tertinggi.
SET odps.sql.object.table.split.unit.kb = 1;
SELECT get_data_from_oss('project.default.ot_demo_day', key) FROM ot_demo_da WHERE ...

Dalam beberapa kasus, Anda mungkin ingin menonaktifkan solusi optimasi kueri ini. Solusi ini memulai dua pekerjaan: pekerjaan pertama melakukan beberapa pra-pemrosesan, dan Anda dapat melihat informasi terkait di Logview. Tabel objek MaxCompute juga menyediakan cara untuk menonaktifkannya:

SET odps.sql.object.table.split.by.object.size.enabled = false;
SELECT get_data_from_oss('project.default.ot_demo_day', key) FROM ot_demo_day WHERE ...

Menghapus tabel objek

Tabel objek menyimpan cache metadata Anda. Proses ini menempati ruang penyimpanan dan menimbulkan biaya penyimpanan. Jika Anda tidak lagi memerlukan data cache untuk bisnis Anda, Anda dapat menghapus tabel objek. Jika Anda memerlukan data tersebut lagi nanti, Anda dapat membuat ulang tabel objek.

Sintaks

DROP TABLE [IF EXISTS] <objecttable_name>; 

Parameter

objecttable_name: Wajib. Nama tabel.

Contoh

DROP TABLE IF EXISTS ot_demo_day;