(Acest articol a fost publicat pentru prima dată pe date în zborși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Există o grămadă de noi funcții de partajat ca parte a lansării 0,6.0 a maestro:
maestroFlagsEtichetă și însoțireget_flags()Funcție pentru etichetarea conductelor.maestroPriorityEtichetă pentru determinarea ordinii în care sunt executate conducte programate simultan.- Nou
get_slot_usage()Funcție pentru a ajuta la identificarea intervalelor de timp ocupate (sau liniștite) din program. maestroStartTimeEticheta este mai flexibilă pentru a permite formatele HH: MM: SS.
Dacă nu ați auzit de Maestro, este un pachet care vă ajută să vă programați scripturile R într -un singur proiect folosind etichete. Puteți afla mai multe despre asta aici.
Obțineți -l de la Cran:
install.packages("maestro")
Steaguri
Un steag este un șir arbitrar care ar putea fi folosit pentru a clasifica sau eticheta o conductă.1 Acum puteți adăuga orice număr de steaguri la o conductă folosind maestroFlags Etichetă ca așa:
# ./pipelines
# You could use tags to classify a pipeline as critical
#' @maestroFrequency 1 day
#' @maestroStartTime 2024-06-03
#' @maestroFlags critical
super_important <- function() {
# Obv. does something important
}
# You can have as many flags as you want separated by spaces
#' @maestroFrequency hourly
#' @maestroStartTime 2025-04-05 12:30:00
#' @maestroFlags aviation api-access
airlines <- function() {
# Accesses airlines from an API or whatever
}
După ce ați semnalat câteva conducte, puteți accesa steagurile pentru toate conductele din program ca date. get_flags().
library(maestro) schedule <- build_schedule(quiet = TRUE) get_flags(schedule)
# A tibble: 3 × 2 pipe_name flag1 super_important critical 2 airlines aviation 3 airlines api-access
Acest tabel ar putea fi utilizat, de exemplu, pentru a trimite rapoarte de stare către anumite grupuri pe baza etichetelor sau pentru a declanșa avertismente/erori pe baza criticității conductelor care nu au reușit. În aceste cazuri, este util să vă alăturați mesei cu get_status() sau get_schedule().
Prioritate
Uneori, aveți mai multe conducte care rulează în același timp – spuneți, dacă aveți două conducte pe oră care rulează pe aceeași cadență. Poate doriți să controlați ordinea în care sunt executate aceste conducte2. Noul maestroPriority Eticheta vă permite să configurați prioritatea în care sunt executate conductele:
#' @maestroFrequency 1 hour
#' @maestroStartTime 10:00:00
im_less_important <- function() {
# some less important stuff
}
#' @maestroFrequency 1 hour
#' @maestroStartTime 10:00:00
#' @maestroPriority 1
i_go_first <- function() {
# this needs to happen first
}
Aceste conducte funcționează în fiecare oră pe 00 minute. A doua conductă are maestroPriority 1indicând că merge mai întâi când orchestratorul începe conductele. Conductele fără prioritate merg întotdeauna ultima și conductele cu același nivel prioritar Utilizați ordonarea implicită (alfabetică după numele căii scriptului și apoi numărul de linie) în propriul nivel prioritar.
Utilizarea slotului
Pe măsură ce un proiect Maestro crește, poate deveni din ce în ce mai dificil de știut când este cel mai bun moment pentru a programa o conductă. De obicei, doriți să evitați să programați o grămadă de conducte în același timp (cu excepția cazului în care acestea nevoie pentru a fi executat împreună sau în acel moment) și nu doriți o tonă de sloturi de timp goale (adică, ori în care orchestratorul nu începe conductele).
Iată, The get_slot_usage() funcţie!
Această funcție așteaptă cu nerăbdare toate rulările programate de conducte din proiect și returnează un cadru. Este mai ușor să înțelegem cum funcționează acest lucru în practică.
Să creăm mai întâi o grămadă de conducte:
#' ./pipelines
#' @maestroFrequency hourly
#' @maestroStartTime 14:00:00
hourly <- function() {
}
#' @maestroFrequency daily
#' @maestroStartTime 14:00:00
daily <- function() {
}
#' @maestroFrequency 3 hours
#' @maestroStartTime 00:00:00
every_3_hours <- function() {
}
#' @maestroFrequency weekly
#' @maestroStartTime 2025-05-15 04:00:00
weekly <- function() {
}
#' @maestroFrequency daily
#' @maestroDays 4 9 16 20
some_days <- function() {
}
În acest exemplu, avem în vedere rularea orchestratorului la fiecare 1 oră și dorim să vedem pentru fiecare interval de timp de oră ce conducte sunt programate să ruleze:
schedule <- build_schedule(quiet = TRUE) get_slot_usage( schedule, orch_frequency = "1 hour", slot_interval = "hour" )
# A tibble: 24 × 3 slot n_runs pipe_names1 00:00 3 hourly, every_3_hours, some_days 2 01:00 1 hourly 3 02:00 1 hourly 4 03:00 2 hourly, every_3_hours 5 04:00 2 hourly, weekly 6 05:00 1 hourly 7 06:00 2 hourly, every_3_hours 8 07:00 1 hourly 9 08:00 1 hourly 10 09:00 2 hourly, every_3_hours # ℹ 14 more rows
Putem vedea că lucrurile sunt distribuite destul de uniform, în afară de ora 00, care are 3 conducte programate. Există, de asemenea, de multe ori în care doar 1 conductă rulează, așa că dacă avem o conductă care rulează zilnic, am dori să o programăm la un moment mai puțin ocupat.
Putem schimba slot_interval Argument pentru orice altă unitate de timp valabilă pentru a obține o imagine diferită.
get_slot_usage( schedule, orch_frequency = "1 hour", slot_interval = "day" )
# A tibble: 31 × 3 slot n_runs pipe_names1 01 4 hourly, daily, every_3_hours, weekly 2 02 4 hourly, daily, every_3_hours, weekly 3 03 4 hourly, daily, every_3_hours, weekly 4 04 5 hourly, daily, every_3_hours, weekly, some_days 5 05 4 hourly, daily, every_3_hours, weekly 6 06 4 hourly, daily, every_3_hours, weekly 7 07 4 hourly, daily, every_3_hours, weekly 8 08 4 hourly, daily, every_3_hours, weekly 9 09 5 hourly, daily, every_3_hours, weekly, some_days 10 10 4 hourly, daily, every_3_hours, weekly # ℹ 21 more rows
Câteva lucruri de luat în considerare atunci când utilizați get_slot_usage():
- Se uită la toate cazurile viitoare de momentul în care o conductă va rula nu doar la următoarea unitate de timp. În ultimul exemplu, o conductă săptămânală pare să funcționeze în fiecare zi, dar este doar pentru că toate acele zile în orice lună și an vor implica rularea conductei.
- De obicei, ar trebui să păstrezi
orch_frequencyla fel ca în utilizarea tarun_schedule()darslot_intervalar putea depinde de frecvența de frecvență o nouă conductă. În general, ar trebui să utilizați o unitate de timp de frecvență mai mare decât conducta propusă. De exemplu, dacă planificați o conductă zilnică, utilizațislot_interval = "hour"Pentru a identifica ce oră ar trebui să fie. - Această funcție este menită să fie utilizată interactiv atunci când dezvoltați un
maestroproiect. Nu servește multă valoare care funcționează în producție.
Timp de pornire flexibil
S -a făcut o îmbunătățire minoră la maestroStartTime Etichetă pentru a permite utilizarea hh: mm: ss formatare pentru timestamps. Acest lucru este util în special dacă aveți o conductă care rulează pe oră sau mai frecventă, deoarece alegerea datei de început a fost arbitrară. Va presupune că data de începere a conductei este data curentă în care a fost construită programul.
Concluzie
Orchestrare fericită!
