全部产品
Search
文档中心

MaxCompute:Gunakan PyODPS di DataWorks

更新时间:Jul 06, 2025

PyODPS adalah SDK MaxCompute untuk Python. Dokumen ini menjelaskan batasan penggunaan PyODPS di DataWorks, cara membuat node PyODPS, serta memberikan contoh penggunaannya.

Batasan

  • Batasan Penggunaan

    Jika penggunaan memori melebihi batas atas, sistem akan melaporkan Got killed dan menghentikan proses terkait. Disarankan untuk menyerahkan tugas pemrosesan data ke MaxCompute untuk eksekusi terdistribusi, alih-alih mengunduh data dari node PyODPS dan memprosesnya di DataWorks. Untuk informasi lebih lanjut tentang perbandingan kedua metode tersebut, lihat bagian "Pencegahan" di Ikhtisar.

  • Batasan Paket

    • Fitur-fitur node PyODPS mungkin dibatasi karena kurangnya paket seperti matplotlib:

      • Penggunaan fungsi plot DataFrame terpengaruh.

      • Fungsi yang ditentukan pengguna (UDF) DataFrame hanya dapat digunakan setelah UDF dikirimkan ke MaxCompute. Anda hanya dapat menggunakan pustaka Python murni dan NumPy untuk menjalankan UDF berdasarkan persyaratan sandbox Python. Pustaka pihak ketiga lainnya, seperti pandas, tidak didukung.

      • Namun, Anda dapat menggunakan pustaka NumPy dan pandas yang sudah diinstal sebelumnya di DataWorks untuk menjalankan non-UDF. Paket pihak ketiga yang berisi kode biner tidak didukung.

    • Node PyODPS di DataWorks tidak mendukung paket Python atexit. Anda dapat menggunakan try-finally untuk mengaktifkan fitur terkait.

  • Batasan pada Jumlah Catatan Data yang Dapat Dibaca

    Secara default, parameter options.tunnel.use_instance_tunnel disetel ke False untuk node PyODPS di DataWorks, yang berarti hingga 10.000 catatan data dapat dibaca. Untuk membaca lebih banyak catatan data, atur parameter options.tunnel.use_instance_tunnel ke True untuk mengaktifkan InstanceTunnel secara global.

Prosedur

  1. Buat node PyODPS.

    Buka halaman DataStudio DataWorks untuk membuat node PyODPS. Node PyODPS diklasifikasikan menjadi node PyODPS 2 dan node PyODPS 3.

    • Versi Python dasar PyODPS 2 adalah Python 2.

    • Versi Python dasar PyODPS 3 adalah Python 3.

    Anda dapat membuat node PyODPS berdasarkan versi Python yang digunakan. Untuk detail lebih lanjut, lihat Kembangkan Tugas PyODPS 2 dan Kembangkan Tugas PyODPS 3.新建节点

  2. Kembangkan kode untuk node PyODPS.

    Setelah membuat node PyODPS, lihat contoh-contoh berikut untuk informasi tentang kemampuan utama PyODPS.

    Untuk informasi lebih lanjut tentang penggunaan PyODPS, lihat Ikhtisar Operasi Dasar dan Ikhtisar DataFrame. Untuk informasi lebih lanjut tentang operasi ujung ke ujung sederhana pada node PyODPS, lihat Gunakan Node PyODPS untuk Segmentasi Teks Cina Berdasarkan Jieba.

  3. Konfigurasikan parameter penjadwalan, lalu simpan, komit, dan terapkan node agar dapat berjalan pada interval reguler.

Titik masuk MaxCompute

Setiap node PyODPS di DataWorks memiliki variabel global odps atau o, yang merupakan titik masuk MaxCompute. Anda tidak perlu menentukan titik masuk secara manual. Contoh pernyataan:

# Periksa apakah tabel pyodps_iris ada.
print(o.exist_table('pyodps_iris'))

Jika True dikembalikan, tabel pyodps_iris tersedia.

Catatan

Informasi autentikasi yang digunakan oleh objek entri o hanya mendukung akses ke MaxCompute dan tidak dapat digunakan untuk mengakses layanan cloud lainnya. Selama eksekusi node PyODPS, DataWorks hanya menyediakan informasi autentikasi ini. Informasi autentikasi tambahan tidak dapat diperoleh dengan menggunakan metode pada objek entri MaxCompute, seperti metode o.from_global.

Eksekusi pernyataan SQL

Kemampuan umum

  • Eksekusi pernyataan SQL pada node PyODPS. Misalnya, Anda dapat mengeksekusi pernyataan SQL menggunakan execute_sql()/run_sql(). Anda hanya dapat mengeksekusi pernyataan bahasa definisi data (DDL) dan bahasa manipulasi data (DML).

    Catatan

    Pernyataan SQL tertentu yang dapat dieksekusi pada klien MaxCompute mungkin gagal dieksekusi dengan menggunakan metode execute_sql() dan run_sql() objek entri MaxCompute. Gunakan metode lain untuk mengeksekusi pernyataan non-DDL atau non-DML. Misalnya, gunakan metode run_security_query untuk mengeksekusi pernyataan GRANT atau REVOKE, dan gunakan metode run_xflow atau execute_xflow untuk memanggil Operasi API.

  • Baca hasil eksekusi SQL dari node PyODPS. Misalnya, gunakan metode open_reader() untuk membaca hasil eksekusi SQL.

Untuk informasi lebih lanjut tentang operasi terkait SQL pada node PyODPS, lihat SQL.

Batasan pada format data dan jumlah catatan

Karena alasan kompatibilitas historis, Instance Tunnel tidak diaktifkan secara default di DataWorks. Dalam hal ini, antarmuka Result dipanggil untuk menjalankan instance.open_reader, dan hingga 10.000 catatan data dapat dibaca, serta memiliki masalah dengan mendukung tipe data kompleks. Jika proyek Anda tidak memiliki mekanisme perlindungan data yang diaktifkan, dan Anda perlu mengambil semua data secara iteratif, atau jika Anda perlu membaca bidang tipe data kompleks seperti Array, aktifkan Instance Tunnel dan nonaktifkan limit.

  • Nonaktifkan limit selama eksekusi kode.

    Anda dapat mengeksekusi pernyataan berikut untuk mengaktifkan InstanceTunnel secara global dan menghapus limit.

    options.tunnel.use_instance_tunnel = True
    options.tunnel.limit_instance_tunnel = False  # Hapus batas pada jumlah catatan data yang dapat dibaca.
    
    with instance.open_reader() as reader:
    # Gunakan InstanceTunnel untuk membaca semua data.
    # Anda dapat menggunakan reader.count untuk mendapatkan jumlah catatan data.

  • Nonaktifkan limit hanya untuk Reader saat ini.

    Anda juga dapat menambahkan tunnel=True ke metode open_reader() untuk mengaktifkan InstanceTunnel untuk metode open_reader() saat ini. Anda dapat menambahkan limit=False ke metode open_reader() untuk menghapus limit pada jumlah catatan data yang dapat dibaca untuk metode open_reader() saat ini.

    with instance.open_reader(tunnel=True, limit=False) as reader:
    # Metode open_reader() saat ini dipanggil menggunakan InstanceTunnel, dan semua data dapat dibaca.

Untuk informasi lebih lanjut tentang Instance Tunnel dan batasan pembacaan data, lihat Dapatkan Hasil Eksekusi Pernyataan SQL.

DataFrame

  • Metode Eksekusi

    Untuk melakukan operasi pada DataFrames di DataWorks, Anda harus secara eksplisit memanggil metode yang dieksekusi segera, seperti execute dan persist. Kode berikut menunjukkan sebuah contoh.

    # Panggil metode yang dieksekusi segera untuk memproses setiap catatan data dan tampilkan semua catatan data yang iris.sepalwidth kurang dari 3 di tabel pyodps_iris.
    from odps.df import DataFrame
    iris = DataFrame(o.get_table('pyodps_iris'))
    for record in iris[iris.sepalwidth < 3].execute():  
        print(record)
  • Tampilan Detail

    Secara default, options.verbose diaktifkan di DataWorks. Ini menunjukkan bahwa detail node PyODPS di DataWorks, seperti Logview, ditampilkan. Anda dapat mengonfigurasi opsi ini untuk menentukan apakah akan menampilkan detail, seperti Logview.

Untuk informasi lebih lanjut tentang operasi DataFrame, lihat DataFrame (tidak direkomendasikan).

Dapatkan parameter penjadwalan

Saat menggunakan node PyODPS di DataWorks untuk mengembangkan kode, Anda juga dapat menggunakan parameter penjadwalan. Misalnya, gunakan parameter penjadwalan untuk mendapatkan timestamp data dari node. Node PyODPS dan node SQL di DataWorks menggunakan metode yang sama untuk menentukan parameter penjadwalan. Namun, parameter penjadwalan dirujuk dengan menggunakan metode yang berbeda dalam kode node PyODPS dan node SQL.

  • String, seperti ${param_name}, digunakan dalam kode node SQL.

  • Sebelum kode node PyODPS dijalankan, kamus bernama args ditambahkan ke variabel global. Ini mencegah dampak negatif pada kode. Kode menggunakan metode args[param_name] untuk mendapatkan nilai parameter penjadwalan, alih-alih mengganti ${param_name} dengan parameter penjadwalan dalam kode.

Misalnya, pada tab Konfigurasi Penjadwalan node PyODPS di DataWorks, Anda dapat menentukan parameter penjadwalan ds=${yyyymmdd} di bidang Parameters di bagian Basic properties. Lalu, tentukan perintah berikut dalam kode node untuk mendapatkan nilai parameter:

  • Dapatkan nilai parameter ds.

    print('ds=' + args['ds'])
    # Dapatkan waktu yang ditentukan oleh parameter ds, seperti ds=20161116.
  • Dapatkan data di partisi yang ditentukan oleh ds=${yyyymmdd}.

    o.get_table('table_name').get_partition('ds=' + args['ds'])
    # Dapatkan data dari partisi yang ditentukan oleh ds di tabel yang ditentukan oleh table_name.

Untuk informasi lebih lanjut tentang parameter penjadwalan, lihat Konfigurasikan dan Gunakan Parameter Penjadwalan.

Konfigurasikan parameter hints

Anda dapat menggunakan parameter hints untuk mengonfigurasi parameter runtime. Nilai parameter hints adalah tipe DICT.

o.execute_sql('select * from pyodps_iris', hints={'odps.sql.mapper.split.size': 16})

Anda dapat mengonfigurasi parameter sql.settings secara global. Parameter runtime yang relevan secara otomatis ditambahkan selama setiap eksekusi.

from odps import options
options.sql.settings = {'odps.sql.mapper.split.size': 16}
o.execute_sql('select * from pyodps_iris') # Parameter hints dikonfigurasi secara otomatis berdasarkan pengaturan global.

Gunakan paket pihak ketiga

Tabel berikut menjelaskan paket pihak ketiga yang diinstal sebelumnya untuk node DataWorks dan versi paket untuk node tersebut.

Nama paket

Versi paket untuk node Python 2

Versi paket untuk node 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 paket pihak ketiga yang ingin digunakan tidak tercantum dalam tabel di atas, Anda dapat menggunakan metode load_resource_package yang disediakan oleh DataWorks untuk mengunduh paket dari sumber daya MaxCompute. Setelah menghasilkan paket menggunakan pyodps-pack, Anda dapat memuat paket pihak ketiga dengan metode load_resource_package. Selanjutnya, Anda dapat mengimpor konten paket ke DataWorks. Untuk informasi lebih lanjut tentang penggunaan pyodps-pack, lihat Hasilkan paket pihak ketiga untuk PyODPS dan Referensi paket pihak ketiga dalam node PyODPS.

Catatan

Jika Anda menghasilkan paket untuk node Python 2, tambahkan parameter --dwpy27 ke pyodps-pack saat menghasilkan paket.

Contoh:

  1. Jalankan perintah berikut untuk mengemas alamat IP:

    pyodps-pack -o ipaddress-bundle.tar.gz ipaddress
  2. Setelah mengunggah dan mengirimkan paket ipaddress-bundle.tar.gz sebagai sumber daya, Anda dapat menggunakan paket untuk node PyODPS 3 dengan metode berikut:

    load_resource_package("ipaddress-bundle.tar.gz")
    import ipaddress

Total ukuran paket yang diunduh tidak boleh melebihi 100 MB. Jika ingin melewati operasi pengemasan paket yang sudah diinstal sebelumnya, gunakan parameter --exclude yang disediakan oleh pyodps-pack selama pengemasan. Sebagai contoh, metode pengemasan berikut mengecualikan paket NumPy dan pandas yang ada di lingkungan DataWorks.

pyodps-pack -o bundle.tar.gz --exclude numpy --exclude pandas <YOUR_PACKAGE>

Gunakan akun lain untuk mengakses MaxCompute

Dalam skenario tertentu, Anda mungkin ingin menggunakan akun Alibaba Cloud lain untuk mengakses proyek MaxCompute dalam akun Alibaba Cloud saat ini. Dalam hal ini, gunakan metode as_account dari objek entri ODPS untuk membuat objek entri yang menggunakan akun baru. Secara default, objek entri baru ini independen dari instance o yang disediakan oleh sistem.

Penting

Metode as_account didukung di PyODPS 0.11.3 dan versi lebih baru. Jika Anda belum mengonfigurasi PyODPS 0.11.3 atau lebih baru untuk node DataWorks Anda, Anda tidak dapat menggunakan metode as_account.

Prosedur

  1. Berikan izin pada proyek ke akun baru. Untuk informasi lebih lanjut, lihat Lampiran: Berikan Izin ke Akun Lain.

  2. Gunakan metode as_account untuk beralih ke akun baru dan buat objek entri untuk akun tersebut di node PyODPS.

    import os
    # Setel variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID ke ID AccessKey akun Alibaba Cloud.
    # Setel variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET ke Rahasia AccessKey akun Alibaba Cloud.
    # Kami menyarankan Anda untuk tidak langsung menggunakan ID AccessKey atau Rahasia AccessKey.
    new_odps = o.as_account(
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
    )
  3. Periksa apakah akun telah beralih.

    Kueri informasi tentang pengguna saat ini. Tambahkan pernyataan berikut ke kode yang ingin Anda jalankan. Jika informasi pengguna di hasil yang dikembalikan adalah ID akun baru, Anda sedang menggunakan akun baru untuk mengakses MaxCompute.

    print(new_odps.get_project().current_user)
    Catatan

    new_odps: objek entri akun baru.

Contoh

  1. Buat tabel dan impor data ke tabel.

    1. Unduh dataset iris.data dari iris dan ubah nama iris.data menjadi iris.csv.

    2. Buat tabel bernama pyodps_iris dan unggah dataset iris.csv ke tabel. Untuk informasi lebih lanjut, lihat Buat Tabel dan Unggah Data.

      Contoh pernyataan:

      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 'type'
      );
  2. Buat node SQL ODPS dan berikan izin pada node ke akun baru. Untuk informasi lebih lanjut, lihat Lampiran: Berikan Izin ke Akun Lain.

  3. Buat node PyODPS dan beralih ke akun baru. Untuk informasi lebih lanjut, lihat Kembangkan Tugas PyODPS 3.

    from odps import ODPS
    import os
    import sys
    
    # Setel variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID ke ID AccessKey akun Alibaba Cloud Anda.
    # Setel variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET ke Rahasia AccessKey akun Alibaba Cloud.
    # Kami menyarankan Anda untuk tidak langsung menggunakan ID AccessKey atau Rahasia AccessKey.
    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'))
    # Kembalikan hasil berdasarkan klausa WHERE.
    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"])
    # Kembalikan ID pengguna saat ini.
    print(od.get_project().current_user)
  4. Jalankan kode dan lihat hasilnya.

    Menjalankan skrip pengguna dengan 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"
    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>

Diagnosis

Jika tidak ada respons yang diberikan untuk kode Anda selama eksekusi, dan tidak ada keluaran yang dikembalikan, Anda dapat menambahkan komentar berikut ke header kode. DataWorks akan mengembalikan stack semua thread setiap 30 detik.

# -*- dump_traceback: true -*-
Catatan

Metode ini cocok untuk node PyODPS 3 versi lebih baru dari 0.11.4.1.

Lihat versi PyODPS

Anda dapat menjalankan kode Python untuk memeriksa versi PyODPS. Anda juga dapat melihat versi PyODPS di log runtime node PyODPS.

  • Jalankan kode di node PyODPS untuk memeriksa versi PyODPS.

    # Jalankan kode berikut:
    import odps; print(odps.__version__)
    
    # Hasil berikut dikembalikan:
    0.11.2.3
  • Lihat versi PyODPS di log runtime node PyODPS. Gambar berikut menunjukkan contohnya.image.png

Lampiran: Berikan izin ke akun lain

Jika Anda ingin menggunakan akun Alibaba Cloud lain untuk mengakses proyek dan tabel dalam akun Alibaba Cloud saat ini di DataWorks, Anda harus membuat node SQL ODPS di DataWorks dan menjalankan perintah berikut untuk memberikan izin yang diperlukan ke akun tersebut. Untuk informasi lebih lanjut tentang cara membuat node SQL ODPS, lihat Buat Node SQL ODPS. Untuk informasi lebih lanjut tentang izin, lihat Pengguna dan Izin.

-- Tambahkan akun Alibaba Cloud yang ingin Anda gunakan ke proyek.
add user ALIYUN$<account_name>;

-- Berikan izin CreateInstance pada proyek ke akun.
grant CreateInstance on project <project_name> to USER ALIYUN$<account_name>;

-- Berikan izin Describe dan Select pada tabel ke akun.
grant Describe, Select on table <table_name> to USER ALIYUN$<account_name>;

-- Lihat hasil otorisasi.
show grants for ALIYUN$<account_name>;

Gambar berikut menunjukkan contoh hasil.image.png

Lampiran: Contoh data

Anda dapat membuat tabel bernama pyodps_iris di konsol DataWorks dan mengimpor data ke tabel tersebut. Untuk informasi lebih lanjut tentang cara membuat tabel dan mengimpor data ke tabel, lihat Langkah 1 di Gunakan Node PyODPS untuk Menanyakan Data Berdasarkan Kriteria Tertentu. Tabel pyodps_iris digunakan dalam contoh-contoh.

Referensi

Anda dapat melihat semua catatan tugas yang telah Anda jalankan dalam tiga hari terakhir di antarmuka pengembangan data DataWorks, menghentikan tugas yang sedang berjalan, dan menyimpan pernyataan SQL dari Runtime Logs sebagai file sementara. Untuk detail lebih lanjut, lihat Lihat Riwayat Operasi.