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).
Untuk mengumpulkan statistik akun dengan biaya top N dan pekerjaan yang paling memakan waktu dari proyek MaxCompute, ikuti langkah-langkah berikut:
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:
Masuk ke Klien MaxCompute dan jalankan perintah berikut:
install package Information_Schema.systables;Masuk ke Konsol DataWorks dan buka halaman Ad Hoc Query. Untuk informasi lebih lanjut tentang kueri ad hoc, lihat Gunakan Fitur Kueri Ad-Hoc untuk Mengeksekusi Pernyataan SQL (Opsional). Jalankan perintah berikut:
install package Information_Schema.systables;
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.
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 );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.CatatanJika 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:
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 );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 );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 );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 ;CatatanDalam kode sampel sebelumnya,
task_type = 'SQL'menunjukkan pekerjaan SQL,task_type = 'SQLRT'menunjukkan pekerjaan Percepatan Kueri MaxCompute (MCQA), dantask_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.