All Products
Search
Document Center

MaxCompute:Gunakan PyODPS di lingkungan lokal

Last Updated:Sep 25, 2026

PyODPS adalah SDK Python untuk MaxCompute yang menyediakan operasi dasar pada objek MaxCompute dan kerangka kerja DataFrame, memungkinkan Anda menggunakan Python untuk pemrosesan dan analisis big data di DataWorks atau lingkungan lokal. Topik ini menjelaskan cara menginstal PyODPS, menghubungkan ke MaxCompute, menjalankan kueri SQL, serta menggunakan API DataFrame di lingkungan lokal.

Prasyarat

Sebelum memulai, pastikan Anda memenuhi persyaratan berikut:

  • Python versi 3.6 atau yang lebih baru telah diinstal.

  • Anda memiliki Akun Alibaba Cloud dan kredensial akses untuk terhubung ke Proyek MaxCompute Anda. Kami menyarankan menggunakan AccessKey dari Pengguna RAM.

Instal PyODPS

  1. Instal PyODPS

    • Linux/macOS:

      pip3 install pyodps
    • Windows:

      pip install pyodps

    Jika Anda mengalami error kompilasi kode C saat menginstal dependensi seperti numpy atau pyarrow, versi pip atau setuptools Anda mungkin sudah usang. Perbarui keduanya, lalu coba instal ulang:

    # Linux/macOS
    pip3 install -U pip setuptools
    
    # Windows
    pip install -U pip setuptools
  2. Verifikasi instalasi

    • Linux/macOS:

      python3 -c "from odps import ODPS"
    • Windows:

      python -c "from odps import ODPS"

      Jika tidak ada error yang muncul, instalasi berhasil. Jika terjadi error, lihat bagian Pemecahan Masalah.

Atur variabel lingkungan

Untuk menghindari hard-coding kredensial di dalam kode Anda, atur kredensial tersebut sebagai variabel lingkungan.

Masuk ke Konsol RAM, salin ID AccessKey dan Secret Access Key Anda, lalu konfigurasikan sesuai sistem operasi Anda. Contohnya, pada macOS (zsh):

  1. macOS (zsh):

    vim ~/.zshrc
  2. Tambahkan baris berikut dan ganti placeholder dengan nilai aktual Anda

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<your-AccessKey-ID>
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-AccessKey-secret>
  3. Terapkan konfigurasi

    source ~/.zshrc
  4. Verifikasi bahwa variabel lingkungan telah diatur

    echo $ALIBABA_CLOUD_ACCESS_KEY_ID
    echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

    Setiap perintah harus menghasilkan nilai yang sesuai. Jika output-nya kosong, ulangi langkah 2 dan 3.

Untuk detail tentang pengaturan variabel lingkungan di Linux, macOS, dan Windows, lihat Atur AccessKey Alibaba Cloud dalam variabel lingkungan.

Inisialisasi titik masuk ODPS

Kelas ODPS merupakan titik masuk untuk semua operasi PyODPS. Kelas ini harus diinisialisasi dengan informasi kredensial dan proyek sebelum Anda memanggil API lainnya.

Sebelum menjalankan kode, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur. Anda juga dapat menentukan AccessKey secara eksplisit, tetapi hal ini tidak disarankan karena hard-coding kredensial dalam kode sumber menimbulkan risiko keamanan.

Untuk mendapatkan ID AccessKey dan Secret Access Key, lihat Dapatkan ID AccessKey dan Secret Access Key.

Definisi manual

Kode berikut menunjukkan cara mendefinisikan titik masuk ODPS secara manual:

  • Disarankan (menggunakan variabel lingkungan)

    import os
    from odps import ODPS
    
    o = ODPS(
        access_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        secret_access_key=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        project='your-default-project',
        endpoint='your-end-point',
    )
  • Tidak disarankan (ditentukan secara eksplisit hanya untuk pengujian)

    import os
    from odps import ODPS
    
    o = ODPS(
        access_id='your-aliyun-access-key-id',
        secret_access_key='your-aliyun-access-key-secret',
        project='your-default-project',
        endpoint='your-end-point',
    )
    

Gunakan kredensial keamanan STS

Jika Anda menggunakan kredensial keamanan STS untuk mengakses ODPS, inisialisasi objek titik masuk ODPS sebagai berikut:

import os
from odps import ODPS
from odps.accounts import StsAccount
# Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur ke ID AccessKey Anda,
# variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur ke Secret Access Key Anda,
# dan variabel lingkungan ALIBABA_CLOUD_STS_TOKEN diatur ke token STS Anda.
# Untuk alasan keamanan, hindari hard-coding ID AccessKey atau Secret Access Key Anda.
account = StsAccount(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    os.getenv('ALIBABA_CLOUD_STS_TOKEN'),
)
o = ODPS(
    account=account,
    project='**your-default-project**',
    endpoint='**your-end-point**',
)

Parameter

Deskripsi

your-default-project

Nama Proyek MaxCompute Anda. Masuk ke Konsol MaxCompute untuk melihat daftar proyek Anda.

your-end-point

Titik akhir untuk wilayah dan lingkungan jaringan Anda. Untuk daftar titik akhir, lihat Endpoints.

Contohnya, titik akhir jaringan publik untuk wilayah China (Hangzhou) adalah https://service.cn-hangzhou.maxcompute.aliyun.com/api.

Setelah menyelesaikan konfigurasi ini, Anda dapat menggunakan PyODPS di lingkungan lokal Anda. Untuk informasi lebih lanjut, lihat Ikhtisar operasi dasar.

Pemrosesan data

SQL

MaxCompute mendukung dua mode eksekusi SQL: mode tradisional dan mode MaxCompute Query Acceleration (MaxQA). Kedua mode mendukung pernyataan DDL dan DML. MaxQA menyimpan cache hasil pekerjaan dan mengembalikan hasil cache tersebut untuk mempercepat kueri berulang. Untuk informasi aturan penagihan, lihat Biaya komputasi (Pay-As-You-Go).

Metode execute_sql() dan run_sql() hanya mendukung pernyataan DDL dan DML. Untuk jenis pernyataan lainnya, gunakan metode khususnya. Contohnya, gunakan metode create_table() untuk pernyataan CREATE TABLE, dan gunakan metode run_xflow() atau execute_xflow() untuk perintah API.

Mode tradisional

Gunakan execute_sql() untuk menjalankan pernyataan SQL dan open_reader() untuk membaca hasilnya:

# Gunakan metode khusus untuk membuat tabel
o.create_table('my_t', 'num bigint, id string', if_not_exists=True)

# Jalankan kueri SELECT
result = o.execute_sql('SELECT * FROM pyodps_iris LIMIT 3')
with result.open_reader() as reader:
    for record in reader:
        print(record)

Mode MaxQA

MaxCompute Query Acceleration (MaxQA) adalah fitur MaxCompute yang mempercepat kueri pada data berukuran kecil hingga menengah dengan menggunakan kolam sumber daya khusus. Mulai dari PyODPS v0.11.4.1, Anda dapat menggunakan execute_sql_interactive untuk menjalankan kueri SQL melalui MaxQA.

o.execute_sql_interactive('SELECT * FROM dual', fallback='all')

Jika MaxQA tidak dapat menjalankan pernyataan SQL tersebut, sistem secara otomatis beralih ke mode tradisional. Untuk menonaktifkan fallback ini, atur parameter fallback ke False. Anda juga dapat menentukan kebijakan fallback sebagai string yang dipisahkan koma:

Kebijakan Fallback

Deskripsi

generic

Beralih ke mode tradisional ketika terjadi error yang tidak dikenal.

noresource

Beralih ke mode tradisional ketika sumber daya tidak mencukupi.

upgrading

Beralih ke mode tradisional selama pembaruan sistem.

timeout

Beralih ke mode tradisional ketika terjadi timeout.

unsupported

Beralih ke mode tradisional untuk skenario yang tidak didukung.

Kebijakan default-nya adalah unsupported,upgrading,noresource,timeout. Untuk memastikan fallback selalu diaktifkan, atur nilainya ke all, yang merupakan alias untuk generic,unsupported,upgrading,noresource,timeout.

# Hanya fallback ketika sumber daya tidak mencukupi atau skenarionya tidak didukung
o.execute_sql_interactive('SELECT * FROM dual', fallback="noresource,unsupported")

Untuk detail lebih lanjut tentang operasi SQL di PyODPS, lihat SQL.

DataFrame

PyODPS menyediakan API DataFrame untuk pemrosesan data.

Berbeda dengan pandas, DataFrame PyODPS dievaluasi secara lazy. Artinya, komputasi hanya dilakukan ketika Anda memanggil metode eksekusi langsung, seperti execute() atau persist().

from odps.df import DataFrame

# Muat tabel pyodps_iris ke dalam DataFrame
iris = DataFrame(o.get_table('pyodps_iris'))

# Filter baris dan cetak hasilnya. Metode .execute() memicu komputasi aktual.
for record in iris[iris.sepalwidth < 3].execute():
    print(record)

Secara default, PyODPS yang dijalankan secara lokal tidak mencetak log detail seperti Logview. Untuk mengaktifkan output verbose:

from odps import options
options.verbose = True

Parameter waktu proses (petunjuk)

Anda dapat mengatur parameter waktu proses untuk satu kueri dengan meneruskan dictionary hints ke pemanggilan SQL:

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

Untuk menerapkan petunjuk ke semua pemanggilan SQL dalam satu sesi, Anda dapat mengonfigurasinya secara global:

from odps import options

# Semua pemanggilan execute_sql() berikutnya akan secara otomatis menyertakan petunjuk ini
options.sql.settings = {'odps.sql.mapper.split.size': 16}
o.execute_sql('SELECT * FROM pyodps_iris')

Contoh lengkap

Contoh berikut menunjukkan proses lengkap: menghubungkan ke MaxCompute, membuat tabel, menulis data, membaca data, mengkueri tabel my_new_table, dan membersihkan sumber daya.

Contoh ini memanggil table.drop() di bagian akhir, yang secara permanen menghapus tabel my_new_table. Untuk menghindari kehilangan data, jangan gunakan nama tabel yang sudah ada, karena skrip ini akan menghapus tabel tersebut. Jika Anda ingin menyimpan tabel yang dibuat oleh skrip ini, hapus pemanggilan table.drop() di bagian akhir.

  1. Buat file lokal bernama test-pyodps-local.py.

  2. Tambahkan kode berikut:

    import os
    from odps import ODPS
    
    o = ODPS(
        access_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
        secret_access_key=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
        project='your-default-project',
        endpoint='your-end-point',
    )
    
    table = o.create_table('my_new_table', 'num bigint, id string', if_not_exists=True)
    
    records = [[111, 'aaa'],
               [222, 'bbb'],
               [333, 'ccc'],
               [444, 'non_ascii_text']]
    o.write_table(table, records)
    
    # Baca catatan
    for record in o.read_table(table):
        print(record[0], record[1])
    
     # Gunakan SQL untuk mengkueri tabel my_new_table
    result = o.execute_sql('SELECT * FROM my_new_table;')
    
    
    print('Baca data dari my_new_table menggunakan open_reader:')
    
    # Cetak hasil kueri
    with result.open_reader() as reader:
        for record in reader:
            print(record[0], record[1])
    
    # Hapus tabel untuk melepaskan sumber daya
    table.drop()
  3. Jalankan skrip

    python test-pyodps-local.py

    Output yang diharapkan:

    111 aaa
    222 bbb
    333 ccc
    444 non_ascii_text
    Baca data dari my_new_table menggunakan open_reader:
    111 aaa
    222 bbb
    333 ccc
    444 non_ascii_text

Pemecahan Masalah

Error instalasi dependensi

  • Gejala: Terjadi error kompilasi kode C saat menginstal dependensi seperti numpy atau pyarrow.

  • Penyebab: Versi pip atau setuptools Anda sudah usang.

  • Solusi: Perbarui pip dan setuptools, lalu instal ulang PyODPS.

    # Linux/macOS
    pip3 install -U pip setuptools
    
    # Windows
    pip install -U pip setuptools

Konflik versi pip dengan beberapa versi Python

  • Gejala: PyODPS diinstal untuk versi Python yang salah.

  • Penyebab: Sistem Anda memiliki beberapa versi Python, dan pip3 mengarah ke versi yang berbeda dari yang Anda inginkan.

  • Solusi: Panggil pip melalui executable Python spesifik yang ingin Anda gunakan.

    /home/tops/bin/python3.7 -m pip install pyodps

    Ganti /home/tops/bin/python3.7 dengan path ke instalasi Python target Anda.

Error versi OpenSSL urllib3

  • Gejala: Instalasi gagal dengan pesan error urllib3 v2.0 only supports OpenSSL 1.1.1+.

  • Penyebab: Instalasi Python Anda menggunakan versi OpenSSL lama yang tidak kompatibel dengan urllib3 v2.0.

  • Solusi: Instal versi urllib3 yang lebih lama sebelum menginstal PyODPS.

    # Linux/macOS
    pip3 install "urllib3<2.0"
    
    # Windows
    pip install "urllib3<2.0"