PyODPS, SDK Python untuk MaxCompute, memungkinkan Anda mengembangkan dan menjalankan task PyODPS di DataWorks. Topik ini menjelaskan batasan-batasan, menguraikan alur kerja utama, serta menyediakan contoh sederhana untuk memulai.
Batasan
-
Batasan penggunaan
Jika Anda menerima error Got killed, proses tersebut dihentikan karena melebihi batas memori. Hindari mengunduh data dalam node PyODPS untuk diproses di DataWorks. Sebagai gantinya, kirimkan task pemrosesan data ke MaxCompute untuk eksekusi terdistribusi. Untuk perbandingan kedua metode tersebut, lihat Peringatan: Jangan mengunduh seluruh data secara lokal untuk menjalankan PyODPS.
-
Batasan dukungan paket
-
Node PyODPS di DataWorks tidak menyertakan beberapa paket, seperti matplotlib. Hal ini dapat membatasi fitur-fitur berikut:
-
Fungsi
plotdari DataFrame. -
user-defined function (UDF) DataFrame harus dikirimkan ke MaxCompute untuk dieksekusi. Sandbox Python hanya mendukung pustaka Python murni dan NumPy sebagai pustaka pihak ketiga, sehingga mencegah penggunaan langsung Pandas.
-
Pada kode yang dijalankan di DataWorks tanpa UDF, Anda dapat menggunakan paket NumPy dan Pandas yang telah dipra-instal. Paket pihak ketiga lain yang berisi kode biner tidak didukung.
-
-
Node PyODPS di DataWorks tidak mendukung paket Python atexit. Gunakan blok try-finally untuk mengimplementasikan fungsionalitas serupa.
-
-
Batas jumlah catatan data yang dapat dibaca
Secara default, options.tunnel.use_instance_tunnel diatur ke
Falseuntuk node PyODPS di DataWorks, sehingga membatasi pembacaan maksimal hingga 10.000 catatan. Untuk membaca lebih banyak catatan, Anda harus mengaktifkan secara global instance tunnel dengan mengatur options.tunnel.use_instance_tunnel keTrue.
Prosedur
-
Buat node PyODPS.
Buka halaman Data Development di DataWorks untuk membuat node PyODPS. Node PyODPS tersedia dalam dua jenis:
-
PyODPS 2, yang berbasis Python 2.
-
PyODPS 3, yang berbasis Python 3.
Buat node PyODPS sesuai versi Python yang Anda gunakan. Untuk langkah-langkah detail, lihat Kembangkan task PyODPS 2 dan Kembangkan task PyODPS 3.
-
-
Kembangkan kode untuk task PyODPS.
Setelah membuat node, ikuti contoh pada bagian berikut untuk mempelajari kemampuan utama PyODPS.
Untuk informasi lebih lanjut tentang cara menggunakan PyODPS, lihat Ikhtisar operasi dasar dan DataFrame (tidak direkomendasikan). Anda juga dapat mengikuti contoh dalam Gunakan node PyODPS untuk segmentasi kata bahasa Tionghoa Jieba untuk melakukan operasi end-to-end sederhana.
-
Konfigurasikan properti penjadwalan, lalu simpan, komit, dan deploy node agar dapat berjalan secara berkala.
Titik masuk MaxCompute
Di node PyODPS, DataWorks menyediakan variabel global, odps atau o, sebagai titik masuk MaxCompute. Anda tidak perlu mendefinisikannya secara manual. Contohnya:
# Periksa apakah tabel pyodps_iris ada.
print(o.exist_table('pyodps_iris'))
Kode tersebut mengembalikan True, yang menunjukkan bahwa tabel pyodps_iris ada.
Kredensial untuk objek titik masuk o hanya dapat mengakses MaxCompute, bukan layanan cloud lainnya. DataWorks hanya menyediakan kredensial ini selama eksekusi node PyODPS. Anda tidak dapat memperoleh kredensial tambahan dengan memanggil metode pada objek ini, seperti o.from_global.
Eksekusi SQL
Kemampuan umum
-
Anda dapat menjalankan perintah SQL di node PyODPS dengan menggunakan metode seperti execute_sql() atau run_sql(). Metode ini terutama mendukung pernyataan Data Definition Language (DDL) dan Data Manipulation Language (DML).
CatatanMetode
execute_sql()danrun_sql()tidak mendukung semua pernyataan SQL. Untuk pernyataan non-DDL atau non-DML, Anda harus menggunakan metode lain. Misalnya, gunakan metoderun_security_queryuntuk menjalankan pernyataanGRANTatauREVOKE, dan gunakan metoderun_xflowatauexecute_xflowuntuk menjalankan perintah API. -
Untuk membaca hasil eksekusi SQL di node PyODPS, gunakan open_reader().
Untuk informasi lebih lanjut tentang operasi terkait SQL di node PyODPS, lihat SQL.
Peringatan: format data dan batas catatan
Karena alasan kompatibilitas historis, Instance Tunnel tidak diaktifkan secara default di DataWorks. Artinya, parameter instance.open_reader menggunakan antarmuka Result secara default. Antarmuka ini memiliki batas limit sebanyak 10.000 catatan dan mengalami kendala dalam mendukung tipe data kompleks. Jika Proyek Anda tidak memiliki mekanisme perlindungan data dan Anda perlu mengambil semua data secara iteratif atau membaca bidang dengan tipe data kompleks seperti Array, Anda perlu mengaktifkan Instance Tunnel dan menonaktifkan limit.
-
Menonaktifkan
limitsaat waktu prosesAnda dapat menggunakan pernyataan berikut untuk mengaktifkan Instance Tunnel secara global dan menonaktifkan batasan
limit.options.tunnel.use_instance_tunnel = True options.tunnel.limit_instance_tunnel = False # Nonaktifkan limit untuk membaca semua data. with instance.open_reader() as reader: # Anda dapat membaca semua data melalui Instance Tunnel. # Anda dapat menggunakan reader.count untuk mendapatkan jumlah catatan. -
Anda dapat menonaktifkan
limithanya untuk Reader saat ini.Anda juga dapat menambahkan
tunnel=Trueke open_reader untuk mengaktifkan instance tunnel hanya untuk pemanggilan open_reader saat ini. Selain itu, Anda dapat menambahkanlimit=Falseuntuk menonaktifkan batasanlimithanya untuk pemanggilan saat ini.with instance.open_reader(tunnel=True, limit=False) as reader: # Pemanggilan open_reader ini menggunakan antarmuka Instance Tunnel dan dapat membaca semua data.
Untuk informasi lebih lanjut tentang Instance Tunnel dan batas pembacaan data, lihat Baca hasil eksekusi SQL.
DataFrame
-
Eksekusi
Di DataWorks, operasi DataFrame memerlukan pemanggilan eksplisit terhadap metode eksekusi langsung, seperti
executeataupersist. Contohnya:# Panggil metode eksekusi langsung untuk memproses setiap catatan dan mencetak semua data dari tabel pyodps_iris di mana iris.sepalwidth kurang dari 3. from odps.df import DataFrame iris = DataFrame(o.get_table('pyodps_iris')) for record in iris[iris.sepalwidth < 3].execute(): print(record) -
Output verbose
Secara default, opsi
options.verbosediaktifkan di DataWorks, sehingga mencetak informasi detail seperti URL Logview selama eksekusi node. Anda dapat mengonfigurasi opsi ini untuk mengontrol apakah detail tersebut ditampilkan.
Untuk contoh lebih lanjut tentang operasi DataFrame, lihat DataFrame (tidak direkomendasikan).
Parameter penjadwalan
Di node PyODPS, Anda dapat menggunakan parameter penjadwalan untuk memperoleh nilai seperti tanggal bisnis saat task dijalankan. Meskipun definisi dan penggunaan parameter penjadwalan konsisten dengan node SQL, cara mereferensikannya berbeda dalam kode.
-
Node SQL menggunakan string seperti ${param_name} secara langsung dalam kode.
-
Alih-alih melakukan penggantian string untuk ${param_name}, DataWorks menambahkan kamus global bernama
argssebelum node dijalankan. Anda dapat memperoleh nilai parameter penjadwalan dengan mengakses kamus ini, misalnya args[param_name].
Sebagai contoh, jika Anda mengatur parameter penjadwalan ds=${yyyymmdd} di panel , Anda dapat mengambil parameter ini dalam kode sebagai berikut:
-
Dapatkan nilai parameter
ds.print('ds=' + args['ds']) # Mengembalikan waktu ds, misalnya ds=20161116 -
Dapatkan data dari tabel dalam partisi bernama
ds=${yyyymmdd}.o.get_table('table_name').get_partition('ds=' + args['ds']) # Dapatkan data dari partisi ds tabel table_name.
Untuk informasi lebih lanjut tentang parameter penjadwalan, lihat Konfigurasikan dan gunakan parameter penjadwalan.
Petunjuk parameter waktu proses
Untuk mengatur parameter waktu proses suatu task, gunakan parameter hints, yang merupakan dict.
o.execute_sql('select * from pyodps_iris', hints={'odps.sql.mapper.split.size': 16})
Anda juga dapat mengonfigurasi sql.settings secara global. Setelah dikonfigurasi, pengaturan ini akan otomatis ditambahkan ke setiap eksekusi.
from odps import options
options.sql.settings = {'odps.sql.mapper.split.size': 16}
o.execute_sql('select * from pyodps_iris') # Petunjuk ditambahkan berdasarkan konfigurasi global.
Paket pihak ketiga
Node DataWorks telah dipra-instal dengan paket pihak ketiga berikut. Tabel berikut mencantumkan versi yang tersedia.
|
Nama paket |
Versi Python 2 |
Versi Python 3 |
|
requests |
2.11.1 |
2.26.0 |
|
numpy |
1.16.6 |
1.18.1 |
|
pandas |
0.24.2 |
1.0.5 |
|
scipy |
0.19.0 |
1.3.0 |
|
scikit_learn |
0.18.1 |
0.22.1 |
|
pyarrow |
0.16.0 |
2.0.0 |
|
lz4 |
2.1.4 |
3.1.10 |
|
zstandard |
0.14.1 |
0.17.0 |
Jika Anda memerlukan paket yang tidak dipra-instal, Anda dapat menggunakan metode load_resource_package untuk memuat paket pihak ketiga dari resource MaxCompute. Pertama, buat arsip paket dengan pyodps-pack, lalu gunakan load_resource_package untuk memuatnya sebelum mengimpor isinya. Untuk informasi lebih lanjut tentang cara menggunakan pyodps-pack, lihat Buat paket pihak ketiga untuk PyODPS dan Gunakan paket pihak ketiga di PyODPS.
Saat membuat paket untuk node Python 2, tambahkan parameter --dwpy27 ke perintah pyodps-pack.
Contoh:
-
Gunakan perintah berikut untuk memaketkan
ipaddress.pyodps-pack -o ipaddress-bundle.tar.gz ipaddress -
Setelah mengunggah dan mengomiten
ipaddress-bundle.tar.gzsebagai resource, Anda dapat menggunakan paketipaddressdi node PyODPS 3 sebagai berikut:load_resource_package("ipaddress-bundle.tar.gz") import ipaddress
DataWorks membatasi ukuran total paket yang diunduh hingga 100 MB. Untuk mengecualikan paket yang telah dipra-instal dari bundel Anda, gunakan parameter --exclude dari pyodps-pack. Sebagai contoh, perintah berikut mengecualikan paket numpy dan pandas yang telah dipra-instal.
pyodps-pack -o bundle.tar.gz --exclude numpy --exclude pandas <YOUR_PACKAGE>
Akun lain
Untuk mengakses MaxCompute dengan akun berbeda, gunakan metode as_account pada objek titik masuk MaxCompute. Ini akan membuat objek titik masuk baru untuk akun yang ditentukan, yang independen dari instans o default.
Metode as_account memerlukan PyODPS 0.11.3 atau yang lebih baru. Anda tidak dapat menggunakan metode ini jika lingkungan DataWorks Anda menjalankan versi sebelumnya.
Prosedur
-
Berikan izin proyek yang diperlukan kepada pengguna lain. Untuk informasi lebih lanjut, lihat Lampiran: Berikan izin ke akun lain.
-
Di node PyODPS, gunakan metode
as_accountuntuk beralih akun dan membuat objek titik masuk baru.import os # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur ke ID AccessKey Anda, # dan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur ke Secret AccessKey Anda. # Kami menyarankan agar Anda tidak menggunakan string ID AccessKey dan Secret AccessKey secara langsung. new_odps = o.as_account( os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') ) -
Periksa apakah akun telah beralih.
Kueri informasi pengguna saat ini dengan menambahkan pernyataan berikut ke kode Anda. Jika output menunjukkan UID pengguna lain, berarti Anda berhasil mengakses MaxCompute dengan akun tersebut.
print(new_odps.get_project().current_user)Catatannew_odpsmerepresentasikan objek titik masuk untuk akun baru.
Contoh
-
Buat tabel dan impor data.
-
Unduh dataset Iris iris.data dan ubah namanya menjadi iris.csv.
-
Buat tabel bernama pyodps_iris dan unggah dataset iris.csv. Untuk instruksi, lihat Buat tabel dan unggah data.
Berikut adalah pernyataan pembuatan tabel.
CREATE TABLE if not exists pyodps_iris ( sepallength DOUBLE comment 'sepal length (cm)', sepalwidth DOUBLE comment 'sepal width (cm)', petallength DOUBLE comment 'petal length (cm)', petalwidth DOUBLE comment 'petal width (cm)', name STRING comment 'species' );
-
-
Buat node ODPS SQL untuk memberikan izin yang diperlukan. Untuk informasi lebih lanjut, lihat Lampiran: Berikan izin ke akun lain.
-
Buat node PyODPS untuk beralih akun. Berikut contoh kodenya. Untuk informasi selengkapnya, lihat Mengembangkan Tugas PyODPS 3.
from odps import ODPS import os import sys # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur ke ID AccessKey pengguna, # dan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur ke Secret AccessKey pengguna. # Kami menyarankan agar Anda tidak menggunakan string ID AccessKey dan Secret AccessKey secara langsung. os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] = '<AccessKey ID>' os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] = '<AccessKey Secret>' od = o.as_account(os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET') ) iris = DataFrame(od.get_table('pyodps_iris')) # Cetak output menggunakan pernyataan kondisional. with od.execute_sql('select * from pyodps_iris WHERE sepallength > 5 ').open_reader() as reader4: print(reader4.raw) for record in reader4: print(record["sepallength"],record["sepalwidth"],record["petallength"],record["petalwidth"],record["name"]) # Cetak UID pengguna saat ini. print(od.get_project().current_user) -
Jalankan kode dan lihat hasilnya.
Executing user script with PyODPS 0.11.4.post0 "sepallength","sepalwidth","petallength","petalwidth","name" 5.4,3.9,1.7,0.4,"Iris-setosa" 5.4,3.7,1.5,0.2,"Iris-setosa" 5.8,4.0,1.2,0.2,"Iris-setosa" 5.7,4.4,1.5,0.4,"Iris-setosa" 5.4,3.9,1.3,0.4,"Iris-setosa" 5.1,3.5,1.4,0.3,"Iris-setosa" 5.7,3.8,1.7,0.3,"Iris-setosa" 5.1,3.8,1.5,0.3,"Iris-setosa" 5.4,3.4,1.7,0.2,"Iris-setosa" 5.1,3.7,1.5,0.4,"Iris-setosa" 5.1,3.3,1.7,0.5,"Iris-setosa" 5.2,3.5,1.5,0.2,"Iris-setosa" 5.2,3.4,1.4,0.2,"Iris-setosa" 5.4,3.4,1.5,0.4,"Iris-setosa" 5.2,4.1,1.5,0.1,"Iris-setosa" 5.5,4.2,1.4,0.2,"Iris-setosa" 5.5,3.5,1.3,0.2,"Iris-setosa" 5.1,3.4,1.5,0.2,"Iris-setosa" 5.1,3.8,1.9,0.4,"Iris-setosa" 5.1,3.8,1.6,0.2,"Iris-setosa" 5.3,3.7,1.5,0.2,"Iris-setosa" 7.0,3.2,4.7,1.4,"Iris-versicolor" 6.4,3.2,4.5,1.5,"Iris-versicolor" 6.9,3.1,4.9,1.5,"Iris-versicolor" 5.5,2.3,4.0,1.3,"Iris-versicolor" 6.5,2.8,4.6,1.5,"Iris-versicolor" 5.7,2.8,4.5,1.3,"Iris-versicolor" 6.3,3.3,4.7,1.6,"Iris-versicolor" 6.6,2.9,4.6,1.3,"Iris-versicolor" 5.2,2.7,3.9,1.4,"Iris-versicolor" 5.9,3.0,4.2,1.5,"Iris-versicolor" 6.0,2.2,4.0,1.0,"Iris-versicolor" 6.1,2.9,4.7,1.4,"Iris-versicolor" 5.6,2.9,3.6,1.3,"Iris-versicolor" 6.7,3.1,4.4,1.4,"Iris-versicolor" 5.6,3.0,4.5,1.5,"Iris-versicolor" 5.8,2.7,4.1,1.0,"Iris-versicolor" 6.2,2.2,4.5,1.5,"Iris-versicolor" 5.6,2.5,3.9,1.1,"Iris-versicolor" 5.9,3.2,4.8,1.8,"Iris-versicolor" 6.1,2.8,4.0,1.3,"Iris-versicolor" 6.3,2.5,4.9,1.5,"Iris-versicolor" 6.1,2.8,4.7,1.2,"Iris-versicolor" 6.4,2.9,4.3,1.3,"Iris-versicolor" 6.6,3.0,4.4,1.4,"Iris-versicolor" 6.8,2.8,4.8,1.4,"Iris-versicolor" 6.7,3.0,5.0,1.7,"Iris-versicolor" 6.0,2.9,4.5,1.5,"Iris-versicolor" 5.7,2.6,3.5,1.0,"Iris-versicolor" 5.5,2.4,3.8,1.1,"Iris-versicolor" 5.5,2.4,3.7,1.0,"Iris-versicolor" 5.8,2.7,3.9,1.2,"Iris-versicolor" 6.0,2.7,5.1,1.6,"Iris-versicolor" 5.4,3.0,4.5,1.5,"Iris-versicolor" 6.0,3.4,4.5,1.6,"Iris-versicolor" 6.7,3.1,4.7,1.5,"Iris-versicolor" 6.3,2.3,4.4,1.3,"Iris-versicolor" 5.6,3.0,4.1,1.3,"Iris-versicolor" 5.5,2.5,4.0,1.3,"Iris-versicolor" 5.5,2.6,4.4,1.2,"Iris-versicolor" 6.1,3.0,4.6,1.4,"Iris-versicolor" 5.8,2.6,4.0,1.2,"Iris-versicolor" 5.6,2.7,4.2,1.3,"Iris-versicolor" 5.7,3.0,4.2,1.2,"Iris-versicolor" 5.7,2.9,4.2,1.3,"Iris-versicolor" 6.2,2.9,4.3,1.3,"Iris-versicolor" 5.1,2.5,3.0,1.1,"Iris-versicolor" 5.7,2.8,4.1,1.3,"Iris-versicolor" 6.3,3.3,6.0,2.5,"Iris-virginica" 5.8,2.7,5.1,1.9,"Iris-virginica" 7.1,3.0,5.9,2.1,"Iris-virginica" 6.3,2.9,5.6,1.8,"Iris-virginica" 6.5,3.0,5.8,2.2,"Iris-virginica" 7.6,3.0,6.6,2.1,"Iris-virginica" 7.3,2.9,6.3,1.8,"Iris-virginica" 6.7,2.5,5.8,1.8,"Iris-virginica" 7.2,3.6,6.1,2.5,"Iris-virginica" 6.5,3.2,5.1,2.0,"Iris-virginica" 6.4,2.7,5.3,1.9,"Iris-virginica" 6.8,3.0,5.5,2.1,"Iris-virginica" 5.7,2.5,5.0,2.0,"Iris-virginica" 5.8,2.8,5.1,2.4,"Iris-virginica" 6.4,3.2,5.3,2.3,"Iris-virginica" 6.5,3.0,5.5,1.8,"Iris-virginica" 7.7,3.8,6.7,2.2,"Iris-virginica" 7.7,2.6,6.9,2.3,"Iris-virginica" 6.0,2.2,5.0,1.5,"Iris-virginica" 6.9,3.2,5.7,2.3,"Iris-virginica" 5.6,2.8,4.9,2.0,"Iris-virginica" 7.7,2.8,6.7,2.0,"Iris-virginica" 6.3,2.7,4.9,1.8,"Iris-virginica" 6.7,3.3,5.7,2.1,"Iris-virginica" 7.2,3.2,6.0,1.8,"Iris-virginica" 6.2,2.8,4.8,1.8,"Iris-virginica" 6.1,3.0,4.9,1.8,"Iris-virginica" 6.4,2.8,5.6,2.1,"Iris-virginica" 7.2,3.0,5.8,1.6,"Iris-virginica" 7.4,2.8,6.1,1.9,"Iris-virginica" 7.9,3.8,6.4,2.0,"Iris-virginica" 6.4,2.8,5.6,2.2,"Iris-virginica" 6.3,2.8,5.1,1.5,"Iris-virginica" 6.1,2.6,5.6,1.4,"Iris-virginica" 7.7,3.0,6.1,2.3,"Iris-virginica" 6.3,3.4,5.6,2.4,"Iris-virginica" 6.4,3.1,5.5,1.8,"Iris-virginica" 6.0,3.0,4.8,1.8,"Iris-virginica" 6.9,3.1,5.4,2.1,"Iris-virginica" 6.7,3.1,5.6,2.4,"Iris-virginica" 6.9,3.1,5.1,2.3,"Iris-virginica" 5.8,2.7,5.1,1.9,"Iris-virginica" 6.8,3.2,5.9,2.3,"Iris-virginica" 6.7,3.3,5.7,2.5,"Iris-virginica" 6.7,3.0,5.2,2.3,"Iris-virginica" 6.3,2.5,5.0,1.9,"Iris-virginica" 6.5,3.0,5.2,2.0,"Iris-virginica" 6.2,3.4,5.4,2.3,"Iris-virginica" 5.9,3.0,5.1,1.8,"Iris-virginica" <User 139xxxxxxxxxxxxx>
Pemecahan masalah
Jika kode Anda tidak merespons selama eksekusi dan tidak menghasilkan output, Anda dapat menambahkan komentar berikut di awal kode Anda. DataWorks kemudian akan mencetak jejak stack semua thread setiap 30 detik.
# -*- dump_traceback: true -*-
Metode ini berlaku untuk node PyODPS 3, versi 0.11.4.1 atau yang lebih baru.
Versi PyODPS
Anda dapat memeriksa versi PyODPS saat ini dengan menjalankan kode Python atau dengan melihat log waktu proses task PyODPS apa pun.
-
Jalankan kode berikut di node PyODPS:
# Masukkan kode berikut: import odps; print(odps.__version__) # Contoh hasil 0.11.2.3 -
Periksa log waktu proses task PyODPS. Versi ditampilkan dalam output log, seperti pada contoh berikut:
2023-07-26 15:39:53 INFO SKYNET_DAGTYPE=100: 2023-07-26 15:39:53 INFO SKYNET_SYSTEM_ENV=dev: 2023-07-26 15:39:53 INFO SKYNET_GMTDATE=20230726: 2023-07-26 15:39:53 INFO SKYNET_BIZDATE=20230726: 2023-07-26 15:39:53 INFO SKYNET_ENVTYPE=1: 2023-07-26 15:39:53 INFO SKYNET_PROJECTID=342277: 2023-07-26 15:39:53 INFO SKYNET_BUSINESS_ID=10756717: 2023-07-26 15:39:53 INFO SKYNET_ARGS_ENABLE=true: 2023-07-26 15:39:53 INFO SKYNET_ACCOUNT_ID=xxx 2023-07-26 15:39:53 INFO TASK_SOURCE=dataworks_datastudio: 2023-07-26 15:39:53 INFO SKYNET_REGION=xxx: 2023-07-26 15:39:53 INFO LINK_FILE_ID=503440413: 2023-07-26 15:39:53 INFO TASK_PLUGIN_NAME=pyodps: 2023-07-26 15:39:53 INFO ALISA_UNIQUEKEY=xxx 2023-07-26 15:39:53 INFO ALISA_TASK_ID=T3_xxx 2023-07-26 15:39:53 INFO ALISA_TASK_EXEC_TARGET=group_599314507759873_dev: 2023-07-26 15:39:53 INFO ALISA_TASK_PRIORITY=0: 2023-07-26 15:39:53 INFO --- Invoking Shell command line now --- 2023-07-26 15:39:53 INFO ============================================================ Executing user script with PyODPS 0.11.4.post0 "sepallength","sepalwidth","petallength","petalwidth","name" 5.4,3.9,1.7,0.4,"Iris-setosa" 5.4,3.7,1.5,0.2,"Iris-setosa" 5.8,4.0,1.2,0.2,"Iris-setosa"
Lampiran: Berikan izin pengguna
Untuk mengizinkan pengguna Alibaba Cloud lain (bukan Pengguna RAM) mengakses proyek dan tabel di ruang kerja DataWorks Anda, Anda harus membuat node ODPS SQL dan menjalankan perintah otorisasi berikut. Untuk informasi lebih lanjut tentang cara membuat node ODPS SQL, lihat Buat node ODPS SQL. Untuk informasi lebih lanjut tentang izin, lihat Pengguna dan izin.
-- Tambahkan pengguna akun Alibaba Cloud lain di tingkat proyek.
add user ALIYUN$<account_name>;
-- Berikan izin CreateInstance pada proyek.
grant CreateInstance on project <project_name> to USER ALIYUN$<account_name>;
-- Berikan izin Describe dan Select pada tabel.
grant Describe, Select on table <table_name> to USER ALIYUN$<account_name>;
-- Lihat hasil otorisasi.
show grants for ALIYUN$<account_name>;
Berikut adalah contoh hasil otorisasi dari menjalankan show grants for ALIYUN$<account_name>;:
Authorization Type: ACL
[user/ALIYUN$:xxx.com]
A projects/mc_xxx : CreateInstance
A projects/mc_xxx/tables/pyodps_xxx : Describe | Select
Lampiran: Data contoh
Untuk mengikuti contoh dalam topik ini, pertama-tama buat tabel pyodps_iris dan isi dengan data dengan mengikuti instruksi dalam Langkah 1: Buat tabel dan impor data. Tabel ini digunakan untuk mendemonstrasikan operasi dasar.
Topik terkait
Gunakan fitur Operating history untuk melihat riwayat semua tugas yang dijalankan di DataStudio dalam tiga hari terakhir. Dari tampilan ini, Anda dapat menghentikan tugas yang sedang berjalan dan menyimpan pernyataan SQL dari catatan tugas sebagai file sementara. Untuk informasi selengkapnya, lihat Operating history.