全部产品
Search
文档中心

MaxCompute:Mengumpulkan statistik akun dengan biaya top N dan pekerjaan yang memakan waktu top N dari proyek MaxCompute

更新时间:Jul 06, 2025

Selama pengembangan MaxCompute, pengembang data perlu menghitung biaya akun dalam proyek MaxCompute dan durasi pekerjaan untuk membantu merencanakan serta menyesuaikan pekerjaan. Topik ini menjelaskan cara menggunakan layanan metadata MaxCompute Information Schema untuk mengumpulkan statistik akun dengan biaya top N dan pekerjaan yang paling memakan waktu, serta mendorong informasi tersebut ke grup pelanggan melalui DingTalk.

Informasi latar belakang

Dalam banyak kasus, pengembang data menggunakan MaxCompute berdasarkan ruang kerja DataWorks dalam mode standar. MaxCompute mencatat akun Alibaba Cloud yang sama sebagai akun eksekusi sebagian besar pekerjaan di Information Schema. Pengguna RAM dicatat sebagai akun eksekusi hanya untuk sejumlah kecil pekerjaan. Dalam hal ini, pengembang data ingin mengetahui cara mengumpulkan statistik biaya setiap akun dan pekerjaan yang paling memakan waktu. Untuk menyelesaikan masalah ini, MaxCompute menyediakan solusi berikut:

  • Untuk mengumpulkan statistik biaya akun, Anda dapat menanyakan rincian penggunaan pada halaman Rincian Tagihan di konsol Manajemen Penagihan. Namun, Anda tidak dapat mengidentifikasi pengguna RAM kepada siapa rincian penggunaan tersebut milik. Tampilan TASKS_HISTORY dari layanan Information Schema mencatat rincian pekerjaan yang telah selesai dalam proyek MaxCompute dan menyimpan data selama 14 hari terakhir. Anda dapat mencadangkan data dalam tampilan TASKS_HISTORY ke proyek MaxCompute yang ditentukan dan mengumpulkan statistik akun dengan biaya top N berdasarkan data tersebut.

  • Anda dapat mengumpulkan statistik pekerjaan yang paling memakan waktu berdasarkan data dalam tampilan TASKS_HISTORY.

Untuk informasi lebih lanjut tentang fitur dan batasan layanan Information Schema, lihat Information Schema Tingkat Proyek (Akan Dihapus).

Langkah 1: Dapatkan layanan Information Schema

Mulai 1 Maret 2024, MaxCompute tidak lagi secara otomatis menyediakan layanan Information Schema tingkat proyek untuk proyek baru. Secara default, tidak ada paket Information Schema tingkat proyek yang disediakan untuk proyek yang dibuat pada 1 Maret 2024 dan seterusnya. Jika Anda ingin menanyakan metadata, Anda dapat menggunakan Information Schema tingkat penyewa untuk mendapatkan informasi yang lebih komprehensif. Untuk informasi lebih lanjut tentang cara menggunakan Information Schema tingkat penyewa, lihat Information Schema Tingkat Penyewa.

Sebelum menggunakan Information Schema dalam proyek yang ada, Anda harus mendapatkan izin untuk mengakses metadata proyek. Untuk mendapatkan izin, instal paket izin Information Schema sebagai pemilik proyek atau pengguna RAM yang ditugaskan peran Super_Administrator. Untuk informasi lebih lanjut, lihat Tetapkan Peran kepada Pengguna. Anda dapat menggunakan salah satu metode berikut untuk menginstal paket izin:

Catatan

Untuk mengumpulkan metadata dari beberapa proyek MaxCompute, Anda harus menginstal paket izin Information Schema untuk setiap proyek MaxCompute. Kemudian, Anda harus memasukkan metadata cadangan dari setiap proyek MaxCompute ke tabel yang sama untuk analisis statistik terpusat.

(Opsional) Langkah 2: Berikan izin kepada pengguna selain pemilik proyek

Tampilan yang disediakan oleh Information Schema berisi semua data pengguna di tingkat proyek. Secara default, pemilik proyek dapat melihat data pengguna dari proyek ini. Pengguna atau peran lain dalam proyek harus diberikan izin yang diperlukan untuk melihat data tersebut. Untuk informasi lebih lanjut, lihat Akses Sumber Daya Lintas Proyek Berdasarkan Paket.

Sintaksis pernyataan yang digunakan untuk memberikan izin kepada pengguna atau peran:

grant <actions> on package Information_Schema.systables to user <user_name>;
grant <actions> on package Information_Schema.systables to role <role_name>;
  • actions: izin yang ingin Anda berikan. Atur nilainya menjadi Read.

  • user_name: akun Alibaba Cloud atau pengguna RAM yang ditambahkan ke proyek.

    Anda dapat menjalankan perintah list users; pada Klien MaxCompute untuk mendapatkan akun pengguna.

  • role_name: peran yang ditambahkan ke proyek.

    Anda dapat menjalankan perintah list roles; pada Klien MaxCompute untuk menanyakan nama peran.

Contoh:

grant read on package Information_Schema.systables to user RAM$Bob@aliyun.com:user01;

Langkah 3: Unduh dan cadangkan metadata

Buat tabel cadangan metadata di proyek MaxCompute dan tulis metadata ke tabel cadangan pada interval reguler. Contoh berikut menjelaskan prosedur pada Klien MaxCompute.

  1. Masuk ke Klien MaxCompute dan jalankan perintah berikut untuk membuat tabel cadangan metadata.

    -- project_name menentukan nama proyek MaxCompute.
    create table if not exists <project_name>.information_history
    (
        task_catalog STRING
        ,task_schema STRING
        ,task_name STRING
        ,task_type STRING
        ,inst_id STRING
        ,`status` STRING
        ,owner_id STRING
        ,owner_name STRING
        ,result STRING
        ,start_time DATETIME
        ,end_time DATETIME
        ,input_records BIGINT
        ,output_records BIGINT
        ,input_bytes BIGINT
        ,output_bytes BIGINT
        ,input_tables STRING
        ,output_tables STRING
        ,operation_text STRING
        ,signature STRING
        ,complexity DOUBLE
        ,cost_cpu DOUBLE
        ,cost_mem DOUBLE
        ,settings STRING
        ,ds STRING
    );
  2. Di halaman DataStudio di Konsol DataWorks, buat node ODPS SQL bernama information_history dan konfigurasikan penjadwalan periodik untuk menulis data ke tabel cadangan information_history pada interval reguler. Lalu, klik ikon 保存 di sudut kiri atas untuk menyimpan konfigurasi.

    Untuk informasi lebih lanjut tentang cara membuat node ODPS SQL, lihat Kembangkan Tugas SQL MaxCompute.

    Kode sampel berikut memberikan contoh untuk node ODPS SQL.

    -- project_name menentukan nama proyek MaxCompute.
    use <project_name>;
    insert into table <project_name>.information_history select * from information_schema.tasks_history where ds ='datetime1';

    ${datetime1} adalah parameter penjadwalan DataWorks. Untuk mengonfigurasi parameter ini, lakukan operasi berikut: Di sebelah kanan node ODPS SQL, klik tab Properties. Di bagian General panel Properti, tambahkan parameter ${datetime1} dan tetapkan nilai ${yyyymmdd} ke parameter ini.

    Catatan

    Jika Anda ingin menganalisis metadata dari beberapa proyek MaxCompute pada saat yang sama, Anda dapat membuat beberapa node ODPS SQL dan menulis metadata dari proyek MaxCompute ini ke tabel cadangan yang sama.

Langkah 4: Buat tabel dan node DataWorks untuk mengumpulkan statistik akun dengan biaya top N dan pekerjaan yang memakan waktu

Bidang settings dalam tampilan TASKS_HISTORY mencatat informasi yang dijadwalkan oleh aplikasi lapisan atas atau ditentukan oleh pengguna. Informasi tersebut disimpan dalam format JSON. Informasi tersebut mencakup bidang seperti USERAGENT, BIZID, SKYNET_ID, dan SKYNET_NODENAME. Anda dapat menemukan informasi tentang pengguna RAM yang membuat pekerjaan berdasarkan informasi dalam bidang settings. Oleh karena itu, Anda dapat mengumpulkan statistik akun dengan biaya top N dan pekerjaan yang paling memakan waktu berdasarkan tabel cadangan. Untuk mengumpulkan statistik, ikuti langkah-langkah berikut:

  1. Masuk ke Klien MaxCompute. Buat tabel bernama user_ram untuk mencatat nama dan ID pengguna RAM.

    Pernyataan contoh:

    create table if not exists <project_name>.user_ram
    (
        user_id STRING
        ,user_name STRING
    );
  2. Buat tabel bernama cost_topn untuk mencatat rincian akun dengan biaya top N.

    Pernyataan contoh:

    create table if not exists <project_name>.cost_topn
    (
        cost_sum DECIMAL(38,5)
        ,task_owner STRING
    )
    partitioned by 
    (
        ds STRING
    );
  3. Buat tabel bernama time_topn untuk mencatat rincian pekerjaan yang paling memakan waktu top N.

    Pernyataan contoh:

    create table if not exists <project_name>.time_topn
    (
        inst_id STRING
        ,cost_time BIGINT
        ,task_owner STRING
    )
    partitioned by 
    (
        ds STRING
    );
  4. Di halaman DataStudio di Konsol DataWorks, buat node ODPS SQL bernama topn dan konfigurasikan penjadwalan periodik untuk menulis data statistik dari tabel cost_topn ke tabel user_ram pada interval reguler. Klik ikon 保存 di sudut kiri atas untuk menyimpan konfigurasi.

    Untuk informasi lebih lanjut tentang cara membuat node ODPS SQL, lihat Kembangkan Tugas SQL MaxCompute.

    Kode sampel berikut memberikan contoh untuk node ODPS SQL.

    -- Aktifkan edisi tipe data MaxCompute V2.0. Untuk informasi lebih lanjut tentang edisi tipe data MaxCompute V2.0, lihat dokumentasi edisi tipe data MaxCompute V2.0.
    set odps.sql.decimal.odps2=true;
    -- Tulis metadata ke tabel cost_topn dan time_topn. user_id menentukan ID akun. Anda dapat melihat ID akun di halaman Pengaturan Keamanan.
    insert into table <project_name>.cost_topn partition (ds = '${datetime1}')
    select   
    nvl(cost_sum,0) cost_sum
            ,case when a.task_owner='<user_id>' or a.task_owner='<user_id>' or a.task_owner='<user_id>' then b.user_name 
                  else a.task_owner 
             end task_owner 
    from    (
                select  inst_id
                        ,owner_name
                        ,task_type
                        ,a.input_bytes
                        ,a.cost_cpu
                        ,a.status
                        ,case    when a.task_type = 'SQL' then cast(a.input_bytes/1024/1024/1024 * a.complexity * 0.3 as DECIMAL(18,5) )
                                 when a.task_type = 'SQLRT' then cast(a.input_bytes/1024/1024/1024 * a.complexity * 0.3 as DECIMAL(18,5) )
                                 when a.task_type = 'CUPID' and a.status='Terminated'then cast(a.cost_cpu/100/3600 * 0.66 as DECIMAL(18,5) ) 
                                 else 0 
                         end cost_sum
                        ,a.settings
                        ,get_json_object(settings, "$.SKYNET_ONDUTY") owner
                        ,case    when get_json_object(a.settings, "$.SKYNET_ONDUTY") is null then owner_name 
                                 else get_json_object(a.settings, "$.SKYNET_ONDUTY") 
                         end task_owner
                from    information_history
                where   ds = '${datetime1}'
            ) a
    left join <project_name>.user_ram b
    on      a.task_owner = b.user_id;
    
    insert into table <project_name>.time_topn partition(ds = '${datetime1}')
    select  inst_id
            ,cost_time
            ,case    when a.task_owner='<user_id>' or a.task_owner='<user_id>' or a.task_owner='<user_id>' then b.user_name 
                     else a.task_owner 
             end task_owner
    from    (
                select  inst_id
                        ,task_type
                        ,status
                        ,datediff(a.end_time, a.start_time, 'ss') AS cost_time
                        ,case    when get_json_object(a.settings, "$.SKYNET_ONDUTY") is null then owner_name 
                                 else get_json_object(a.settings, "$.SKYNET_ONDUTY") 
                         end task_owner
                from    <project_name>.information_history a
                where   ds = '${datetime1}'
            ) a
    left join <project_name>.user_ram b
    on      a.task_owner = b.user_id
    ;
    Catatan

    Dalam kode sampel sebelumnya, task_type = 'SQL' menunjukkan pekerjaan SQL, task_type = 'SQLRT' menunjukkan pekerjaan Percepatan Kueri MaxCompute (MCQA), dan task_type = 'CUPID' menunjukkan pekerjaan Spark. Jika Anda ingin mengumpulkan statistik pada pekerjaan tagihan lainnya, seperti MapReduce dan pekerjaan Mars, Anda dapat menambahkan baris kode berdasarkan rumus penagihan. Untuk informasi lebih lanjut tentang penagihan, lihat Harga Komputasi (Bayar per Penggunaan).

    ${datetime1} adalah parameter penjadwalan DataWorks. Untuk mengonfigurasi parameter ini, lakukan operasi berikut: Di sebelah kanan node ODPS SQL, klik tab Properties. Di bagian General panel Properti, tambahkan parameter ${datetime1} dan tetapkan nilai ${yyyymmdd} ke parameter ini.

Langkah 5: Konfigurasikan properti penjadwalan node hulu dan hilir dan jalankan node saat ini

Gambarlah garis di kanvas alur kerja untuk mengonfigurasi dependensi penjadwalan antara node information_history, topn, dan dingsend. Di panel Properti alur kerja, konfigurasikan atribut ulang dan node hulu dari setiap node. Setelah konfigurasi selesai, klik kanan node dan pilih Run Current Node.

Untuk informasi lebih lanjut tentang cara mengonfigurasi dependensi, lihat Konfigurasikan Dependensi Penjadwalan Siklus yang Sama.

Untuk informasi lebih lanjut tentang cara mengonfigurasi node hulu dan hilir, lihat Konfigurasikan Parameter Input dan Output.

Referensi

Dukungan teknis

Jika Anda memiliki pertanyaan atau saran tentang MaxCompute, cari ID grup DingTalk 11782920 dan bergabunglah dengan grup DingTalk untuk dukungan teknis.