All Products
Search
Document Center

DataWorks:Node PyODPS 2

Last Updated:Aug 27, 2026

DataWorks menyediakan tipe node PyODPS 2 untuk mengembangkan tugas PyODPS menggunakan sintaks PyODPS. Sebagai SDK Python untuk MaxCompute, PyODPS memungkinkan Anda menulis dan mengedit kode Python pada node PyODPS 2 guna berinteraksi langsung dengan MaxCompute.

Ikhtisar

PyODPS adalah SDK Python untuk MaxCompute yang menyediakan antarmuka pemrograman ringkas, memungkinkan Anda menggunakan Python untuk menulis pekerjaan, melakukan kueri terhadap tabel dan tampilan, serta mengelola resource MaxCompute. Untuk informasi selengkapnya, lihat Ikhtisar PyODPS. Di DataWorks, Anda dapat menggunakan node PyODPS untuk menjadwalkan dan menjalankan tugas Python serta mengintegrasikannya dengan pekerjaan lain.

Catatan

  • Jika kode Anda memerlukan paket pihak ketiga saat menjalankan node PyODPS pada kelompok sumber daya DataWorks, gunakan serverless resource group dan custom image untuk menginstal paket tersebut.

    Catatan

    Metode ini tidak didukung jika kode Anda menggunakan UDF yang mereferensikan paket pihak ketiga. Untuk informasi tentang cara menangani skenario ini, lihat Contoh UDF: Gunakan paket pihak ketiga dalam UDF Python.

  • Jika tugas PyODPS Anda perlu mengakses lingkungan jaringan tertentu, seperti sumber data atau layanan di VPC atau pusat data lokal, gunakan serverless resource group dan merujuk ke Solusi konektivitas jaringan untuk membuat koneksi jaringan yang diperlukan.

  • Untuk informasi selengkapnya tentang sintaks PyODPS, lihat Dokumentasi PyODPS.

  • Node PyODPS tersedia dalam dua tipe: PyODPS 2 dan PyODPS 3. Keduanya berbeda dalam versi Python yang mendasarinya. Node PyODPS 2 menggunakan Python 2, sedangkan node PyODPS 3 menggunakan Python 3. Pilih tipe node yang sesuai dengan versi Python yang Anda gunakan.

  • Jika eksekusi SQL pada node PyODPS gagal menghasilkan alur data sehingga alur data tidak ditampilkan di Peta Data, Anda dapat mengatasi masalah ini dengan mengatur parameter penjadwalan DataWorks secara manual dalam kode tugas. Untuk melihat alur data, lihat Lihat alur data. Untuk informasi tentang pengaturan parameter, lihat Atur petunjuk parameter waktu proses. Anda dapat memperoleh parameter waktu proses yang diperlukan menggunakan contoh kode berikut.

    import os
    # ...
    # get DataWorks sheduler runtime parameters
    skynet_hints = {}
    for k, v in os.environ.items():
        if k.startswith('SKYNET_'):
            skynet_hints[k] = v
    # ...
    # setting hints while submiting a task
    o.execute_sql('INSERT OVERWRITE TABLE XXXX SELECT * FROM YYYY WHERE ***', hints=skynet_hints)
    # ...
  • Log output untuk node PyODPS mendukung ukuran maksimum 4 MB. Hindari mencetak volume data besar secara langsung ke log. Sebagai gantinya, catat hanya peringatan penting dan pembaruan progres.

Batasan

  • Saat menjalankan node PyODPS pada grup sumber daya eksklusif untuk penjadwalan, kami menyarankan agar data yang diproses secara lokal dalam node tidak melebihi 50 MB. Operasi ini dibatasi oleh spesifikasi grup sumber daya eksklusif untuk penjadwalan. Memproses terlalu banyak data lokal yang melebihi ambang batas sistem operasi dapat menyebabkan error OOM (got killed). Hindari menulis terlalu banyak kode pemrosesan data dalam node PyODPS.

  • Saat menjalankan node PyODPS pada serverless resource group, Anda dapat mengonfigurasi alokasi CU untuk node PyODPS berdasarkan volume data yang akan diproses.

    Catatan

    Saat menjalankan tugas ini pada serverless resource group, konfigurasi maksimum untuk satu tugas adalah 64CU, tetapi kami menyarankan agar Anda tidak melebihi 16CU untuk menghindari kekurangan sumber daya akibat alokasi CU berlebihan, yang dapat memengaruhi startup tugas.

  • Jika Anda mengalami error Got Killed, hal ini menunjukkan bahwa penggunaan memori melebihi batas dan proses dihentikan. Oleh karena itu, hindari operasi data lokal sebisa mungkin. Tugas SQL dan DataFrame yang dimulai melalui PyODPS (kecuali to_pandas) tidak terkena batasan ini.

  • Kode non-UDF dapat menggunakan paket NumPy dan Pandas yang telah dipra-instal. Paket pihak ketiga lain yang berisi kode biner tidak didukung.

  • Karena alasan kompatibilitas, di DataWorks, options.tunnel.use_instance_tunnel diatur ke False secara default. Jika Anda perlu mengaktifkan instance tunnel secara global, Anda harus mengatur nilai ini ke True secara manual.

  • Versi Python yang mendasari node PyODPS 2 adalah 2.7.

  • Menjalankan beberapa tugas Python secara konkuren dalam satu node PyODPS tidak didukung.

  • Untuk mencetak log dalam node PyODPS, gunakan print. Penggunaan logger.info tidak didukung.

Prasyarat

Kaitkan mesin komputasi MaxCompute dengan ruang kerja DataWorks Anda.

Prosedur

  1. Pada halaman pengeditan node PyODPS 2, lakukan operasi pengembangan berikut.

    Contoh kode PyODPS 2

    Setelah membuat node PyODPS, Anda dapat mengedit dan menjalankan kode. Untuk informasi selengkapnya tentang sintaks PyODPS, lihat Dokumentasi PyODPS. Topik ini menjelaskan lima contoh kode berikut. Anda dapat memilih contoh berdasarkan kebutuhan bisnis Anda.

    Entri ODPS

    Di node PyODPS DataWorks, variabel global odps atau o disertakan sebagai entri ODPS. Anda tidak perlu mendefinisikan entri ODPS secara manual.

    print(odps.exist_table('PyODPS_iris'))

    Eksekusi SQL

    Anda dapat mengeksekusi SQL dalam node PyODPS. Untuk informasi selengkapnya, lihat Eksekusi pernyataan SQL.

    • Secara default, instance tunnel tidak diaktifkan di DataWorks, artinya instance.open_reader menggunakan antarmuka Result secara default (maksimal 10.000 record). Anda dapat menggunakan reader.count untuk mendapatkan jumlah record. Jika Anda perlu melakukan iterasi terhadap semua data, Anda harus menonaktifkan pembatasan limit. Anda dapat menggunakan pernyataan berikut untuk mengaktifkan Instance Tunnel secara global dan menonaktifkan pembatasan limit.

      options.tunnel.use_instance_tunnel = True
      options.tunnel.limit_instance_tunnel = False  # Nonaktifkan pembatasan limit, baca semua data.
      
      with instance.open_reader() as reader:
        # Gunakan Instance Tunnel untuk membaca semua data.
    • Anda juga dapat menambahkan tunnel=True ke open_reader untuk mengaktifkan instance tunnel hanya untuk pemanggilan open_reader saat ini. Anda juga dapat menambahkan limit=False untuk menonaktifkan pembatasan limit hanya untuk pemanggilan saat ini.

      # open_reader menggunakan antarmuka Instance Tunnel untuk membaca semua data.
      with instance.open_reader(tunnel=True, limit=False) as reader:

    Atur parameter waktu proses

    • Anda dapat mengatur parameter waktu proses dengan mengonfigurasi parameter hints, yang bertipe dict. Untuk informasi selengkapnya tentang parameter hints, lihat Operasi SET.

      o.execute_sql('select * from PyODPS_iris', hints={'odps.sql.mapper.split.size': 16})
    • Setelah Anda mengonfigurasi sql.settings secara global, Anda perlu menambahkan parameter waktu proses terkait setiap kali menjalankan tugas.

      from odps import options
      options.sql.settings = {'odps.sql.mapper.split.size': 16}
      o.execute_sql('select * from PyODPS_iris')  # Tambahkan hints berdasarkan konfigurasi global.

    Baca hasil eksekusi

    Instans yang menjalankan SQL dapat langsung melakukan operasi open_reader. Berikut dua skenario yang mungkin terjadi:

    • Pernyataan SQL mengembalikan data terstruktur.

      with o.execute_sql('select * from dual').open_reader() as reader:
      	for record in reader:  # Proses setiap record.
    • Pernyataan SQL mungkin berupa pernyataan seperti desc. Anda dapat menggunakan properti reader.raw untuk mendapatkan hasil eksekusi SQL mentah.

      with o.execute_sql('desc dual').open_reader() as reader:
      	print(reader.raw)
      Catatan

      Jika Anda menggunakan parameter penjadwalan kustom, Anda harus menuliskan nilai waktu secara eksplisit saat memicu langsung node PyODPS 2 pada halaman karena node PyODPS tidak dapat langsung mengganti parameter tersebut.

    DataFrame

    Anda juga dapat menggunakan DataFrame untuk memproses data.

    • Eksekusi

      Di lingkungan DataWorks, eksekusi DataFrame memerlukan pemanggilan eksplisit terhadap metode yang memicu eksekusi segera.

      from odps.df import DataFrame
      iris = DataFrame(o.get_table('pyodps_iris'))
      for record in iris[iris.sepal_width < 3].execute():  # Eksekusi segera dan proses setiap Record.

      Jika Anda ingin memicu eksekusi segera saat menggunakan Print, Anda perlu mengaktifkan options.interactive.

      from odps import options
      from odps.df import DataFrame
      options.interactive = True  # Aktifkan sakelar di awal.
      iris = DataFrame(o.get_table('pyodps_iris'))
      print(iris.sepal_width.sum())  # Eksekusi segera saat print.
    • Cetak informasi detail

      Anda dapat mengonfigurasi opsi options.verbose. Di DataWorks, opsi ini diaktifkan secara default, dan informasi detail seperti URL Logview dicetak selama eksekusi.

    Pengembangan kode PyODPS 2

    Contoh sederhana berikut menunjukkan cara menggunakan node PyODPS:

    1. Siapkan set data dan buat tabel sampel pyodps_iris. Untuk informasi selengkapnya, lihat Membuat DataFrame.

    2. Buat DataFrame. Untuk informasi selengkapnya, lihat Buat DataFrame.

    3. Masukkan kode berikut ke dalam node PyODPS.

      from odps.df import DataFrame
      
      # Buat DataFrame dari tabel ODPS untuk membuat DataFrame.
      iris = DataFrame(o.get_table('pyodps_iris'))
      print(iris.sepallength.head(5))

    Jalankan tugas PyODPS

    1. Dalam Run Configuration, konfigurasikan Compute Resource, Compute Resource and Quota, dan DataWorks Resource Group.

      Catatan
      • Untuk mengakses sumber data di lingkungan jaringan publik atau jaringan VPC, gunakan kelompok sumber daya penjadwalan yang telah lulus uji konektivitas untuk sumber data tersebut. Untuk informasi selengkapnya, lihat Solusi konektivitas jaringan.

      • Anda dapat mengonfigurasi informasi Image berdasarkan kebutuhan tugas.

    2. Pada bilah alat, klik Run untuk menjalankan tugas PyODPS.

  2. Jika Anda perlu menjalankan tugas node secara berkala, konfigurasikan pengaturan jadwal sesuai kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Konfigurasi pengaturan jadwal.

    Berbeda dengan node SQL di DataWorks, node PyODPS tidak mengganti string seperti ${param_name} dalam kode untuk menghindari dampak terhadap kode. Sebagai gantinya, sebelum mengeksekusi kode, sebuah dict bernama args ditambahkan ke variabel global, dari mana parameter penjadwalan dapat diambil. Misalnya, jika Anda mengatur ds=${yyyymmdd} di Parameter, Anda dapat mengambil parameter tersebut dalam kode sebagai berikut.

    print('ds=' + args['ds'])
    ds=20240930
    Catatan

    Jika Anda perlu mendapatkan partisi bernama ds, Anda dapat menggunakan metode berikut.

    o.get_table('table_name').get_partition('ds=' + args['ds'])
  3. Setelah menyelesaikan konfigurasi tugas node, Anda perlu menerapkan node tersebut. Untuk informasi selengkapnya, lihat Terapkan node.

  4. Setelah menerapkan tugas, Anda dapat melihat status berjalan tugas terjadwal di Operation Center. Untuk informasi selengkapnya, lihat Lihat tugas terjadwal.

Jalankan node menggunakan role terkait

Anda dapat mengaitkan peran RAM untuk menjalankan node, yang memungkinkan Anda menjalankan tugas node dengan peran RAM tertentu untuk kontrol izin detail halus dan manajemen keamanan.

Langkah berikutnya

FAQ PyODPS: Anda dapat mempelajari isu umum selama eksekusi PyODPS untuk troubleshooting cepat.