Skema memungkinkan Anda mengelompokkan tabel, resource, dan user-defined function (UDF) ke dalam grup bernama di dalam proyek MaxCompute. Fitur ini memperkenalkan namespace tiga tingkat — project.schema.table — sehingga Anda dapat memisahkan objek berdasarkan tim, lingkungan, atau domain bisnis tanpa harus membuat proyek tambahan.
Cara kerja
Proyek MaxCompute merupakan unit organisasi tingkat teratas. Sebelum adanya skema, semua tabel, resource, dan fungsi berada langsung di bawah proyek, sehingga proyek sekaligus berperan sebagai database dan skema — peran ganda yang menjadi tidak praktis seiring bertambahnya jumlah objek.
Dengan skema diaktifkan, hierarkinya menjadi:
Project → Schema → Table / Resource / Function
Setiap proyek yang mendukung skema secara otomatis memiliki skema bawaan bernama DEFAULT. Skema ini tidak dapat dihapus. Jika tidak ada skema yang ditentukan, referensi tabel tanpa kualifikasi akan merujuk ke DEFAULT.
Sakelar sintaks skema
Sakelar sintaks skema mengontrol cara penguraian identifier bertitik:
| Mode | a.b.c diurai sebagai |
a.b diurai sebagai |
|---|---|---|
Diaktifkan (odps.namespace.schema=true) |
project.schema.table |
schema.table |
Dinonaktifkan (odps.namespace.schema=false) |
Tidak dikenali | project.table |
Tersedia dua tingkat kontrol:
-
Pengaturan tingkat tenant: menetapkan perilaku parsing default untuk semua job yang dikirim oleh tenant.
-
Pengaturan tingkat job: mengganti pengaturan tingkat tenant hanya untuk job saat ini. Jalankan
set odps.namespace.schema=true;atauset odps.namespace.schema=false;di awal job.
View dan UDF yang dibuat dalam satu mode hanya dapat diakses dalam mode yang sama. Pencampuran mode untuk objek yang sama tidak didukung.
Persyaratan kompatibilitas
Periksa tabel berikut sebelum mengaktifkan skema. Komponen yang tidak memenuhi versi minimum hanya akan beroperasi dalam mode odps.namespace.schema=false.
| Komponen | Versi minimum | Dukungan skema |
|---|---|---|
| Klien MaxCompute | v0.40.8 | Didukung |
| Plugin MaxCompute Studio | 4.0.0 | Didukung |
| Job Spark | 3.1.1 | Didukung |
| Pekerjaan Mars | — | Tidak didukung |
| Pekerjaan MapReduce | — | Tidak didukung |
| Hologres | V1.3 | Didukung |
| Platform for AI (PAI) | — | Skema kustom tidak didukung |
| Quick BI | — | Skema kustom tidak didukung |
| Java SDK | 0.40.8 | Didukung |
| Java Database Connectivity (JDBC) | 3.3.2 | Didukung |
| PyODPS | 0.11.3.1 | Didukung |
Konfigurasi Spark
Untuk job Spark 3.1.1, tambahkan parameter berikut untuk mengaktifkan dukungan skema:
spark.hadoop.odps.spark.version=spark-3.1.1-odps0.35.0
spark.hadoop.odps.spark.default.enable=false
spark.sql.catalog.odps.enableNamespaceSchema=true
Integrasi DataWorks
DataWorks dapat berinteraksi dengan skema hanya setelah Anda mengaktifkan fitur skema di tingkat tenant atau proyek. Untuk detailnya, lihat Dukungan DataWorks untuk skema MaxCompute.
Aktifkan fitur skema
Pilih jalur yang sesuai dengan lingkungan Anda.
Tenant baru (belum memiliki proyek)
Kapan digunakan: Tenant Anda belum memiliki proyek.
-
Masuk ke Konsol MaxCompute dan pilih wilayah.Konsol MaxComputeKonsol MaxCompute
-
Di panel navigasi kiri, pilih Manage Configurations > Tenants.
-
Di halaman Tenants, klik tab Tenant Property.
-
Nyalakan sakelar Tenant-level Schema Syntax.
Semua proyek baru yang dibuat setelah langkah ini mendukung skema secara default, dengan odps.namespace.schema=true sebagai perilaku parsing default.
Tenant kecil dengan sedikit job yang ada (10 proyek atau kurang)
Kapan digunakan: Tenant Anda memiliki 10 proyek atau kurang dan sedikit atau tidak ada job yang ada.
-
Upgrade setiap proyek yang ada agar mendukung skema:
-
Di panel navigasi kiri, pilih Manage Configurations > Projects.
-
Di halaman Projects, temukan proyek target dan klik Upgrade to Support Schemas di kolom Actions.
-
Ulangi untuk setiap proyek.
-
-
Aktifkan sintaks skema tingkat tenant:
-
Di panel navigasi kiri, pilih Manage Configurations > Tenants.
-
Di halaman Tenants, klik tab Tenant Property.
-
Nyalakan sakelar Tenant-level Schema Syntax.
-
Setelah ini, semua proyek baru mendukung skema dan permintaan diurai dengan odps.namespace.schema=true secara default.
Tenant dengan proyek dan job yang sudah ada (upgrade selektif)
Kapan digunakan: Tenant Anda memiliki job yang sudah ada dan Anda ingin mengaktifkan skema hanya untuk proyek tertentu tanpa mengubah pengaturan global.
-
Di panel navigasi kiri, pilih Manage Configurations > Projects.
-
Di halaman Projects, temukan proyek target dan klik Upgrade to Support Schemas di kolom Actions.
Setelah upgrade, skema DEFAULT dibuat secara otomatis di proyek tersebut. Semua permintaan tetap diurai dengan odps.namespace.schema=false secara default di tingkat tenant. Untuk mengakses skema kustom di proyek yang telah di-upgrade, aktifkan sintaks skema di tingkat job:
set odps.namespace.schema=true;
Dengan sintaks skema dinonaktifkan, projectname.tablename hanya merujuk ke tabel di skema DEFAULT. Untuk mengakses tabel di skema kustom, aktifkan sintaks skema di tingkat job.
Proyek yang tidak di-upgrade: jika sintaks skema diaktifkan, path datanya adalah projectname.default.tablename.
Manage schemas
Prasyarat
Sebelum memulai, pastikan Anda telah:
-
Dukungan skema diaktifkan pada proyek (lihat Aktifkan fitur skema)
Izin yang diperlukan: Pemilik skema memiliki akses penuh dan izin kontrol akses untuk skema serta semua objek di dalamnya secara default. Untuk membuat, melihat deskripsi, atau menghapus skema, Anda memerlukan izin tingkat proyek yang sesuai.
Manage schemas menggunakan perintah
Daftar skema
-- Tampilkan semua skema di proyek saat ini.
SHOW schemas;
CreateSchema
-- Buat skema kustom. Ganti schema_name dengan nama skema Anda.
CREATE schema <schema_name>;
Periksa skema
-- Lihat properti dan metadata skema.
DESC schema <schema_name>;
Hapus skema
DROP schema <schema_name>;
Manage schemas menggunakan konsol
-
Masuk ke Konsol MaxCompute dan pilih wilayah.Konsol MaxComputeKonsol MaxCompute
-
Di panel navigasi kiri, pilih Manage Configurations > Projects.
-
Di halaman Projects, temukan proyek target dan klik Manage di kolom Actions.
-
Di halaman Project Settings, klik tab Schema.
Tab Schema hanya terlihat untuk proyek yang mendukung skema.
-
Lihat daftar skema, atau buat dan hapus skema dari tab ini.
Bekerja dengan objek dalam skema
Gunakan format project.schema.table untuk mereferensikan objek lintas batas proyek dan skema.
Semua penjelasan tentang objek tabel dalam bagian ini juga berlaku untuk view, resource, dan fungsi.
Format referensi
| Ruang lingkup | Format | Contoh |
|---|---|---|
| Lintas proyek | project.schema.table |
projectB.s_3.t_f |
| Lintas skema dalam proyek yang sama | schema.table |
s_2.t_d |
| Dalam skema saat ini | table |
t_a (setelah use schema s_1;) |
| Resolusi default (tanpa skema yang ditetapkan) | table |
Merujuk ke skema DEFAULT |
Tetapkan skema saat ini dengan:
use schema <schema_name>;
Setelah itu, nama tabel tanpa kualifikasi akan merujuk ke skema yang ditentukan dalam proyek saat ini.
Format referensi resource
Untuk resource (file JAR, arsip, dan file lainnya), gunakan titik dua (:) sebagai pemisah saat mereferensikan lintas skema atau proyek:
| Ruang lingkup | Format | Contoh |
|---|---|---|
| Referensi lintas skema | schema:resource_name |
s_2:res_c.jar |
| Referensi lintas proyek | project:schema:resource_name |
projectB:s_3:res_f.jar |
Perintah add resource hanya dapat dijalankan di skema atau proyek saat ini. Untuk menambahkan resource ke skema berbeda, alihkan terlebih dahulu ke skema tersebut dengan use schema <schema_name>;.
Contoh
Contoh 1: Operasi dalam proyek yang sama
Operasi skema default
use projectA;
set odps.namespace.schema=true; -- Lewati jika sudah diatur di tingkat tenant.
-- Buat dan isi tabel di skema DEFAULT.
create table t_a(c1 string, c2 bigint);
INSERT OVERWRITE TABLE t_a VALUES ('a',1),('b',2),('c',3);
select * from t_a;
show tables;
desc t_a;
-- Unggah dan unduh data menggunakan Tunnel.
tunnel upload <path> t_a[/<pt_spc>];
tunnel download t_a[/pt_spc] <path>;
-- Kelola resource di skema DEFAULT.
add jar <path>/res_a.jar;
desc resource res_a.jar;
list resources;
get resource res_a.jar D:\;
drop resource res_a.jar;
-- Kelola fungsi di skema DEFAULT.
create function fun_a as 'xx' using 'res_a.jar';
desc function fun_a;
list functions;
drop function fun_a;
Parameter:
-
<path>: path penyimpanan file. -
<pt_spc>: partisi tingkat terendah, dalam formatpartition_col1=col1_value1, partition_col2=col2_value1, ....
Operasi skema kustom dan operasi lintas skema
use projectA;
set odps.namespace.schema=true; -- Lewati jika sudah diatur di tingkat tenant.
-- Alihkan ke skema s_1 dan bekerja dengan tabel t_c.
use schema s_1;
create table t_c(c1 string, c2 bigint);
INSERT OVERWRITE TABLE t_c VALUES ('a',1),('b',2),('c',3);
select * from t_c;
show tables;
drop table t_c;
tunnel upload <path> t_c[/<pt_spc>];
tunnel download t_c[/pt_spc] <path>;
-- Referensikan tabel t_d di skema s_2 secara langsung, tanpa mengganti skema.
create table s_2.t_d(c1 string, c2 bigint);
insert into/overwrite table s_2.t_d values ('a',1),('b',2),('c',3);
select * from s_2.t_d;
show tables in s_2;
drop table s_2.t_d;
tunnel upload <path> s_2.t_d[/<pt_spc>];
tunnel download s_2.t_d[/pt_spc] <path>;
-- Kelola resource di skema s_1 (skema saat ini).
use schema s_1;
add jar <path>/res_b.jar;
desc resource res_b.jar;
list resources;
get resource res_b.jar D:\;
drop resource res_b.jar;
-- Referensikan resource di skema s_2 menggunakan pemisah titik dua.
-- Catatan: add resource harus dijalankan dari dalam skema target.
-- Alihkan ke s_2 terlebih dahulu sebelum menjalankan operasi add lintas skema.
desc resource s_2:res_c.jar;
list resources in s_2;
get resource s_2:res_c.jar D:\;
drop resource s_2:res_c.jar;
-- Kelola fungsi di skema s_1 (skema saat ini).
use schema s_1;
create function fun_b as 'xx' using 'res_b.jar';
desc function fun_b;
list functions;
drop function fun_b;
-- Kelola fungsi di skema s_2 menggunakan notasi titik.
create function s_2.fun_c as 'xx' using 's_2/resources/res_c.jar';
desc function s_2.fun_c;
list functions in s_2;
drop function s_2.fun_c;
Contoh 2: Operasi lintas proyek
Semua referensi tabel dan fungsi lintas proyek menggunakan format project.schema.table dengan titik. Referensi resource lintas proyek menggunakan titik dua.
use projectA;
set odps.namespace.schema=true; -- Lewati jika sudah diatur di tingkat tenant.
-- Buat dan akses tabel t_f di projectB, skema s_3.
create table projectB.s_3.t_f(c1 string, c2 bigint);
INSERT OVERWRITE TABLE projectB.s_3.t_f VALUES ('a',1),('b',2),('c',3);
select * from projectB.s_3.t_f;
show tables in projectB.s_3;
desc projectB.s_3.t_f;
drop table projectB.s_3.t_f;
tunnel upload <path> projectB.s_3.t_f[/<pt_spc>];
tunnel download projectB.s_3.t_f[/pt_spc] <path>;
-- Referensikan resource di projectB, skema s_3 menggunakan pemisah titik dua.
-- Catatan: add resource harus dijalankan dari dalam proyek dan skema target.
-- Alihkan ke projectB dan gunakan skema s_3 sebelum menjalankan operasi add.
desc resource projectB:s_3:res_f.jar;
list resources in projectB.s_3;
get resource projectB:s_3:res_f.jar D:\;
drop resource projectB:s_3:res_f.jar;
-- Kelola fungsi di projectB, skema s_3.
create function projectB.s_3.fun_f as 'xx' using 'projectB/schemas/s_3/resources/res_f.jar';
desc function projectB.s_3.fun_f;
list functions in projectB.s_3;
drop function projectB.s_3.fun_f;
Izin
Izin tingkat proyek untuk operasi skema
Izin untuk membuat tabel, resource, dan fungsi diberikan di tingkat proyek, bukan di tingkat skema. Jika Anda memiliki izin CreateTable, CreateResource, atau CreateFunction pada suatu proyek, izin tersebut berlaku otomatis untuk semua skema dalam proyek tersebut.
Pemilik skema memiliki akses penuh dan izin kontrol akses untuk skema serta semua objek di dalamnya secara default.
Kontrol akses granular tingkat skema direncanakan untuk rilis mendatang.
-
Izin yang terkait dengan objek skema adalah sebagai berikut.
Operasi
Objek
Deskripsi
CreateSchema
Project
Izin untuk membuat skema dalam proyek.
Describe
Schema
Izin untuk melihat skema.
List
Schema
Izin untuk mencantumkan resource dalam skema.
Drop
Schema
Izin untuk menghapus skema.
Usage
Schema
Izin untuk mengganti skema saat ini.
CreateTable
Schema
Izin untuk membuat tabel dalam skema.
CreateResource
Schema
Izin untuk membuat resource dalam skema.
CreateFunction
Schema
Izin untuk membuat fungsi dalam skema.
-
Sintaks otorisasi adalah sebagai berikut.
-- Berikan role atau pengguna izin untuk membuat skema dalam proyek. GRANT CreateSchema ON PROJECT <projectname> TO USER/ROLE <username>/<rolename>; -- Cabut izin role atau pengguna untuk membuat skema dalam proyek. REVOKE CreateSchema ON PROJECT <projectname> FROM USER/ROLE <username>/<rolename>; -- Berikan role atau pengguna izin untuk melihat, menghapus, atau melakukan operasi lain pada skema. GRANT DESCRIBE/LIST/DROP/ALTER/ALL ON SCHEMA <schemaname> TO <username>/<rolename>; -- Cabut izin role atau pengguna untuk melihat, menghapus, atau melakukan operasi lain pada skema. REVOKE DESCRIBE/LIST/DROP/ALTER/ALL ON SCHEMA <schemaname> FROM <username>/<rolename>; -- Lihat izin yang diberikan pada skema. SHOW GRANTS ON SCHEMA <schemaname>; -- Lihat izin yang diberikan pada skema untuk role atau pengguna tertentu. SHOW GRANTS ON SCHEMA <schemaname> FOR USER/ROLE <username>/<rolename>;
Berikan dan cabut izin pada objek skema
Saat memberikan izin pada objek tertentu di dalam skema, gunakan format lengkap project.schema.table. Untuk daftar lengkap izin yang tersedia, lihat Izin MaxCompute. Untuk mengelola izin melalui konsol, lihat Kelola izin pengguna menggunakan konsol.
-- Berikan role izin pada semua tabel dalam skema.
GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.* TO role {rolename};
-- Cabut izin role pada semua tabel dalam skema.
REVOKE schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.* FROM role {rolename};
-- Berikan role atau pengguna izin pada tabel tertentu.
GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.<tablename> TO {role|user} {rolename | USER name};
-- Cabut izin role atau pengguna pada tabel tertentu.
REVOKE schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.<tablename> FROM {role|user} {rolename | USER name};
-- Lihat izin pada tabel.
SHOW GRANTS ON TABLE <project_name>.<schema_name>.<tablename>;
Sintaks wildcard dengan awalan <project_name>.<schema_name>.xxx* tidak didukung. Gunakan .* untuk menargetkan semua tabel dalam skema, atau tentukan nama tabel lengkap untuk pemberian izin individual.