Task, seperti task SQL, merupakan unit dasar komputasi dalam MaxCompute. Topik ini menjelaskan operasi dasar untuk instans task di PyODPS.
Operasi dasar
Saat sebuah task dijalankan, task tersebut diwujudkan sebagai instans MaxCompute, yang juga disebut sebagai instans. Berikut adalah operasi umum untuk instans:
list_instances(): Mengambil semua instans dalam suatu proyek.exist_instance(): Memeriksa apakah suatu instans ada.get_instance(): Mengambil suatu instans.stop_instance(): Menghentikan suatu instans. Anda hanya dapat menghentikan instans yang sedang berjalan. Kesalahan akan dilaporkan jika Anda mencoba menghentikan instans yang berada dalam status lainnya.CatatanMemanggil metode
stoppada objek Instance juga akan menghentikan instans tersebut. Contohnya:o.get_instance('instance id').stop.
Contoh
Mengambil ID suatu instans
for instance in o.list_instances(): print(instance.id)Memeriksa apakah suatu instans ada
print(o.exist_instance('my_instance_id'))
Mendapatkan alamat Logview
Untuk task seperti task SQL, Anda dapat memanggil metode
get_logview_addresspada objek Instance untuk mengambil alamat Logview.# Mendapatkan alamat Logview dari objek instans yang sudah ada. instance = o.run_sql('desc pyodps_iris') print(instance.get_logview_address()) # Mendapatkan alamat Logview dari ID instans. instance = o.get_instance('my_instance_id') print(instance.get_logview_address())Untuk task PAI, Anda dapat terlebih dahulu mendaftar subtask-nya, lalu mengambil alamat Logview untuk setiap subtask tersebut.
instance = o.run_xflow('AppendID', 'algo_public', {'inputTableName': 'input_table', 'outputTableName': 'output_table'}) for sub_inst_name, sub_inst in o.get_xflow_sub_instances(instance).items(): print('%s: %s' % (sub_inst_name, sub_inst.get_logview_address()))
Status instans task
Status suatu instans dapat berupa Running, Suspended, atau Terminated. Metode berikut terkait dengan status instans:
status: Properti untuk mengambil status.is_terminated: Mengembalikan apakah instans telah selesai dijalankan.is_successful: Mengembalikan apakah instans dijalankan dengan sukses. Metode ini mengembalikan False jika task sedang berjalan atau gagal.
Kode berikut memberikan contohnya.
Mengambil status suatu instans.
instance=o.get_instance('my_instance_id') print(instance.status) print(instance.status.value)Nilai kembali contoh:
Status.TERMINATED TerminatedMemeriksa apakah instans saat ini telah selesai dijalankan.
instance=o.get_instance('my_instance_id') from odps.models import Instance print(instance.status == Instance.Status.TERMINATED)Nilai kembali
Truemenunjukkan bahwa instans telah selesai dijalankan.
Memanggil metode wait_for_completion akan memblokir proses hingga instans selesai dijalankan. Metode wait_for_success juga memblokir proses, tetapi melemparkan exception jika task gagal.
Operasi subtask
Suatu instans dapat berisi satu atau beberapa subtask selama waktu proses. Subtask ini juga disebut sebagai task. Perlu diperhatikan bahwa `Task` ini berbeda dari unit dasar komputasi dalam MaxCompute. Metode berikut tersedia untuk task-task ini:
get_task_names: Mengambil nama semua subtask. Metode ini mengembalikan daftar nama.instance=o.get_instance('my_instance_id') instance.get_task_names()Nilai kembali contoh:
['jdbc_sql_task']get_task_result: Mengambil hasil eksekusi task tertentu. Metode ini mengembalikan hasil eksekusi setiap task sebagai dictionary. Kode berikut memberikan contohnya:Mengambil nama subtask.
instance=o.execute_sql('select*frompyodps_irislimit1') print(instance.get_task_names())Nilai kembali contoh:
['AnonymousSQLTask']Mengambil hasil eksekusi subtask.
print(instance.get_task_result('AnonymousSQLTask'))Nilai kembali contoh:
"sepallength","sepalwidth","petallength","petalwidth","name" 4.9,3.0,1.4,0.2,"Iris-setosa"Mengambil hasil subtask.
print(instance.get_task_results())Nilai kembali contoh:
OrderedDict([('AnonymousSQLTask', '"sepallength","sepalwidth","petallength","petalwidth","name"\n4.9,3.0,1.4,0.2,"Iris-setosa"\n')])
get_task_progress: Mengambil progres saat ini dari suatu task selama instans sedang berjalan.instance=o.get_instance('20160519101349613gzbzufck2') while not instance.is_terminated(): for task_name in instance.get_task_names(): print(instance.id, instance.get_task_progress(task_name).get_stage_progress_formatted_string()) time.sleep(10)Nilai kembali contoh:
20160519101349613gzbzufck2 2016-05-19 18:14:03 M1_Stg1_job0:0/1/1[100%]