All Products
Search
Document Center

MaxCompute:Operasi skema

Last Updated:Aug 15, 2026

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=true
    • Pekerjaan 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=false hanya dapat diakses dalam mode yang sama. Aturan yang sama berlaku untuk mode odps.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.c diurai sebagai project.schema.table. Pernyataan dalam format a.b diurai sebagai schema.table.

    • Ketika sintaks skema dinonaktifkan, pernyataan dalam format a.b.c tidak dikenali. Pernyataan dalam format a.b diurai sebagai project.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 = true secara default.

    1. Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi kiri, pilih Manage Configurations > Tenants .

    3. Di halaman Tenants, klik tab Tenant Property.

    4. 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=true secara default.

    1. Pertama, tingkatkan semua proyek yang ada agar mendukung skema.

      1. Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

      2. Di panel navigasi kiri, pilih Manage Configurations > Projects.

      3. Di halaman Projects, klik Enable Schema di kolom Actions untuk proyek target.

    2. Kemudian, aktifkan Tenant-level Schema Syntax.

      1. Di panel navigasi kiri, pilih Manage Configurations > Tenants .

      2. Di halaman Tenants, klik tab Tenant Property.

      3. 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 Schema bernama DEFAULT akan dibuat di proyek secara default.

    1. Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi kiri, pilih Manage Configurations > Projects.

    3. Di halaman Projects, klik Enable Schema di kolom Actions untuk proyek target.

    4. Semua permintaan diurai berdasarkan sintaks odps.namespace.schema = false secara default. Untuk proyek yang telah ditingkatkan, setelah Anda membuat skema kustom, Anda harus mengaktifkan sintaks skema di tingkat pekerjaan dengan menjalankan set 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.tablename hanya mengenali data di Schema bernama DEFAULT.

Catatan penggunaan

Buat proyek

  1. Sebelum menggunakan skema, Anda harus membuat proyek MaxCompute.

  2. 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

  1. Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.

  2. Di panel navigasi kiri, pilih Manage Configurations > Projects.

  3. Di halaman Projects, klik Manage di kolom Actions untuk proyek target.

  4. Di halaman Project Settings, klik tab Schema.

    Tab Schema hanya muncul untuk proyek yang mendukung skema.

  5. 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.

Catatan

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 format a.b, a diurai sebagai skema, b diurai 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 seperti select * from a. Dalam kasus ini, a adalah 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, a adalah 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.

    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 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>;
    Catatan
    • Metode otorisasi wildcard * hanya didukung dalam pernyataan GRANT TO role, dan tidak didukung dalam pernyataan GRANT TO user.

    • Untuk memastikan keamanan data, sintaks GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.xxx* TO role {rolename}; tidak didukung.