Skema memungkinkan Anda mengelompokkan tabel, resource, dan fungsi ke dalam kelompok logis di dalam proyek MaxCompute untuk manajemen yang lebih terperinci.
Latar Belakang
Proyek MaxCompute merupakan unit organisasi dasar sekaligus batas utama untuk isolasi multi-pengguna dan kontrol akses.
Sebuah proyek berisi tabel, resource, dan fungsi. Sebelumnya, objek-objek ini ditempatkan langsung di bawah proyek, sehingga proyek tersebut harus berperan ganda sebagai database sekaligus skema. Hal ini menyulitkan manajemen ketika proyek berisi banyak objek. MaxCompute kini mendukung skema, yang mengklasifikasikan tabel, resource, dan fungsi di dalam proyek. Gambar berikut menunjukkan hierarkinya.
Lingkup
Fitur skema terus dikembangkan. Beberapa modul belum diadaptasi dan hanya dapat digunakan dalam mode set odps.namespace.schema=false.
Alat pengembang
Klien MaxCompute v0.40.8 dan versi lebih baru mendukung fitur skema.
Plugin MaxCompute Studio 4.0.0 dan versi lebih baru mendukung fitur skema.
Jenis pekerjaan
Pekerjaan Spark 3.1.1 dan versi lebih baru mendukung fitur skema.
Anda harus mengatur parameter berikut untuk pekerjaan Spark:
spark.sql.catalog.odps.enableNamespaceSchema=truePekerjaan Mars dan MapReduce tidak mendukung fitur skema.
Produk cloud lainnya
Hologres V1.3 dan versi lebih baru mendukung fitur skema. Untuk meningkatkan instans Hologres, lihat Upgrade an instance.
Produk cloud lain seperti PAI dan Quick BI tidak mendukung fitur skema kustom.
Java SDK 0.40.8 dan versi lebih baru, Java Database Connectivity (JDBC) 3.3.2 dan versi lebih baru, serta PyODPS 0.11.3.1 dan versi lebih baru mendukung fitur skema.
DataWorks dapat berinteraksi dengan skema di MaxCompute hanya setelah Anda mengaktifkan fitur skema di tingkat penyewa atau proyek. Untuk informasi selengkapnya, lihat DataWorks support for MaxCompute schemas.
View dan user-defined function (UDF) yang dibuat dalam mode
odps.namespace.schema=falsehanya dapat diakses dalam mode yang sama. Aturan yang sama berlaku untuk modeodps.namespace.schema=true.
Istilah kunci
Skema
Skema mengklasifikasikan tabel, resource, dan UDF di dalam proyek. Satu proyek dapat berisi beberapa skema.
Sakelar sintaks skema
Setelah Anda mengaktifkan sakelar sintaks skema, sistem akan mengurai pernyataan menggunakan semantik
project.schema.table.Ketika sintaks skema diaktifkan, pernyataan dalam format
a.b.cdiurai sebagaiproject.schema.table. Pernyataan dalam formata.bdiurai sebagaischema.table.Ketika sintaks skema dinonaktifkan, pernyataan dalam format
a.b.ctidak dikenali. Pernyataan dalam formata.bdiurai sebagaiproject.table. Sakelar ini dapat diatur di tingkat penyewa maupun tingkat pekerjaan.
Skema default
Ketika fitur skema diaktifkan, skema bawaan bernama DEFAULT secara otomatis dibuat di setiap proyek. Anda tidak dapat menghapus skema ini.
Pengaturan tingkat penyewa
Menentukan semantik default untuk permintaan akses data yang diajukan oleh seluruh penyewa.
Pengaturan tingkat pekerjaan
Pengaturan ini hanya berlaku untuk pekerjaan saat ini dan memiliki prioritas lebih tinggi daripada pengaturan tingkat penyewa. Anda dapat menjalankan perintah
set odps.namespace.schema=true | false;untuk mengaktifkan atau menonaktifkan sintaks skema.
Aktifkan fitur
Jika Anda baru menggunakan MaxCompute dan belum memiliki proyek, aktifkan sakelar sintaks di tingkat penyewa. Semua proyek baru kemudian akan mendukung fitur skema, dan semua permintaan akan diurai berdasarkan sintaks
odps.namespace.schema = truesecara default.Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Tenants, klik tab Tenant Property.
Di tab Tenant Property, aktifkan sakelar Tenant-level Schema Syntax.
Jika Anda memiliki 10 proyek atau kurang dan memiliki sedikit atau tidak ada pekerjaan yang ada, ikuti langkah-langkah berikut untuk mengadaptasi lingkungan Anda. Setelah adaptasi, proyek baru akan mendukung skema, dan semua permintaan akan diurai berdasarkan sintaks
odps.namespace.schema=truesecara default.Pertama, tingkatkan semua proyek yang ada agar mendukung skema.
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, klik Enable Schema di kolom Actions untuk proyek target.
Kemudian, aktifkan Tenant-level Schema Syntax.
Di panel navigasi kiri, pilih .
Di halaman Tenants, klik tab Tenant Property.
Di tab Tenant Property, aktifkan sakelar Tenant-level Schema Syntax.
Jika Anda memiliki proyek dan pekerjaan yang sudah ada dan perlu meningkatkan proyek tertentu agar mendukung skema, ikuti langkah-langkah berikut. Setelah peningkatan, sebuah
SchemabernamaDEFAULTakan dibuat di proyek secara default.Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, klik Enable Schema di kolom Actions untuk proyek target.
Semua permintaan diurai berdasarkan sintaks
odps.namespace.schema = falsesecara default. Untuk proyek yang telah ditingkatkan, setelah Anda membuat skema kustom, Anda harus mengaktifkan sintaks skema di tingkat pekerjaan dengan menjalankanset odps.namespace.schema=true;untuk mengakses data di skema kustom tersebut.
Jika sintaks skema diaktifkan, jalur data untuk proyek yang belum ditingkatkan adalah
projectname.default.tablename.Jika sintaks skema dinonaktifkan, proyek yang telah ditingkatkan tidak dapat mengakses skema kustom. Jalur
projectname.tablenamehanya mengenali data diSchemabernamaDEFAULT.
Catatan penggunaan
Buat proyek
Sebelum menggunakan skema, Anda harus membuat proyek MaxCompute.
Ketika Anda membuat proyek di Konsol MaxCompute, jika sakelar sintaks tingkat penyewa diaktifkan (
odps.namespace.schema = true), proyek tersebut secara default mendukung skema.
Kelola skema
Kelola skema menggunakan perintah
Lihat daftar skema
SHOW schemas;Buat skema
CREATE schema <schema_name>;schema_name menentukan nama skema kustom.
Lihat informasi skema
DESC schema <schema_name>;schema_name menentukan nama skema.
Hapus skema
DROP schema <schema_name>;schema_name menentukan nama skema. Sebelum menghapus skema, Anda harus menghapus semua tabel dan objek data lainnya di dalam skema tersebut. DROP SCHEMA tidak mendukung penghapusan bertingkat (cascade delete). Jika masih terdapat tabel atau objek lain di dalam skema, perintah akan gagal dan mengembalikan error yang menunjukkan bahwa skema tidak kosong.
Kelola skema menggunakan konsol manajemen
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, klik Manage di kolom Actions untuk proyek target.
Di halaman Project Settings, klik tab Schema.
Tab Schema hanya muncul untuk proyek yang mendukung skema.
Di tab schema, Anda dapat melihat daftar skema, serta membuat atau menghapus skema.
Operasikan objek dalam skema
Gunakan format project.schema.table untuk mereferensikan objek dalam skema.
Referensi ke objek Tabel dalam topik ini juga berlaku untuk objek View, Resource, dan Function.
Ketika Anda mengoperasikan tabel lintas proyek, Anda harus menggunakan format perintah lengkap: project.schema.table.
Untuk operasi lintas skema dalam proyek yang sama, Anda dapat menggunakan format
schema.table. Jika perintah berada dalam formata.b,adiurai sebagai skema,bdiurai sebagai tabel, dan proyeknya adalah proyek saat ini.Dalam proyek yang sama, Anda dapat menjalankan perintah
use schema <schema_name>untuk menentukan skema saat ini. Kemudian, Anda dapat langsung menggunakan perintah sepertiselect * from a. Dalam kasus ini,aadalah tabel, yang secara otomatis diselesaikan ke proyek saat ini dan skema yang ditentukan.Jika tidak ada skema yang ditentukan dalam konteks, dan Anda menggunakan perintah seperti
select * from a,aadalah tabel. Ini secara otomatis diselesaikan ke proyek saat ini dan skema bernama default.
Contoh
Contoh 1: Operasikan objek dalam skema di proyek yang sama (projectA).
Operasikan objek di skema default.
use projectA; set odps.namespace.schema=true;-- Jika ini diatur di tingkat penyewa, Anda tidak perlu menentukannya di sini. -- Operasikan tabel t_a 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; tunnel upload <path> t_a[/<pt_spc>]; tunnel download t_a[/pt_spc] <path>; -- Operasikan resource res_a.jar add jar <path>/res_a.jar ; desc resource res_a.jar; list resources; get resource res_a.jar D:\; drop resource res_a.jar; -- Operasikan fungsi fun_a create function fun_a as 'xx' using 'res_a.jar'; desc function fun_a; list functions; drop function fun_a;Parameter dijelaskan sebagai berikut:
path: jalur penyimpanan dan nama file.
pt_spc: Anda harus menentukan partisi tingkat terendah. Formatnya adalah
partition_col1=col1_value1, partition_col2=col2_value1....
Operasikan objek di skema kustom (s_1 dan s_2), termasuk operasi lintas skema.
use projectA; set odps.namespace.schema=true;-- Jika ini diatur di tingkat penyewa, Anda tidak perlu menentukannya di sini. -- Operasikan tabel t_c di bawah s_1 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>; -- Operasikan tabel t_d di bawah s_2 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>; -- Operasikan resource res_b.jar di bawah s_1 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; -- Operasikan resource res_c.jar di bawah s_2 add jar xxx ;-- Perintah add resource hanya dapat dijalankan di skema atau proyek saat ini. Tidak dapat dijalankan lintas skema atau proyek. Oleh karena itu, Anda harus beralih ke skema s_2 untuk operasi normal. -- Untuk operasi lintas proyek atau lintas skema, gunakan tanda titik dua (:) untuk memisahkan level resource. 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; -- Operasikan fungsi fun_b di bawah s_1 use schema s_1; create function fun_b as 'xx' using 'res_b.jar' desc function fun_b; list functions; drop function fun_b; -- Operasikan fungsi fun_c di bawah s_2 create function s_2.fun_c as 'xx' using 's_2/resources/res_c.jar' drop function s_2.fun_c; desc function s_2.fun_c; list functions in s_2; drop function s_2.fun_c;
Contoh 2: Lakukan operasi lintas proyek (operasikan objek di ProjectB dari ProjectA).
use projectA; set odps.namespace.schema=true; -- Jika ini diatur di tingkat penyewa, Anda tidak perlu menentukannya di sini. -- Operasikan tabel t_f di skema s_3 di bawah projectB 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>; -- Operasikan resource res_f.jar di skema s_3 di bawah projectB add jar xxx ;-- Perintah add resource hanya dapat dijalankan di skema atau proyek saat ini. Tidak dapat dijalankan lintas skema atau proyek. Oleh karena itu, Anda harus beralih ke projectB dan menggunakan skema s_3 untuk operasi normal. -- Untuk operasi lintas proyek dan lintas skema, gunakan tanda titik dua (:) untuk memisahkan level resource. 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; -- Operasikan fungsi fun_f di skema s_3 di bawah projectB 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
Berikan izin pada objek skema.
Izin untuk operasi objek skema (CreateTable, CreateResource, CreateFunction) diberikan di tingkat proyek. Jika Anda memiliki izin ini pada suatu proyek, izin tersebut berlaku untuk semua skema di proyek tersebut. Kontrol akses tingkat skema akan tersedia di rilis mendatang.
CatatanPemilik skema secara default memiliki semua izin akses dan izin kontrol akses untuk skema tersebut serta resource di dalamnya.
Jika Anda memiliki izin CreateTable, CreateResource, dan CreateFunction pada proyek, Anda secara otomatis mewarisi izin yang sesuai untuk skema di proyek tersebut.
Izin pada objek resource di skema.
Ketika memberikan izin pada objek resource di skema, tentukan nama objek lengkap (
project.schema.table). Untuk daftar izin tingkat objek, lihat MaxCompute permissions. Anda juga dapat memberikan izin melalui konsol manajemen. Untuk informasi selengkapnya, lihat Manage user permissions using the console.-- Berikan izin kepada role untuk semua tabel di skema. GRANT <schemaObjectPrivileges> ON TABLE <project_name>.<schema_name>.* TO role {rolename}; -- Cabut izin dari role untuk semua tabel di skema. REVOKE <schemaObjectPrivileges> ON TABLE <project_name>.<schema_name>.* FROM role {rolename}; -- Berikan izin kepada role atau pengguna untuk tabel tertentu di skema. GRANT <schemaObjectPrivileges> ON TABLE <project_name>.<schema_name>.<tablename> TO {role|user} {rolename | USER name};-- Berikan izin kepada role atau pengguna untuk tabel tertentu di skema. -- Cabut izin dari role atau pengguna untuk tabel tertentu di skema. 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>;CatatanMetode otorisasi wildcard
*hanya didukung dalam pernyataanGRANT TO role, dan tidak didukung dalam pernyataanGRANT TO user.Untuk memastikan keamanan data, sintaks
GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.xxx* TO role {rolename};tidak didukung.