Maestro 0,6,0 | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(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:

  1. maestroFlags Etichetă și însoțire get_flags() Funcție pentru etichetarea conductelor.
  2. maestroPriority Etichetă pentru determinarea ordinii în care sunt executate conducte programate simultan.
  3. Nou get_slot_usage() Funcție pentru a ajuta la identificarea intervalelor de timp ocupate (sau liniștite) din program.
  4. maestroStartTime Eticheta 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       flag      
                  
1 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_names                      
                                 
 1 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_names                                     
                                                
 1 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():

  1. 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.
  2. De obicei, ar trebui să păstrezi orch_frequency la fel ca în utilizarea ta run_schedule()dar slot_interval ar 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ți slot_interval = "hour" Pentru a identifica ce oră ar trebui să fie.
  3. Această funcție este menită să fie utilizată interactiv atunci când dezvoltați un maestro proiect. 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ă!

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.