All Products
Search
Document Center

DataWorks:Node Skrip MaxCompute

Last Updated:Apr 25, 2026

DataWorks menyediakan node MaxCompute Script yang mendukung pengembangan dalam mode skrip berdasarkan mesin SQL MaxCompute 2.0. Topik ini menjelaskan cara menggunakan node MaxCompute Script tersebut.

Latar Belakang

Mesin SQL MaxCompute mendukung mode skrip, yang menggabungkan beberapa pernyataan SQL menjadi satu skrip yang dikompilasi dan dieksekusi sebagai satu kesatuan. Pendekatan ini cocok untuk kueri kompleks, seperti subkueri bersarang atau operasi multi-langkah. Dengan mengirimkan seluruh skrip sekaligus, Anda memperoleh rencana eksekusi terpadu, sehingga pekerjaan hanya masuk antrian dan dijalankan satu kali, yang lebih efisien dalam penggunaan resource. Untuk informasi selengkapnya, lihat mode skrip SQL. Di DataWorks, Anda dapat menggunakan node MaxCompute Script untuk membuat dan menjadwalkan tugas berbasis skrip.

Kasus Penggunaan

Mode skrip ideal untuk menulis ulang subkueri bersarang yang sangat dalam atau membagi logika kompleks menjadi beberapa pernyataan.

Sebagai contoh, dalam mode skrip, Anda dapat menetapkan konstanta ke variabel lalu menggunakan pernyataan SELECT * FROM variable untuk mengonversinya menjadi skalar guna digunakan dalam perhitungan dengan kolom lain. Konstanta tersebut juga dapat disimpan dalam tabel satu baris. Lihat contoh berikut. Untuk sintaks konversi, lihat Subkueri (SUBQUERY).

@a := SELECT 10; -- Tetapkan konstanta 10 ke @a. Atau, tetapkan nilai dari tabel satu baris t1, misalnya SELECT col1 FROM t1.
@b := SELECT key,VALUE+(SELECT * FROM @a) FROM t2 WHERE key >10000; -- Hitung nilai baru dengan menggunakan kolom value dari tabel t2 dan nilai dari @a.
SELECT * FROM @b;
Catatan

Hindari penggunaan satu skrip dengan variabel tabel untuk menggabungkan sumber data yang siap pada waktu yang sangat berbeda (misalnya, satu sumber siap pukul 01.00 dan yang lain pukul 07.00). Pekerjaan tidak akan dimulai hingga semua data tersedia, yang dapat menyebabkan penundaan signifikan.

Prasyarat

Sintaks

Skrip MaxCompute lengkap mengikuti urutan berikut: pernyataan SET > pernyataan DDL > pernyataan DML. Setiap jenis dapat memiliki nol atau lebih pernyataan, tetapi tidak boleh dicampur. Pernyataan yang diawali tanda at (@) mendeklarasikan variabel untuk meneruskan hasil antar pernyataan. Sintaksnya adalah sebagai berikut:

--Pernyataan SET
SET odps.sql.type.system.odps2=true;
[SET odps.stage.reducer.num=***;]
[...]
--Pernyataan DDL
CREATE TABLE table1 xxx;
[CREATE TABLE table2 xxx;]
[...]
--Pernyataan DML
@var1 := SELECT [ALL | DISTINCT] select_expr, select_expr, ...
    FROM table3
    [WHERE where_condition];
@var2 := SELECT [ALL | DISTINCT] select_expr, select_expr, ...
    FROM table4
    [WHERE where_condition];
@var3 := SELECT [ALL | DISTINCT] var1.select_expr, var2.select_expr, ...
    FROM @var1 JOIN @var2 ON ...;
INSERT OVERWRITE|INTO TABLE [PARTITION (partcol1=val1, partcol2=val2 ...)]
    SELECT [ALL | DISTINCT] select_expr, select_expr, ...
    FROM @var3;
[@var4 := SELECT [ALL | DISTINCT] var1.select_expr, var.select_expr, ... FROM @var1
    UNION ALL | UNION
    SELECT [ALL | DISTINCT] var1.select_expr, var.select_expr, ... FROM @var2;
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
    AS
    SELECT [ALL | DISTINCT] select_expr, select_expr, ...
    FROM var4;]

Batasan

Batasan berikut berlaku untuk node MaxCompute Script:

  • Mode skrip mendukung pernyataan SET, pernyataan DML, dan beberapa pernyataan DDL. Pernyataan DDL yang menampilkan hasil ke layar, seperti DESC dan SHOW, tidak didukung.

  • Satu skrip hanya boleh berisi paling banyak satu pernyataan yang menampilkan hasil ke layar, seperti pernyataan SELECT mandiri. Jika tidak, sistem akan mengembalikan error. Disarankan agar Anda tidak menjalankan pernyataan SELECT yang menampilkan hasil ke layar dalam skrip.

  • Satu skrip hanya boleh berisi paling banyak satu pernyataan CREATE TABLE AS, dan pernyataan tersebut harus menjadi pernyataan terakhir. Disarankan agar Anda menulis pernyataan pembuatan tabel dan pernyataan INSERT secara terpisah.

  • Dalam mode skrip, jika satu pernyataan gagal, semua pernyataan dalam skrip akan gagal.

  • Dalam mode skrip, pekerjaan untuk pemrosesan data hanya dibuat setelah semua data masukan siap.

  • Dalam mode skrip, sistem akan mengembalikan error jika tabel dibaca setelah ditulis.

    Contoh yang salah:

    INSERT OVERWRITE TABLE src2 SELECT * FROM src WHERE key > 0;
    @a := SELECT * FROM src2;
    SELECT * FROM @a;

    Contoh yang benar:

    Untuk menghindari masalah baca-setelah-tulis, Anda dapat melakukan modifikasi berikut.

    @a := SELECT * FROM src WHERE key > 0;
    INSERT OVERWRITE TABLE src2 SELECT * FROM @a;
    SELECT * FROM @a;

Buat node MaxCompute Script

Untuk informasi tentang cara membuat node, lihat Buat node MaxCompute Script.

Kembangkan node MaxCompute Script

Pada halaman pengeditan node MaxCompute Script, Anda dapat memilih contoh skrip berikut sesuai kebutuhan bisnis untuk pengembangan.

Pengembangan skrip dasar

Dalam mode skrip MaxCompute, proses kompilasi SQL bersifat langsung. Contoh sederhana berikut menunjukkan cara menggunakan node MaxCompute Script.

CREATE TABLE IF NOT EXISTS dest(key string , VALUE bigint) ;
CREATE TABLE IF NOT EXISTS dest2(key string,VALUE bigint ) ;
@a := SELECT * FROM src WHERE VALUE >0;
@b := SELECT * FROM src2 WHERE key IS NOT NULL;
@c := SELECT * FROM src3 WHERE VALUE IS NOT NULL;
@d := SELECT a.key,b.value FROM @a LEFT OUTER JOIN @b ON a.key=b.key AND b.value>0;
@e := SELECT a.key,c.value FROM @a INNER JOIN @c ON a.key=c.key;
@f := SELECT * FROM @d UNION SELECT * FROM @e UNION SELECT * FROM @a;
INSERT OVERWRITE TABLE dest  SELECT * FROM @f;
@g := SELECT e.key,c.value  FROM @e JOIN @c ON e.key=c.key;
INSERT OVERWRITE TABLE dest2 SELECT * FROM @g;
Pengembangan skrip lanjutan

Mode skrip MaxCompute mendukung pernyataan IF, yang memungkinkan program secara otomatis memilih logika eksekusi berdasarkan kondisi. Sintaks IF di MaxCompute dikategorikan berdasarkan tipe Condition: ekspresi BOOLEAN dan Scalar SubQueries BOOLEAN.

  • Kondisi IF berupa ekspresi BOOLEAN

    Jenis pernyataan IF ELSE ini menentukan cabang mana yang akan dieksekusi pada waktu kompilasi. Contoh:

    --Pemrosesan data
    SET odps.sql.allow.fullscan=true;
    SET odps.optimizer.cbo.rule.filter.black=LM; 
    @date := '${var}';
    @row  TABLE(key int,VALUE bigint); --Deklarasikan variabel row. Jenisnya adalah Table dan skemanya adalah string. 
    IF ( cast(@date  AS bigint) % 2 == 0 ) BEGIN 
    @row  := SELECT key,VALUE FROM src1; 
    END ELSE BEGIN
    @row  := SELECT key,VALUE FROM src2; 
    END
    INSERT OVERWRITE TABLE dest1 PARTITION(p='${var}')  SELECT key,VALUE FROM @row; 
    Catatan

    Kode ini mendefinisikan variabel bernama var. Anda harus memberikan nilai ke variabel var dalam pengaturan parameter penjadwalan.

  • Kondisi IF berupa Scalar SubQuery BOOLEAN

    Jenis pernyataan IF ELSE ini tidak dapat menentukan cabang mana yang akan dieksekusi pada waktu kompilasi. Sebaliknya, penentuan dilakukan pada waktu proses. Oleh karena itu, beberapa pekerjaan harus dikirimkan. Contoh:

    @i bigint;
    @t TABLE(id bigint, VALUE bigint);
    IF ((SELECT count(*) FROM src WHERE a = '5') > 1) BEGIN
    @i := 1;
    @t := SELECT @i, @i*2;
    END ELSE
    BEGIN
    @i := 2;
    @t := SELECT @i, @i*2;
    END
    SELECT id, VALUE FROM @t; 
  • Pengembangan UDF tersemat

    Anda juga dapat menyematkan kode Java atau Python dalam skrip SQL untuk mengembangkan UDF tersemat dalam mode skrip MaxCompute. Untuk informasi selengkapnya, lihat UDF Tersemat.

Debug node MaxCompute Script

  1. Konfigurasikan parameter terkait di Run Configuration di sisi kanan halaman pengeditan node.

    Parameter

    Deskripsi

    Compute resource

    Pilih resource komputasi MaxCompute yang telah Anda kaitkan.

    Compute quota

    Pilih kuota komputasi yang telah Anda buat untuk menyediakan resource komputasi (CPU dan memori) yang dibutuhkan oleh pekerjaan komputasi Anda.

    Jika tidak tersedia kuota komputasi, klik Create Compute Quota dalam daftar tarik-turun, lalu buat kuota komputasi di Konsol MaxCompute.

    Resource group

    Pilih kelompok sumber daya penjadwalan yang telah lulus uji konektivitas dengan resource komputasi. Untuk informasi selengkapnya, lihat Konektivitas jaringan.

  2. Pilih sumber data MaxCompute yang telah Anda buat di dialog parameter pada bilah alat, lalu klik Run untuk menjalankan tugas MaxCompute Script.

Langkah Berikutnya

  • Konfigurasikan pengaturan penjadwalan: Jika Anda ingin node dalam direktori proyek dijadwalkan secara berkala, konfigurasikan Scheduling Policy dan properti penjadwalan terkait di Scheduling Settings di sisi kanan node.

  • Terapkan node: Jika Anda ingin menerapkan tugas ke lingkungan produksi, klik ikon image untuk memulai proses penerapan. Node dalam direktori proyek hanya dijadwalkan secara berkala setelah diterapkan ke lingkungan produksi.

Pernyataan pembuatan tabel dan data sampel

Contoh:

--Buat tabel
CREATE TABLE IF NOT EXISTS src(key string ,VALUE BIGINT);
INSERT INTO src VALUES ('1',11) ;
INSERT INTO src VALUES ('1',11) ;
CREATE TABLE IF NOT EXISTS  src2(key string ,VALUE BIGINT);
INSERT INTO src2  VALUES ('1',22);
INSERT INTO src2  VALUES ('2',22);
CREATE TABLE IF NOT EXISTS  src3(key string ,VALUE BIGINT);
INSERT INTO src3 VALUES ('1',33);
INSERT INTO src3 VALUES ('3',33);