Dalam alur kerja data yang kompleks, sering kali diperlukan untuk meneruskan informasi dinamis antar node. Meskipun metode umum adalah menggunakan tabel antara, pendekatan ini sangat tidak efisien untuk meneruskan data dalam jumlah kecil karena menambahkan I/O dan kompleksitas yang tidak perlu. Node assignment menyediakan solusi ringan: mengeksekusi skrip singkat (MaxCompute SQL, Python 2, atau Shell) dan meneruskan output-nya langsung sebagai parameter ke node downstream. Hal ini memungkinkan Anda membangun pipeline fleksibel di mana tugas dikonfigurasi secara dinamis berdasarkan hasil dari tugas upstream.
Catatan penggunaan
Edition: DataWorks Edisi Standar atau lebih tinggi.
Izin: Anda harus memiliki peran Development atau Workspace Manager di ruang kerja DataWorks Anda. Untuk informasi selengkapnya, lihat Tambahkan anggota ke ruang kerja.
Cara kerja
Fungsi inti dari node assignment adalah penerusan parameter: mentransfer data dari node assignment ke node downstream.
Node assignment menghasilkan data dengan secara otomatis menetapkan output atau hasil kueri terakhir ke parameter output node yang dihasilkan sistem bernama
outputs.Node downstream mengonsumsi data tersebut. Anda mengonfigurasinya untuk menggunakan
outputsdengan menambahkan parameter input node (misalnya,param).
Format parameter
Nilai dan format parameter outputs bergantung pada bahasa skrip yang digunakan:
Bahasa | Nilai | Format |
MaxCompute SQL | Output dari pernyataan | Set hasil diteruskan sebagai larik dua dimensi. |
Python 2 | Output dari pernyataan | Output dianggap sebagai string tunggal, lalu dipisahkan berdasarkan koma ( Contoh: Jika output-nya adalah Penting Escape koma dalam konten output. Misalnya, jika output-nya adalah |
Shell | Output dari pernyataan |
Prosedur
Hasil dari node assignment dapat diteruskan ke jenis node downstream apa pun. Contoh berikut menunjukkan alur kerja ini menggunakan node Shell.
Konfigurasikan node penugasan.
Di alur kerja Anda, buat dan edit node assignment. Pilih MaxCompute SQL, Python 2, atau Shell sesuai kebutuhan, lalu tulis kodenya.

Konfigurasikan node Shell.

Buat node Shell.
Di panel Scheduling di sebelah kanan, pilih tab Input and Output Parameters.
Di bagian Input Parameters, klik Create Parameter.
Tetapkan nama parameter untuk parameter input, misalnya
param, dan atur nilainya ke parameteroutputs.CatatanSetelah konfigurasi ini, DataWorks secara otomatis membuat dependensi antara node Shell dan node assignment.
Setelah mengonfigurasi parameter, Anda dapat mereferensikan nilai yang diteruskan dalam skrip Shell Anda dengan menggunakan format
${param}.
Jalankan dan verifikasi.
Di kanvas alur kerja, klik Deploy di bilah alat atas dan pilih Full Deployment.
Navigasi ke .
Lakukan smoke test pada alur kerja target Anda dan verifikasi bahwa hasilnya sesuai harapan.
Batasan
Parameter hanya dapat diteruskan ke node downstream langsung.
Batas ukuran:
outputstidak boleh melebihi 2 MB, jika tidak node assignment akan gagal.Batasan sintaksis:
Jangan sertakan komentar dalam kode node assignment. Komentar dapat mengganggu penguraian output dan menyebabkan node gagal atau menghasilkan nilai yang salah.
Klausa
WITHtidak didukung dalam mode MaxCompute SQL.
Contoh berdasarkan bahasa
Format data outputs dan metode referensinya bervariasi tergantung bahasa.
Contoh 1: Meneruskan hasil kueri MaxCompute SQL
Hasil kueri SQL diteruskan ke node Shell sebagai larik dua dimensi.
Assignment Node
Asumsikan kode SQL mengembalikan dua baris dan dua kolom:
SELECT 'beijing', '1001' UNION ALL SELECT 'hangzhou', '1002';Shell node
Tambahkan parameter input bernama
paramyang mereferensikanoutputsdari node assignment.Gunakan skrip berikut untuk membaca data:
echo "Full result set: ${region}" echo "First row: ${region[0]}" echo "Second field of the first row: ${region[0][1]}"DataWorks melakukan penggantian statis. Output:
Full result set: beijing,1001 hangzhou,1002 First row: beijing,1001 Second field of the first row: 1001
Contoh 2: Meneruskan output Python 2
Output pernyataan print Python 2 dipisahkan berdasarkan koma (,) dan diteruskan sebagai larik satu dimensi.
Assignment Node
Kode Python 2-nya adalah sebagai berikut:
print 'Electronics, Clothing, Books';Shell node
Tambahkan parameter input bernama
paramyang mereferensikanoutputsdari node assignment. Gunakan skrip berikut untuk membaca data:Gunakan skrip berikut untuk membaca data:
# Output the full array echo "Full result set: ${types}" # Output a specific element by index echo "Second element: ${types[1]}"DataWorks melakukan penggantian statis. Output:
Full result set: Electronics,Clothing,Books Second element: Clothing
Logika pemrosesan untuk node Shell mirip dengan node Python 2.
Kasus penggunaan: Proses batch data dari tabel partisi untuk beberapa lini bisnis
Contoh ini menunjukkan cara menggunakan node assignment dan node for-each untuk memproses batch data perilaku pengguna dari beberapa lini bisnis.
Latar belakang
Asumsikan Anda adalah developer data di perusahaan internet besar. Anda bertanggung jawab memproses data dari tiga lini bisnis inti: e-dagang, keuangan, dan logistik. Lini bisnis tambahan mungkin ditambahkan di masa depan. Anda perlu menjalankan logika agregasi yang sama pada log perilaku pengguna dari ketiga lini bisnis ini setiap hari. Logika tersebut menghitung PV untuk setiap pengguna dan menyimpan hasilnya di tabel agregat terpadu.
Tabel sumber upstream (layer DWD):
dwd_user_behavior_ecom_d: Tabel perilaku pengguna e-dagang.dwd_user_behavior_finance_d: Tabel perilaku pengguna keuangan.dwd_user_behavior_logistics_d: Tabel perilaku pengguna logistik.dwd_user_behavior_${line-of-business}_d: Tabel perilaku pengguna untuk lini bisnis potensial lainnya.Tabel-tabel ini memiliki skema yang sama dan dipartisi berdasarkan hari (
dt).
Tabel tujuan downstream (layer DWS):
dws_user_summary_d: Tabel agregat pengguna.Tabel ini dipartisi berdasarkan lini bisnis (
biz_line) dan hari (dt). Digunakan untuk menyimpan hasil agregasi semua lini bisnis.
Membuat tugas terpisah untuk setiap lini bisnis mahal untuk dipelihara dan rentan terhadap kesalahan. Jika Anda menggunakan node for-each, Anda hanya perlu memelihara satu set logika pemrosesan. Sistem secara otomatis melakukan iterasi semua lini bisnis untuk menyelesaikan perhitungan.
Persiapan data
Pertama, buat tabel contoh dan masukkan data uji. Contoh ini menggunakan stempel waktu data 20251010.
Kaitkan resource komputasi MaxCompute dengan ruang kerja.
Buka Data Studio dan buat node MaxCompute SQL.
Buat tabel sumber: Tambahkan kode berikut ke node MaxCompute SQL, pilih, lalu jalankan.
-- E-commerce user behavior table CREATE TABLE IF NOT EXISTS dwd_user_behavior_ecom_d ( user_id STRING COMMENT 'User ID', action_type STRING COMMENT 'Behavior type', event_time BIGINT COMMENT 'Millisecond-level UNIX timestamp of the event occurrence' ) COMMENT 'Details of e-commerce user behavioral logs' PARTITIONED BY (dt STRING COMMENT 'Date partition in yyyymmdd format'); INSERT OVERWRITE TABLE dwd_user_behavior_ecom_d PARTITION (dt='20251010') VALUES ('user001', 'click', 1760004060000), -- 2025-10-10 10:01:00.000 ('user002', 'browse', 1760004150000), -- 2025-10-10 10:02:30.000 ('user001', 'add_to_cart', 1760004300000); -- 2025-10-10 10:05:00.000 -- Verify that the e-commerce user behavior table is created. SELECT * FROM dwd_user_behavior_ecom_d where dt='20251010'; -- Finance user behavior table CREATE TABLE IF NOT EXISTS dwd_user_behavior_finance_d ( user_id STRING COMMENT 'User ID', action_type STRING COMMENT 'Behavior type', event_time BIGINT COMMENT 'Millisecond-level UNIX timestamp of the event occurrence' ) COMMENT 'Details of finance user behavioral logs' PARTITIONED BY (dt STRING COMMENT 'Date partition in yyyymmdd format'); INSERT OVERWRITE TABLE dwd_user_behavior_finance_d PARTITION (dt='20251010') VALUES ('user003', 'open_app', 1760020200000), -- 2025-10-10 14:30:00.000 ('user003', 'transfer', 1760020215000), -- 2025-10-10 14:30:15.000 ('user003', 'check_balance', 1760020245000), -- 2025-10-10 14:30:45.000 ('user004', 'open_app', 1760020300000); -- 2025-10-10 14:31:40.000 -- Verify that the finance user behavior table is created. SELECT * FROM dwd_user_behavior_finance_d where dt='20251010'; -- Logistics user behavior table CREATE TABLE IF NOT EXISTS dwd_user_behavior_logistics_d ( user_id STRING COMMENT 'User ID', action_type STRING COMMENT 'Behavior type', event_time BIGINT COMMENT 'Millisecond-level UNIX timestamp of the event occurrence' ) COMMENT 'Details of logistics user behavioral logs' PARTITIONED BY (dt STRING COMMENT 'Date partition in yyyymmdd format'); INSERT OVERWRITE TABLE dwd_user_behavior_logistics_d PARTITION (dt='20251010') VALUES ('user001', 'check_status', 1760032800000), -- 2025-10-10 18:00:00.000 ('user005', 'schedule_pickup', 1760032920000); -- 2025-10-10 18:02:00.000 -- Verify that the logistics user behavior table is created. SELECT * FROM dwd_user_behavior_logistics_d where dt='20251010';Buat tabel tujuan: Tambahkan kode berikut ke node MaxCompute SQL, pilih, lalu jalankan.
CREATE TABLE IF NOT EXISTS dws_user_summary_d ( user_id STRING COMMENT 'User ID', pv BIGINT COMMENT 'Daily popularity' ) COMMENT 'Daily user popularity aggregate table' PARTITIONED BY ( dt STRING COMMENT 'Date partition in yyyymmdd format', biz_line STRING COMMENT 'Line-of-business partition, such as ecom, finance, logistics' );PentingJika ruang kerja menggunakan mode standar, Anda harus menyebar node ini ke lingkungan produksi dan melakukan pengisian ulang data.
Implementasi alur kerja
Buat alur kerja. Di panel Scheduling di sebelah kanan, atur parameter penjadwalan bizdate ke hari sebelumnya
$[yyyymmdd-1].
Di alur kerja, buat node assignment bernama
get_biz_list. Tulis kode berikut dalam MaxCompute SQL. Node ini mengeluarkan daftar lini bisnis yang akan diproses.-- Output all lines of business to be processed SELECT 'ecom' AS biz_line UNION ALL SELECT 'finance' AS biz_line UNION ALL SELECT 'logistics' AS biz_line;Konfigurasikan node for-each
Kembali ke kanvas alur kerja dan buat node for-each downstream untuk node assignment.
Buka halaman pengaturan node for-each. Di tab Scheduling di sebelah kanan, di bawah , atur nilai parameter loopDataArray ke outputs dari node get_biz_list.

Di badan loop node for-each, klik Create Internal Node. Buat node MaxCompute SQL dan tulis logika pemrosesan untuk badan loop.
CatatanSkrip ini dijalankan oleh node for-each dan dijalankan sekali untuk setiap lini bisnis.
Variabel bawaan
${dag.foreach.current}secara dinamis diganti dengan nama lini bisnis saat ini pada waktu proses. Nilai iterasi yang diharapkan adalahecom,finance, danlogistics.
SET odps.sql.allow.dynamic.partition=true; INSERT OVERWRITE TABLE dws_user_summary_d PARTITION (dt='${bizdate}', biz_line) SELECT user_id, COUNT(*) AS pv, '${dag.foreach.current}' AS biz_line FROM dwd_user_behavior_${dag.foreach.current}_d WHERE dt = '${bizdate}' GROUP BY user_id;
Tambahkan node verifikasi
Kembali ke kanvas alur kerja. Untuk node for-each, klik Create Descendant Node. Buat node MaxCompute SQL dan tambahkan kode berikut.
SELECT * FROM dws_user_summary_d WHERE dt='20251010' ORDER BY biz_line, user_id;
Sebar dan jalankan
Sebarkan alur kerja ke lingkungan produksi. Di Operation Center, navigasi ke , temukan alur kerja target, jalankan pengujian, dan pilih '20251010' sebagai stempel waktu data.
Setelah eksekusi selesai, lihat log eksekusi di instans pengujian. Output yang diharapkan dari node terakhir adalah:
user_id | pv | dt | biz_line |
user001 | 2 | 20251010 | ecom |
user002 | 1 | 20251010 | ecom |
user003 | 3 | 20251010 | finance |
user004 | 1 | 20251010 | finance |
user001 | 1 | 20251010 | logistics |
user005 | 1 | 20251010 | logistics |
Keunggulan
Ekstensibilitas tinggi: Jika lini bisnis baru ditambahkan, Anda hanya perlu menambahkan satu baris kode SQL di node assignment. Anda tidak perlu mengubah logika pemrosesan.
Pemeliharaan mudah: Semua lini bisnis berbagi logika pemrosesan yang sama. Perubahan di satu tempat berlaku untuk semuanya.
FAQ
Q: Di MaxCompute SQL, mengapa saya menerima error "find no select sql in sql assignment!"?
A: Error ini terjadi karena kode MaxCompute SQL tidak memiliki pernyataan
SELECT. Anda harus menambahkan pernyataanSELECT. Sintaksis WITH saat ini tidak didukung, dan penggunaannya juga menyebabkan error ini.Q: Di Shell atau Python, mengapa saya menerima error "OutPut Result is null, cannot handle!"?
A: Error ini terjadi karena output-nya kosong. Periksa apakah kode Anda berisi pernyataan print, seperti
printatauecho.Q: Di Shell atau Python, bagaimana cara menangani elemen output yang mengandung koma?
A: Anda perlu escape koma
,dengan mengubahnya menjadi\,. Kode Python berikut memberikan contohnya.categories = ["Electronics", "Clothing, Shoes & Accessories"] # Escape commas contained in each element # Replace ',' with '\,' escaped_categories = [cat.replace(",", "\,") for cat in categories] # Join the escaped elements with a comma output_string = ",".join(escaped_categories) print output_string # The final string output to the downstream node is: # Electronics,Clothing\, Shoes & AccessoriesQ: Apakah node downstream dapat menerima hasil dari beberapa node assignment?
A: Ya, bisa. Anda dapat menetapkan hasil dari node berbeda ke parameter berbeda.

Q: Apakah node assignment mendukung bahasa lain?
A: Node assignment saat ini hanya mendukung MaxCompute SQL, Python 2, dan Shell. Namun, beberapa node seperti EMR Hive, Hologres SQL, EMR Spark SQL, AnalyticDB for PostgreSQL, ClickHouse SQL, dan MySQL memiliki fitur penugasan parameter bawaan yang menyediakan fungsionalitas yang sama.

Referensi
Untuk informasi selengkapnya tentang cara melakukan pemrosesan loop di node downstream, lihat Node for-each dan Node do-while.
Untuk informasi selengkapnya tentang cara meneruskan parameter lintas level, lihat Node parameter.
Untuk informasi selengkapnya tentang konfigurasi penerusan parameter, lihat Parameter konteks node.