① Mục Đích
Khi làm việc với pipeline của Data Factory (trên Azure hay Fabric) hoặc Azure Synapse Analytic. Đôi khi chúng ta cần truyền giá trị thực thi lại cho những tác vụ sữ lý khác.
Bài viết này mình chia sẻ cách trả giá trị là kết quả thực thi của Pipeline và Notebook về lại pipeline gốc và sử dụng cho tác vụ sau.
Bài viết chỉ là ví dụ trên kết quả trả về là chuỗi ký tự string hay array (json). Nên tuy theo yêu cầu và thiết kế, các bạn có thể mở rộng ra để sử dụng
② Thiết lập và sử dụng
2-1. Đối với pipeline
Đối với pipeline, các bạn sử dụng “Set variable” Activity để truyền dữ liệu trả về cho pipeline gốc.
2-1-1. Ví dụ
Ví dụ ta thiết lập cấu trúc pipeline như sau:
■ Main pipeline: Nhận giá trị trả về từ sub pipeline và lưu giá trị trả về vào biến (variable) main_pp_return_value
■ Sub pipeline: Thực hiện xử lý và trả kết quả xử lý về return_value (variable) từ đó trả return_value variable thành 1 result cho main pipeline

2-1-2: Thực hiện
Thiết lập Sub Pipeline với variable: là return_value
(Việc đặt tên cho varible là không quy định)

Mình bỏ qua nội dung sử lý của sub pipeline và giả định kết quả trả về là 1 chuối ký tự.
Bỏ chuỗi ký tự kết quả vào biến return_value bằng “Set Variable” Activity như sau
1. Variable Type: Pipeline Variable
2. Name: Chọn variable giữ kết quả trả về.
➡Ở đây mình chọn “return_value” variable
3. Value: Thiết lập kết quả trả về là kết quả sử lý của bước xữ lý trước đó.
➡Ở đây mình bỏ qua và cố định giá trị trả về là 1 chuỗi “Đây là kết quả trả về”

Tiếp theo, cũng dùng “Set Variable” Activity để trả return_value ra khỏi pipeline
1. Variable Type: Đê truyền giá trị ra khỏi pipieline chọn “Pipeline return value“
2. Value: Chọn “+New” để thiết lập các giá trị trả về
+Name: Thiết lập tên cho giá trị trả về. Ở đây mình set “result” (Lưu ý: không có quy định cố định cho việc đặt tên)
+Type: Khi giá trị trả về là cố định các bạn có thể chọn các kiểu trả về có sẵn (string, int, array…) và thiết lập value trả về.
★Nhưng khi cần trả về là 1 biến, hay 1 giá trị chưa xác định, các bạn dùng “Expression” để thiết lập

Tại Main Pipeline, Các bạn dùng “Excute Pipeline” Activity để khởi động sử lý Sub pipeline
Và sử dụng “Set Variable” Activity để nhận giá trị sau khi Excute Pipeline thực thi xong
- Variable Type: Chọn “Pipeline variable”
- Name: Chọn variable sẽ chứa giá trị trả về. Ở đây mình tạo và sử dụng variable tên “main_pp_return_value”
- Value: Các bạn thiết lập như cấu trúc sau.
<đối tượng excute pipeline activity có giá trị trả về>.output.pipelineReturnValue.<tên giá trị trả về được thiết lập trong sub pipeline>
Ở ví dụ mình thiết lập như sau: @activity(‘Sub Pipeline’).output.pipelineReturnValue.result

Kết quả thực thi như sau.
main_pp_return_value nhận được giá trị “Đây là kết quả trả về” như sau

2-2. Đối với Notebook
Đối với notebook, các bạn sử dụng “mssparkutils.notebook.exit(<Giá trị trả về>)” của pyspark. Để trả trả trị về cho Pipeline Root
2-2-1. Ví dụ
Ví dụ ta thiết lập cấu trúc pipeline như sau:
■ Main pipeline: Nhận giá trị trả về từ xử lý Notebook và lưu giá trị trả về vào biến (variable) main_nb_return_value
■ Notebook: Thực hiện xử lý và trả kết quả xử lý về cho pipeline theo dạng json.

2-2-2: Thực hiện
Thiết lập Notebook sử dụng pyspark nên mình dùng mssparkutils.notebook.exit(<kết quả trả về>) để trả kết quả về. Trong ví dụ mình bỏ quả nội dung xử lý của notebook, chỉ tập ví dụ về phần thiết lập giá trị trả về.
Dưới đây là code thực hiện:
# Khai báo biến
nb_var_return_value = []
#print kiểm tra biến
print(nb_var_return_value)
# Kết thúc xử lý và trả kết quả về là 1 json
# import json để xử lý dữ liệu json
import json
# Tạo giá trị trả về cho biến như 1 cấu trúc json
nb_var_return_value = [{"result":"Đây là kết quả trả về từ notebook"}]
# Các bạn có thể dùng json.dumps để có thể chuyển đổi dữ liệu qua định dạng json như sau
result = json.dumps(nb_var_return_value, ensure_ascii = False, indent = 0)
# Trả kết quả json được lưu trong result khi kết thúc notebook
mssparkutils.notebook.exit(result)

Tại Main Pipeline,
Các bạn dùng “Excute Notebook” Activity để khởi động sử lý Notebook
Và sử dụng “Set Variable” Activity để nhận giá trị sau khi Excute Notebook thực thi xong
- Variable Type: Chọn “Pipeline variable”
- Name: Chọn variable sẽ chứa giá trị trả về. Ở đây mình tạo và sử dụng variable tên “main_nb_return_value”
- Value: Vì excute Notebook sẽ trả kết quả về là 1 định dạng json. Các bạn dùng cách sau để lấy kết quả
@json(
activity(‘<Tên activity thực thi notebook>’).output.result.exitValue
)[0].<tên tag json giữ giá trị>
Ví dụ như sau:
@json(
activity('Notebook').output.result.exitValue
)[0].result

Kết quả thực thi như sau.
main_nb_return_value nhận được giá trị “Đây là kết quả trả về” như sau

Ghi chú: Vì kết quả thực thi notebook là 1 kết quả json, nên chúng ta dùng json để lấy dữ liệu.
Dưới đây là kết quả notebook trả về khi thực thi trên pipeline.

Ghi chú 2:
Đối với kết quả json gồm nhiều phần tử, các bạn cần dùng Array varriable để lưu trữ kết quả.
Tùy vào kết quả cần trả về mà cách xử lý có khác nhau, nhưng với ví dụ mẫu trên hi vọng sẽ giúp các bạn khi làm việc với pipeline và notebook để có thể mở rộng tùy theo yêu cầu công việc.
Summary
Khi làm việc với pipeline của Data Factory (trên Azure hay Fabric) hoặc Azure Synapse Analytic. Đôi khi chúng ta cần truyền giá trị thực thi lại cho những tác vụ sữ lý khác.
Bài viết này mình chia sẻ cách trả giá trị là kết quả thực thi của Pipeline và Notebook về lại pipeline gốc và sử dụng cho tác vụ sau.
