(Acest articol a fost publicat pentru prima dată pe date în zborși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Versiunea 0.7.0 a maestro a fost lansată și, odată cu ea, este și capacitatea de a rula conducte condiționat. Pe scurt, acest lucru este util în special atunci când aveți conducte DAG și doriți să vă ramificați sau să executați doar părți ale unui DAG atunci când rezultatul îndeplinește o anumită condiție.
Dacă nu ați auzit de maestro, este un orchestrator de scenarii pentru R. Puteți afla mai multe despre el aici.
Obțineți-l de la CRAN:
install.packages("maestro")
Conducte condiționate cu @maestroRunIf
O conductă poate fi condiționată folosind maestroRunIf etichetă. Valoarea etichetei trebuie să fie o expresie R care returnează un singur TRUE sau FALSE. Ceea ce face această etichetă specială este faptul că poate fi combinată cu conductele DAG.
Să presupunem că avem o conductă DAG în doi pași pentru a obține buletine meteo și a trimite o notificare în cazul unui buletin activ. Primul pas al DAG este extragerea buletinelor dintr-o sursă de date deschisă. Al doilea pas este trimiterea notificării. Cu toate acestea, dorim ca al doilea pas să se execute doar dacă există un buletin activ.
Codul de mai jos arată această logică condiționată. Conducta send_notification are o maestroRunIf etichetă care verifică adevărul grepl("Alert", .input$bulletin_title). Observați utilizarea .input pentru a obține valoarea din conducta de intrare.
# ./pipelines/bulletins.R
#' @maestroFrequency 15 minutes
#' @maestroStartTime 00:00:00
get_bulletins <- function() {
req <- httr2::request(glue::glue("https://weather.gc.ca/rss/battleboard/ns10_e.xml"))
resp <- req |>
httr2::req_perform() |>
httr2::resp_body_xml() |>
xml2::as_list()
bulletin_title <- resp$feed$title((1))
return(
list(
bulletin_title = bulletin_title
)
)
}
#' @maestroInputs get_bulletins
#' @maestroRunIf grepl("Alert", .input$bulletin_title)
send_notification <- function(.input) {
# Pretend this code sends to email or whatever
message(.input$bulletin_title)
}
Acum rulați programul și send_notification conducta va funcționa condiționat de o alertă meteo.
library(maestro) schedule <- build_schedule(quiet = TRUE) invocation <- run_schedule( schedule, orch_frequency = "15 minutes", log_to_console = TRUE )
── (2025-11-03 08:57:59) Running pipelines ▶
✔ get_bulletins (246ms)
✔ ? send_notification (12ms)
✔ |-send_notification (18ms)
── (2025-11-03 08:58:00) Pipeline execution completed ■ | 0.294 sec elapsed
✔ 2 successes | ! 0 warnings | ✖ 0 errors | ◼ 2 total
────────────────────────────────────────────────────────────────────────────────
── Next scheduled pipelines ❯
Pipe name | Next scheduled run
• get_bulletins | 2025-11-03 13:15:00
Conductele condiționate pot fi utilizate și pentru o logică de ramificare mai complexă. Pentru mai multe exemple, consultați vigneta despre condiționale.
Apelați utilizatorilor maestro
Ca întotdeauna, orchestrare fericită!
