MaxCompute memperkenalkan fitur tabel objek, yang memungkinkan mesin komputasi gudang data mengakses data tidak terstruktur dan metadata-nya di penyimpanan data lake. Topik ini menjelaskan sintaks perintah dan menyediakan contoh penggunaan.
Latar Belakang
Dalam banyak alur kerja AI, pengembang gudang data yang memahami data dan logika bisnis harus melakukan pra-pemrosesan atau memproses data tidak terstruktur untuk model besar. Tugas-tugas tersebut memanfaatkan daya komputasi skala besar berbiaya rendah dari platform data besar. Proses-proses ini dan hasilnya sering kali berinteraksi dengan data di gudang data atau data lake.
Menggunakan SQL untuk memproses data tidak terstruktur menghadirkan beberapa tantangan:
Saat membaca dari penyimpanan objek, mesin SQL data besar tidak dapat menentukan ukuran objek, sehingga menyulitkan optimasi rencana eksekusi serta pengendalian konkurensi atau peluncuran jumlah tugas konkuren yang sesuai. Tanpa penurunan predikat yang efektif, daya komputasi tidak dapat dimanfaatkan secara optimal, terutama dalam kasus kesenjangan data.
Membaca metadata dari penyimpanan objek menyebabkan latensi tinggi karena setiap kueri memerlukan panggilan remote ke layanan penyimpanan.
Daftar file dari penyimpanan objek hanya dapat diambil secara serial dalam satu proses pada fungsi tabel yang didefinisikan pengguna (UDTF), sehingga menghasilkan performa baca data yang buruk.
Anda harus menerapkan logika otorisasi dan konektivitas jaringan dalam fungsi yang didefinisikan pengguna (UDF) untuk terhubung ke layanan penyimpanan.
Gudang data tradisional tidak menyediakan fitur untuk mengunggah gambar kustom secara aman atau lingkungan eksekusi yang aman untuk UDF. Selain itu, panggilan remote memerlukan manajemen konkurensi yang kompleks dengan layanan komputasi terdistribusi.
Fitur
MaxCompute memperkenalkan fitur tabel objek, yang memungkinkan mesin komputasi gudang data mengakses data tidak terstruktur dan metadata-nya di penyimpanan data lake. Fitur ini menyediakan kemampuan berikut:
Memungkinkan mesin membaca metadata file OSS sebagai tabel.
Memanfaatkan tabel metadata untuk menyimpan cache metadata versi file OSS. Mesin SQL kemudian dapat menggunakan metadata ini untuk optimasi kueri, seperti penyaringan data dan penurunan predikat.
Menyediakan fungsi bawaan untuk membaca konten file data tidak terstruktur dengan berbagai cara.
Memungkinkan mesin SQL MaxCompute membuat split konkuren berdasarkan metadata tabel objek, sehingga membuka potensi komputasi terdistribusi skala besar untuk meningkatkan efisiensi pembacaan dan pemrosesan data.
Memungkinkan Anda mengunggah gambar kustom untuk membangun UDF yang memproses data tidak terstruktur yang dibaca oleh mesin.
Mendukung pemrosesan data tidak terstruktur untuk menghasilkan hasil terstruktur dan menuliskannya ke tabel internal atau eksternal di gudang data. Versi mendatang juga akan mendukung pembuatan hasil tidak terstruktur dan menuliskannya kembali ke OSS melalui tabel objek.
Mendukung mesin Maxframe dari ekosistem Python.
Batasan
Proyek MaxCompute harus memiliki skema yang diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan skema.
MaxCompute harus mendukung Type System 2.0.
Tabel objek saat ini tidak mendukung partisi.
Penagihan
Tabel Objek menyimpan kumpulan metadata untuk file di OSS. Biaya penyimpanan dikenakan untuk metadata yang direfresh dan disimpan di Tabel Objek. Untuk informasi selengkapnya, lihat Harga penyimpanan. Karena file dari OSS tidak disimpan di dalam MaxCompute, MaxCompute tidak membebankan biaya penyimpanan untuk file tersebut. OSS membebankan biaya untuk penyimpanan dan akses data. Untuk informasi selengkapnya, lihat Harga penyimpanan OSS.
Untuk tugas yang mengekstraksi dan merefresh metadata OSS,
inputsizeuntuk setiap file yang dipindai didasarkan pada ukuran metadatanya, bukan ukuran file sebenarnya. Oleh karena itu, total biaya pekerjaan refresh bergantung pada jumlah file, bukan ukuran totalnya. Untuk informasi selengkapnya, lihat Penagihan SQL untuk tabel eksternal.Anda dikenai biaya komputasi saat menggunakan Tabel Objek dan metadatanya untuk menganalisis serta mengekstraksi data tidak terstruktur dari OSS.
Dalam langganan bayar sesuai penggunaan, analisis metadata Tabel Objek ditagih dengan cara yang sama seperti tabel internal. Untuk informasi selengkapnya, lihat Penagihan SQL Standar. Pemrosesan konten data tidak terstruktur dari OSS ditagih sebagai tabel eksternal. Untuk informasi selengkapnya, lihat Penagihan SQL untuk tabel eksternal.
Dalam paket penagihan langganan, Anda menggunakan sumber daya langganan prabayar. 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>']
;Tabel objek harus digunakan dalam proyek yang telah mengaktifkan skema, dan Anda harus mengaktifkan sakelar sintaks skema.
Anda tidak perlu mendefinisikan kolom untuk Tabel Objek karena kolom metadatanya disediakan oleh sistem.
Parameter
Parameter | Wajib | Deskripsi |
objecttable_name | Ya | Nama tabel. |
SERDEPROPERTIES ('<key>'='<value>') | Ya | Menentukan properti untuk serializer-deserializer (SerDe). Anda dapat menentukan RAM role untuk otorisasi dengan mengatur kunci Contoh: Sebelum menggunakan fitur ini, pastikan Anda telah menyelesaikan otorisasi satu klik untuk
Catatan Otorisasi satu klik hanya dimungkinkan jika pemilik proyek MaxCompute dan pemilik akun OSS adalah pihak yang sama. |
location | Ya |
|
TBLPROPERTIES ('<key>'='<value>') | Tidak |
|
comment | Tidak | Komentar untuk 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 <object_table_name>Parameter
object_table_name: Wajib. Nama tabel.
Contoh
SET odps.namespace.schema=true;
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) | | The name of the object. |
| size | bigint | | The size of the returned object in bytes. |
| type | varchar(32) | | The type of the object and valid values: Normal, Multipart, Appendable, and Symlink. |
| last_modified | timestamp | | The last modified time of the object. |
| storage_class | varchar(32) | | The storage class of the object. |
| etag | varchar(64) | | The entity tag (ETag). When an object is created, an ETag is created to identify the content of the object. |
| restore_info | varchar(256) | | The restoration status of the object. |
| owner_id | bigint | | The ID of the bucket owner. |
| owner_display_name | varchar(256) | | The display name of the bucket owner. |
+------------------------------------------------------------------------------------+Tabel berikut menjelaskan kolom-kolom utama dalam hasil tersebut.
Parameter | Tipe | Boleh null | Deskripsi |
key | VARCHAR(2048) Batas panjang di OSS adalah 1.023 karakter. Untuk informasi selengkapnya, lihat Aturan penamaan dan contoh objek OSS. | False | Jalur relatif objek dalam Tabel Objek. |
size | BIGINT | False | Ukuran objek dalam byte. |
type | VARCHAR(32) | False | Tipe objek di OSS: Normal, Multipart, Appendable, atau Symlink. |
last_modified | TIMESTAMP_NTZ | False | Waktu terakhir data objek dimodifikasi di OSS. |
storage_class | VARCHAR(32) | False | Kelas penyimpanan objek di OSS. Untuk daftar kelas penyimpanan, lihat Kelas penyimpanan. |
etag | VARCHAR(64) | False | ETag adalah tag entitas yang dihasilkan untuk suatu objek. ETag mengidentifikasi apakah konten objek berubah antar pembaruan, tetapi bukan pengenal unik. |
restore_info | VARCHAR(256) | True | Menunjukkan apakah objek telah dipulihkan dari penyimpanan dingin. Jika objek sedang dipulihkan, kolom ini memberikan informasi terkait. |
owner_id | BIGINT | True | ID pemilik objek. |
owner_display_name | VARCHAR(256) | True | Nama tampilan pemilik objek. |
Menampilkan pernyataan CREATE TABLE
Sintaks
SHOW CREATE TABLE <object_table_name>;Parameter
object_table_name: Wajib. Nama tabel.
Contoh
SET odps.namespace.schema=true;
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');Refresh metadata Tabel Objek
Data aktual untuk Tabel Objek disimpan di OSS. MaxCompute menyimpan cache metadata objek-objek tersebut dan menggunakan metadata cache ini untuk kueri dan komputasi. Oleh karena itu, Anda harus merefresh cache sebelum menggunakan Tabel Objek. Anda dapat merefresh metadata secara manual atau mengonfigurasi refresh periodik saat membuat tabel.
Refresh manual maupun periodik keduanya merupakan pembaruan penuh.
Penyegaran manual
Setiap refresh melakukan sinkronisasi penuh metadata. Anda dapat mengontrol waktu dan frekuensi refresh tersebut.
Sintaks
ALTER TABLE <objecttable_name> REFRESH METADATA;Parameter
object_table_name: Wajib. Nama tabel.
Contoh
SET odps.namespace.schema=true; ALTER TABLE ot_demo_day REFRESH METADATA;
Refresh periodik
Jika file dalam direktori OSS yang dipetakan oleh Tabel Objek sering berubah, Anda dapat mengonfigurasi refresh metadata periodik. Hal ini mengurangi biaya maintenance dengan menentukan parameter terkait saat membuat tabel.
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: Interval refresh. Parameter ini wajib untuk modeperiodic. Nilainya dapat berkisar antara[1, 604800], yang merepresentasikan rentang 1 detik hingga 1 minggu. Parameter ini merupakan jaminan upaya terbaik, dan penjadwal akan mencoba menjalankan refresh sedekat mungkin dengan interval yang ditentukan.metadata.cache.mode: Mode refresh. Opsi yang tersedia adalah:periodic: Pemicu periodik.crontab: Refresh terjadwal.manual: Pemicu manual (default). Anda dapat mengontrol waktu pemicunya.
Refresh terjadwal
Jika file dalam direktori OSS yang dipetakan oleh Tabel Objek sering berubah, Anda dapat menjadwalkan refresh metadata. Hal ini mengurangi biaya maintenance dengan menentukan parameter terkait saat membuat tabel.
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-region-internal.aliyuncs.com/odps-external-****/ottest/' TBLPROPERTIES ( 'metadata.cache.mode' = 'crontab', 'metadata.crontab.expression' = 'your_timed_expression' );Parameter
metadata.crontab.expression: Ekspresi cron yang menentukan jadwal. Misalnya, untuk memicu refresh setiap hari pukul 14.00, Anda dapat menggunakan ekspresi0 0 14 * * ?, yang berarti0detik,0menit, jam14(pukul 14.00),setiaphari,setiapbulan, dan?untuk tidak menentukan hari dalam minggu (saling eksklusif dengan field hari-bulan untuk menghindari konflik).metadata.cache.mode: Mode refresh. Opsi yang tersedia adalah:crontab: Refresh terjadwal.periodic: Pemicu periodik.manual: Pemicu manual (default). Anda dapat mengontrol waktu pemicunya.
Menampilkan tugas refresh
Anda dapat menjalankan perintah berikut untuk melihat riwayat tugas refresh.
SHOW refresh task history FOR object TABLE <object_table_name>;Parameter
<object_table_name> harus berupa tabel objek.
Nilai kembalian: ID instans tugas refresh (InstanceId), waktu pembuatan (CreateTime), waktu selesai (EndTime), dan status (Status).
Jika Status bernilai Failed, Anda dapat menjalankan
wait InstanceId;untuk melihat log dan memeriksa detail error.
Contoh
-- Menampilkan tugas refresh historis untuk Tabel Objek. SET odps.namespace.schema=true; SHOW refresh task history for object table ot_demo_day04; -- Hasil berikut dikembalikan. ID = 20260105*******f +---------------------------------------------------------------------------------------------------+ | Project: test_project | | Schema: default | | Task: *** | +---------------------------------------------------------------------------------------------------+ | History: | +---------------------------------------------------------------------------------------------------+ | InstanceId | CreateTime | EndTime | Status | +---------------------------------------------------------------------------------------------------+ | 20260105******************ks | 2026-01-05 14:12:00 | 2026-01-05 14:12:04 | Terminated | | 20260105******************y3 | 2026-01-05 14:10:00 | 2026-01-05 14:10:03 | Terminated | +---------------------------------------------------------------------------------------------------+ OK
Menanyakan Tabel Objek
Setelah Tabel Objek mengambil metadata file dari direktori OSS, Anda dapat menanyakan tabel tersebut untuk menelusuri metadata ini. Anda juga dapat menggunakan pernyataan SQL untuk melakukan perhitungan pada metadata, seperti penyaringan, pencocokan, agregasi, join, fungsi jendela, ORDER BY, dan LIMIT.
Sintaks
SELECT * FROM <object_table_name>;Parameter
object_table_name: Wajib. Nama tabel.
Contoh
-- Anda dapat menanyakan data yang diunggah ke direktori OSS yang ditentukan. Jika jumlah datanya besar, Anda dapat membatasi hasil menjadi lima baris.
SET odps.namespace.schema=true;
SELECT * FROM ot_demo_day [limit 5];Menghapus Tabel Objek
Tabel Objek menyimpan cache metadata pengguna, yang mengonsumsi penyimpanan dan menimbulkan biaya. Jika Anda tidak lagi memerlukan data cache tersebut, Anda dapat menghapus Tabel Objek. Anda dapat membuat ulang Tabel Objek tersebut nanti jika diperlukan.
Sintaks
DROP TABLE [IF EXISTS] <object_table_name>; Parameter
object_table_name: Wajib. Nama tabel.
Contoh
SET odps.namespace.schema=true;
DROP TABLE IF EXISTS ot_demo_day;FAQ
ODPS-0010000:System internal error
Gejala
Pesan error berikut dilaporkan:
ODPS-0010000:System internal error - ActionHandler job failed with failinfo storage service worker error occured: common/io/oss/oss_file_system_cppsdk.cpp(919): OSSRequestException: Status: -50, RequestId: , ErrorCode: ClientError:-50, Message: E_HTTP_ERROR_CONN_REFUSEDPenyebab
Anda menggunakan titik akhir publik untuk OSS saat membuat Tabel Objek.
Solusi
Saat membuat Tabel Objek, parameter
locationharus berisi titik akhir internal untukoss_endpoint. Untuk informasi tentang cara mendapatkan titik akhir internal, lihat Deskripsi parameter. Jika error tetap muncul setelah Anda mengubah alamat ke titik akhir internal, hubungi tim dukungan teknis MaxCompute dengan mengirimkan tiket untuk mendapatkan bantuan.
Refresh periodik gagal
Gejala
Anda menyetel parameter refresh periodik saat membuat Tabel Objek. Namun, refresh tidak berjalan saat interval tercapai.
Solusi
Pastikan parameter location yang digunakan untuk membuat Tabel Objek menentukan titik akhir internal OSS. Untuk informasi lebih lanjut tentang membuat Tabel Objek, lihat Parameter.