L'I/O gestita consente a Dataflow di gestire connettori I/O specifici utilizzati nelle pipeline Apache Beam. L'I/O gestita semplifica la gestione delle pipeline che si integrano con origini e destinazioni supportate.
L'I/O gestita è costituita da due componenti che funzionano insieme:
Una trasformazione Apache Beam che fornisce un'API comune per la creazione di connettori I/O (origini e sink).
Un servizio Dataflow che gestisce questi connettori I/O per tuo conto, inclusa la possibilità di eseguirne l'upgrade indipendentemente dalla versione di Apache Beam.
I vantaggi dell'I/O gestita includono:
Upgrade automatici. Dataflow esegue automaticamente l'upgrade dei connettori I/O gestiti nella pipeline. Ciò significa che la pipeline riceve correzioni di sicurezza, miglioramenti delle prestazioni e correzioni di bug per questi connettori senza richiedere modifiche al codice. Per ulteriori informazioni, consulta Upgrade automatici.
API coerente. Tradizionalmente, i connettori I/O in Apache Beam hanno API distinte e ogni connettore è configurato in modo diverso. I/O gestita fornisce una singola API di configurazione che utilizza proprietà chiave-valore, il che si traduce in un codice della pipeline più semplice e coerente. Per ulteriori informazioni, consulta la pagina sull'API Configuration.
Requisiti
I seguenti SDK supportano l'I/O gestita:
- SDK Apache Beam per Java versione 2.58.0 o successive.
- SDK Apache Beam per Python versione 2.61.0 o successive.
Il servizio di backend richiede Dataflow Runner v2. Se Runner 2 non è abilitato, la pipeline viene comunque eseguita, ma non usufruisce dei vantaggi del servizio I/O gestito.
Upgrade automatici
Le pipeline Dataflow con connettori I/O gestiti utilizzano automaticamente la versione affidabile più recente del connettore, come segue:
Quando invii un job, Dataflow utilizza la versione più recente del connettore che è stata testata e funziona correttamente.
Per i job in streaming, Dataflow cerca gli aggiornamenti ogni volta che avvii un job sostitutivo e utilizza automaticamente l'ultima versione valida nota. Dataflow esegue questo controllo anche se non modifichi il codice nel job di sostituzione.
Non devi preoccuparti di aggiornare manualmente il connettore o la versione di Apache Beam della pipeline.
Il seguente diagramma mostra la procedura di upgrade. L'utente crea una pipeline Apache Beam utilizzando la versione dell'SDK X. Quando l'utente invia il job, Dataflow controlla la versione dell'I/O gestita ed esegue l'upgrade alla versione Y.
La procedura di upgrade aggiunge circa due minuti al tempo di avvio di un job. Per controllare lo stato delle operazioni di I/O gestite, cerca le voci di log che includono la stringa "Managed Transform(s)
".
API di configurazione
I/O gestita è una trasformazione Apache Beam chiavi in mano che fornisce un'API coerente per configurare origini e sink.
Per creare qualsiasi origine o destinazione supportata da I/O gestita, utilizza la classe
Managed
in Java. Specifica l'origine o la destinazione da istanziare e passa un insieme di parametri di configurazione, simile al seguente:
Map config = ImmutableMap.<String, Object>builder()
.put("config1", "abc")
.put("config2", 1);
pipeline.apply(Managed.read(/*Which source to read*/).withConfig(config))
.getSinglePCollection();
Puoi anche passare i parametri di configurazione come file YAML. Per un esempio completo di codice, consulta Leggere da Apache Iceberg.
Destinazioni dinamiche
Per alcuni sink, il connettore I/O gestito può selezionare dinamicamente una destinazione in base ai valori dei campi nei record in entrata.
Per utilizzare le destinazioni dinamiche, fornisci una stringa modello per la destinazione. La stringa del modello può includere i nomi dei campi tra parentesi graffe, ad esempio"tables.{field1}"
. In fase di esecuzione, il connettore sostituisce il valore del
campo per ogni record in entrata per determinare la destinazione del record.
Ad esempio, supponiamo che i tuoi dati abbiano un campo denominato airport
. Puoi impostare la destinazione su "flights.{airport}"
. Se airport
=SFO
, il record viene scritto
in flights.SFO
. Per i campi nidificati, utilizza la notazione a punti. Ad esempio:
{top.middle.nested}
.
Filtri
Potresti voler escludere determinati campi prima che vengano scritti nella tabella di destinazione. Per gli elementi di destinazione che supportano le destinazioni dinamiche, puoi utilizzare il parametro drop
, keep
o only
a questo scopo. Questi parametri ti consentono di includere i metadati di destinazione nei record di input, senza scrivere i metadati nella destinazione.
Puoi impostare al massimo uno di questi parametri per un determinato sink.
Parametro di configurazione | Tipo di dati | Descrizione |
---|---|---|
drop |
Elenco di stringhe | Un elenco di nomi di campi da eliminare prima di scrivere nella destinazione. |
keep |
Elenco di stringhe | Un elenco di nomi di campi da conservare durante la scrittura nella destinazione. Gli altri campi vengono eliminati. |
only |
string | Il nome di esattamente un campo da utilizzare come record di primo livello da scrivere durante la scrittura nella destinazione. Tutti gli altri campi vengono eliminati. Questo campo deve essere di tipo riga. |
Origini e sink supportati
L'I/O gestita supporta le seguenti origini e destinazioni.