Skema memungkinkan Anda mengelola tabel, resource, dan fungsi pada tingkat granularitas yang lebih rinci dalam proyek MaxCompute. Topik ini mencakup konsep skema, izin, dan penggunaannya.
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 tersebut ditempatkan langsung di bawah proyek, sehingga proyek berperan sekaligus sebagai database dan skema. Hal ini menyulitkan manajemen, terutama ketika proyek berisi banyak objek. MaxCompute kini mendukung skema, yang memungkinkan Anda mengklasifikasikan tabel, resource, dan fungsi dalam suatu proyek. Gambar berikut menunjukkan hierarkinya.
Lingkup
Fitur skema MaxCompute terus mengalami peningkatan. Beberapa modul fungsional belum diadaptasi untuk skema. Operasi yang dimulai dari modul-modul tersebut 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 (job)
-
Spark job 3.1.1 dan versi lebih baru mendukung fitur skema.
-
Anda harus mengatur parameter berikut untuk Spark job:
spark.sql.catalog.odps.enableNamespaceSchema=true -
Job 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 lainnya, 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 dalam suatu 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 job.
-
-
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 job
Pengaturan ini hanya berlaku untuk job 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 yang ada, Anda dapat mengaktifkan sakelar sintaks tingkat penyewa. Setelah diaktifkan, semua proyek baru akan mendukung fitur skema. Semua permintaan akan diurai berdasarkan sintaks
odps.namespace.schema = truesecara default.-
Masuk ke MaxCompute console dan pilih wilayah di pojok kiri atas.
-
Di panel navigasi sebelah 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 yang sudah ada dan sedikit atau tidak ada job yang berjalan, 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 MaxCompute console dan pilih wilayah di pojok kiri atas.
-
Di panel navigasi sebelah kiri, pilih .
-
Di halaman Projects, klik Enable Schema di kolom Actions untuk proyek target.
-
-
Kemudian, aktifkan Tenant-level Schema Syntax.
-
Di panel navigasi sebelah kiri, pilih .
-
Di halaman Tenants, klik tab Tenant Property.
-
Di tab Tenant Property, aktifkan sakelar Tenant-level Schema Syntax.
-
-
-
Jika Anda memiliki proyek dan job yang sudah ada dan perlu meningkatkan proyek tertentu agar mendukung skema, ikuti langkah-langkah berikut. Setelah peningkatan,
SchemabernamaDEFAULTdibuat di proyek secara default.-
Masuk ke MaxCompute console dan pilih wilayah di pojok kiri atas.
-
Di panel navigasi sebelah 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 job 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 MaxCompute console, 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.
Kelola skema menggunakan konsol manajemen
-
Masuk ke MaxCompute console dan pilih wilayah di pojok kiri atas.
-
Di panel navigasi sebelah kiri, pilih .
-
Di halaman Projects, klik Manage di kolom Actions untuk proyek target.
-
Di halaman Project Settings, klik tab Schema.
Tab Schema hanya terlihat 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.
Semua deskripsi 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: Mengoperasikan objek dalam skema dalam proyek yang sama (projectA).
-
Mengoperasikan objek dalam skema default.
use projectA; set odps.namespace.schema=true;-- Jika ini diatur di tingkat penyewa, Anda tidak perlu menentukannya di sini. -- Mengoperasikan 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>; -- Mengoperasikan 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; -- Mengoperasikan 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....
-
-
Mengoperasikan objek dalam 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. -- Mengoperasikan 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>; -- Mengoperasikan 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>; -- Mengoperasikan 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; -- Mengoperasikan 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; -- Mengoperasikan 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; -- Mengoperasikan 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: Melakukan operasi lintas proyek (mengoperasikan objek di ProjectB dari ProjectA).
use projectA; set odps.namespace.schema=true; -- Jika ini diatur di tingkat penyewa, Anda tidak perlu menentukannya di sini. -- Mengoperasikan tabel t_f dalam 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>; -- Mengoperasikan resource res_f.jar dalam 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; -- Mengoperasikan fungsi fun_f dalam 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 dalam proyek tersebut. Kontrol akses tingkat skema akan tersedia di rilis mendatang.
Catatan-
Pemilik 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 suatu proyek, Anda secara otomatis mewarisi izin yang sesuai untuk skema dalam proyek tersebut.
-
-
Izin pada objek resource dalam skema.
Ketika Anda memberikan izin pada objek resource dalam skema, tentukan nama objek lengkap (
project.schema.table). Sintaks otorisasi adalah sebagai berikut. 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 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 dalam skema. GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.<tablename> TO {role|user} {rolename | USER name};-- Berikan role atau pengguna izin pada tabel tertentu dalam skema. -- Cabut izin role atau pengguna pada tabel tertentu dalam 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>;CatatanUntuk memastikan keamanan data, sintaks
GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.xxx* TO role {rolename};tidak didukung.