All Products
Search
Document Center

MaxCompute:Komputasi progresif

Last Updated:Jun 19, 2025

Komputasi progresif adalah metode yang menggabungkan pemrosesan aliran dan batch untuk meningkatkan efisiensi sumber daya serta mengurangi latensi kueri. Topik ini menjelaskan konfigurasi dasar, penyetelan komputasi progresif, serta menyediakan contoh skrip pekerjaan.

Informasi latar belakang

Dalam komputasi progresif, data tambahan ditangkap dan hasil perantara dipertahankan. Hal ini mengurangi konsumsi sumber daya dan latensi kueri, serta memberikan fleksibilitas lebih besar dalam penjadwalan eksekusi dan granularitas data. Sebagai contoh, kueri rentang digunakan untuk menghitung total penjualan mingguan suatu produk. Dibandingkan dengan pemrosesan batch tradisional, komputasi progresif mengurangi beban komputasi hingga 70% pada setiap run setelah run pertama.

  • Pemrosesan Batch Tradisional:

    Mulai dari hari n+1 (n>=7), data yang mencakup dari hari n-5 hingga hari n dihitung secara redundan.

  • Komputasi Progresif:

    Mulai dari hari n+1 (n>=7), hanya data tambahan pada hari saat ini yang dihitung. Hasilnya kemudian digabungkan dengan hasil perhitungan untuk enam hari sebelumnya untuk mendapatkan hasil mingguan. Ini menghilangkan pemrosesan redundan dan mengurangi beban komputasi hingga 70%.

    null
    • Pada run pertama komputasi progresif untuk kueri rentang, hasil perantara dihitung untuk setiap hari dalam rentang, yang mungkin memerlukan waktu lebih lama daripada pemrosesan batch. Oleh karena itu, disarankan untuk melakukan run manual terlebih dahulu guna memastikan performa optimal selama periode baseline.

    • Selama komputasi progresif, hasil perantara disimpan sampai tidak lagi digunakan. Biaya penyimpanan tambahan diimbangi oleh penghapusan perhitungan redundan. Dengan demikian, komputasi progresif tetap lebih hemat biaya dan lebih cepat dibandingkan dengan pemrosesan batch tradisional.

Konfigurasi dasar

Saat pertama kali menggunakan fitur komputasi progresif, disarankan untuk menguji performanya di lingkungan pengembangan. Jika performanya sesuai harapan, Anda dapat menggunakannya di lingkungan produksi. Untuk menggunakan fitur ini, ikuti langkah-langkah berikut:

  1. Aktifkan fitur saat mengirimkan pekerjaan.

    • Format:

      set odps.progressive.enable=[true|false];
    • Parameter:

      • true: Mengaktifkan fitur komputasi progresif.

      • false (default): Menonaktifkan fitur komputasi progresif.

  2. Konfigurasikan mode komputasi.

    • Format:

      set odps.progressive.range.query.input.partition.pattern=<pattern_value>;
    • Parameter:

      Nilai valid parameter pattern_value:

      • PASS_BY_HOUR: Menggunakan jendela geser tingkat jam atau menit untuk memproses data. Skenario yang berlaku termasuk menanyakan data 5 menit terakhir atau 3 jam terakhir.

      • PASS_BY_HOUR_AND_DAY: Menggunakan jendela geser multi-hari untuk memproses data dan menyimpan data di jendela paling baru ke partisi berbeda berdasarkan jam. Skenario yang berlaku termasuk menanyakan data 3 jam atau hari terakhir.

      • PASS_BY_DAY: Menggunakan jendela geser multi-hari untuk memproses data. Skenario yang berlaku termasuk menanyakan data 3 hari terakhir.

      • INCREASING: Menggunakan jendela akumulasi yang mencakup beberapa hari untuk memproses data dan menyimpan data di jendela paling baru ke partisi berbeda berdasarkan hari. Skenario yang berlaku termasuk menanyakan data dari 50 hari terakhir atau 3 tahun terakhir.

      • INCREASING_IN_A_MONTH: Menggunakan jendela akumulasi yang mencakup dari hari pertama bulan saat ini hingga hari saat ini.

      • INCREASING_IN_A_YEAR: Menggunakan jendela akumulasi yang mencakup dari hari pertama tahun saat ini hingga hari saat ini.

  3. (Opsional) Jika Anda mengatur parameter pattern_value menjadi PASS_BY_HOUR pada langkah sebelumnya, Anda dapat menentukan kolom waktu yang mewakili granularitas lebih halus berdasarkan kebutuhan bisnis Anda.

    • Format:

      • Opsi 1:

        set odps.progressive.range.query.time.partition.col.names=default:<col_name_day>:<col_name_hour>:<col_name_minute>|<col_name_day>:<col_name_hour>:<col_name_minute>|...;
      • Opsi 2:

        set odps.progressive.range.query.time.partition.col.names=<table_name>:<col_name_day>:<col_name_hour>:<col_name_minute>|<col_name_day>:<col_name_hour>:<col_name_minute>|...;
      • Opsi 3:

        set odps.progressive.range.query.time.partition.col.names=default:<col_name_day>:<col_name_hour>:<col_name_minute>,<table_name>:<col_name_day>:<col_name_hour>:<col_name_minute>,..;
    • Parameter:

      • default: Menentukan bahwa semua tabel yang memenuhi kondisi tertentu dicari. Parameter ini adalah kata kunci.

      • table_name: Menentukan nama tabel yang ingin Anda tanyakan kolom waktunya. Anda dapat menentukan beberapa tabel. Contoh: set odps.progressive.range.query.time.partition.col.names=table_1:day:hour,table_2:hour:minute;

      • <col_name_day>:<col_name_hour>:<col_name_minute>: Menentukan kolom waktu yang ingin Anda tanyakan. Anda dapat menentukan beberapa kolom. Contoh: set odps.progressive.range.query.time.partition.col.names=table_1:day:hour|day:hour2,table_2:day:hour:minute|day:hour2;

    • Konfigurasi Contoh:

      1. Jalankan komputasi progresif setiap jam.

        set odps.progressive.range.query.input.partition.pattern=PASS_BY_HOUR:1;
      2. Tentukan kolom waktu yang lebih halus.

        set odps.progressive.range.query.time.partition.col.names=default:ds:hh|dt:hour;

Konfigurasi penyetelan

  • Tentukan metode penyimpanan untuk tabel perantara.

    Dalam komputasi progresif, data dalam tabel perantara diacak sebelum perhitungan. Untuk meningkatkan performa komputasi, tambahkan konfigurasi berikut untuk menyimpan tabel perantara sebagai tabel kluster.

    • Format:

      set range.query.force.cluster.table=[true|false];
    • Parameter:

      • true: Menyimpan tabel perantara sebagai tabel kluster.

      • false (default): Sistem secara otomatis memilih metode penyimpanan berdasarkan keberadaan operasi shuffle.

        null

        Disarankan untuk mengatur parameter ini menjadi true.

  • Tentukan jumlah maksimum instance konkuren.

    Run pertama komputasi progresif sangat intensif sumber daya karena semua data dalam rentang waktu yang ditentukan diproses. Untuk mencegah konsumsi sumber daya berlebihan selama run pertama, disarankan untuk menambahkan konfigurasi berikut.

    • Format:

      set odps.progressive.combine.exec.time.limit.num=<number>;
    • Parameter:

      number: Jumlah maksimum instance konkuren. Nilai default: 15. Atur parameter ini ke nilai lebih besar atau sama dengan 1.

      null

      Tentukan nilai berdasarkan status running aktual pekerjaan. Nilai yang tidak tepat memengaruhi efisiensi running.

Contoh

  1. Run Pertama

    Dalam contoh komputasi progresif ini, jendela waktu geser multi-hari digunakan. Jendela waktu pertama untuk kueri adalah [20200801,20200807]. Contoh skrip pekerjaan:

    set odps.progressive.enable=true;
    set odps.progressive.range.query.input.partition.pattern=PASS_BY_DAY;
    
    CREATE TABLE adl_aegis_webshell_test_neoke AS
    SELECT
    request_datetime,host,uri,src_ip,src_port,dst_ip,dst_port,method,post_data,user_agent,ret_code,cookie,
    referer,x_forward_for,rsp_content_type,rqs_content_type,content_length,jump_location,set_cookie,ttl,
    get_bigwebshell_uri(uri) AS nopar_uri,internet_ip
    FROM secbase.adl_aegis_webshell_newadd_beaverlog
    WHERE ds >= TO_CHAR(DATEADD(TO_DATE('20200807','yyyymmdd'),-6,'dd') ,'yyyymmdd')
    AND ds <= '20200807';
  2. Run Kedua

    Pada run pertama, sistem menghitung hasil untuk setiap partisi dan menyimpan hasilnya ke tujuh tabel perantara. Setiap tabel sesuai dengan satu hari dalam rentang waktu yang ditentukan. Pada run kedua di hari kedua, pekerjaan memproses data dalam rentang waktu [20200802, 20200808]. Data yang sesuai dengan kolom 20200808 dihitung secara terpisah dan kemudian digabungkan dengan hasil dalam tujuh tabel perantara untuk mendapatkan hasil akhir.