全部产品
Search
文档中心

MaxCompute:Operasi skema

更新时间:Dec 06, 2025

MaxCompute mendukung skema, yang memungkinkan Anda mengelola objek seperti tabel, resource, dan fungsi dengan tingkat granularitas yang lebih rinci dalam suatu Proyek. Topik ini menjelaskan konsep skema, izin terkait, serta cara penggunaannya.

Latar Belakang

Proyek MaxCompute merupakan unit organisasi dasar sekaligus batas utama untuk isolasi multi-pengguna dan kontrol akses.

Sebuah Proyek berisi objek seperti tabel, resource, dan fungsi. Sebelumnya, objek-objek tersebut ditempatkan langsung di bawah Proyek, sehingga Proyek berperan ganda sebagai database atau skema—mirip dengan database tradisional. Peran ganda ini menyebabkan ketidakjelasan konsep dan kurang praktis, terutama saat sebuah Proyek berisi banyak tabel atau objek. Kini, MaxCompute mendukung skema, yang memungkinkan Anda mengklasifikasikan tabel, resource, dan fungsi dalam suatu Proyek. Hierarkinya ditunjukkan pada gambar berikut.层级图

Cakupan

Fitur skema MaxCompute terus dikembangkan. Beberapa modul fungsional yang sudah ada belum sepenuhnya diadaptasi untuk fitur ini. Operasi yang diprakarsai dari modul-modul tersebut ke MaxCompute 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.

    • Sebagai contoh, untuk spark.hadoop.odps.spark.version=spark-3.1.1-odps0.35.0, Anda harus mengatur parameter berikut untuk pekerjaan Spark:

    • 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
    • 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 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 hanya dapat berinteraksi dengan skema di MaxCompute 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 penting

  • Skema

    Skema adalah objek yang digunakan untuk mengklasifikasikan tabel, resource, dan UDF dalam suatu Proyek. Satu Proyek dapat berisi beberapa skema.

  • Saklar sintaks skema

    Setelah Anda mengaktifkan saklar sintaks skema, sistem dapat mengurai semantik project.schema.table untuk menggunakan fitur skema.

    • 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. Saklar ini dapat diatur di tingkat penyewa maupun tingkat pekerjaan.

  • Skema default

    Untuk Proyek yang menggunakan fitur skema, skema bawaan bernama DEFAULT 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 memengaruhi semantik 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 yang ada, Anda dapat mengaktifkan saklar sintaks di tingkat penyewa. Setelah diaktifkan, semua Proyek baru 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 sebelah kiri, pilih Manage Configurations > Tenants.

    3. Di halaman Tenants, klik tab Tenant Property.

    4. Di tab Tenant Property, aktifkan Tenant-level Schema Syntax.

  • Jika Anda memiliki 10 Proyek yang ada atau kurang, serta sedikit atau tidak ada pekerjaan yang ada, Anda dapat mengikuti langkah-langkah berikut untuk menyesuaikan lingkungan Anda dengan fitur skema. Setelah adaptasi, Proyek baru akan mendukung fitur 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 sebelah kiri, pilih Manage Configurations > Projects.

      3. Di halaman Projects, temukan Proyek target, lalu di kolom Actions, klik Upgrade to Support Schemas.

    2. Kemudian, aktifkan Tenant-level Schema Syntax.

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

      2. Di halaman Tenants, klik tab Tenant Property.

      3. Di tab Tenant Property, aktifkan Tenant-level Schema Syntax.

  • Jika Anda memiliki proyek dan pekerjaan yang sudah ada dan perlu meningkatkan proyek tertentu untuk mendukung fitur skema sesuai kebutuhan bisnis baru, Anda dapat mengikuti 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 sebelah kiri, pilih Manage Configurations > Projects.

    3. Di halaman Projects, temukan Proyek target, lalu di kolom Actions, klik Upgrade to Support Schemas.

    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 dalam 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 dalam Schema bernama DEFAULT.

Catatan penggunaan

Buat Proyek

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

  2. Saat membuat Proyek di Konsol MaxCompute, jika saklar sintaks di 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

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

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

  3. Di halaman Projects, temukan Proyek target, lalu klik Manage di kolom Actions.

  4. Di halaman Project Settings, klik tab Schema.

    Tab Schema hanya terlihat untuk Proyek yang mendukung skema.

  5. Di tab Schema, Anda dapat melihat daftar skema serta membuat atau menghapus skema.

Operasikan objek dalam skema

Anda dapat mengedit perintah dalam format project.schema.table.

Catatan

Semua deskripsi objek Tabel dalam topik ini juga berlaku untuk objek View, Resource, dan Function.

  • Saat 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 Proyek-nya adalah Proyek saat ini.

  • Dalam Proyek yang sama, Anda dapat menjalankan perintah use schema <schema_name> untuk menentukan skema saat ini. Setelah itu, 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: Mengoperasikan objek dalam skema dalam Proyek yang sama (projectA).

    • Mengoperasikan objek dalam skema default.

      use projectA;
      set odps.namespace.schema=true;-- Jika ini telah 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 telah 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 telah 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 pada objek skema, seperti CreateTable, CreateResource, dan CreateFunction, harus diberikan di tingkat Proyek. Jika Anda memiliki izin operasi ini pada suatu Proyek, Anda juga memiliki izin untuk semua skema dalam Proyek tersebut. Kontrol akses untuk objek skema akan diimplementasikan dalam 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.

    Saat memberikan izin pada objek resource dalam skema, Anda harus menentukan nama objek lengkap (project.schema.table). Sintaks otorisasi adalah sebagai berikut. Untuk daftar izin pada objek tertentu, seperti tabel, resource, dan fungsi, 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 dalam skema.
    GRANT schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.* TO role {rolename};
    -- Cabut izin dari role untuk semua tabel dalam skema.
    REVOKE schemaObjectPrivileges ON TABLE <project_name>.<schema_name>.* FROM role {rolename};
    -- Berikan izin kepada role atau pengguna untuk tabel tertentu dalam 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 dalam skema.
    -- Cabut izin dari role atau pengguna untuk 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>;
    Catatan

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