Volevo sfruttare la nuova funzionalità BigQuery delle tabelle partizionate nel tempo, ma non sono sicuro che ciò sia attualmente possibile nella versione 1.6 dell'SDK Dataflow.Creazione/scrittura nella tabella BigQuery parititoned tramite Google Cloud Dataflow
Guardando il BigQuery JSON API, per creare una tabella partizionata giorno si ha la necessità di passare a un'opzione di
"timePartitioning": { "type": "DAY" }
, ma l'interfaccia com.google.cloud.dataflow.sdk.io.BigQueryIO solo consente di specificare un TableReference.
Ho pensato che forse potevo pre-creare il tavolo e intrufolarmi in un decoratore di partizioni tramite un lambda BigQueryIO.Write.toTableReference? Qualcun altro sta avendo successo con la creazione/scrittura di tabelle partizionate tramite Dataflow?
Questo sembra un problema simile all'impostazione di table expiration time che non è attualmente disponibile.
Questo metodo è molto bello, ma consentirà solo di controllare il timbro data con i parametri all'esterno della pipeline. E se volessimo utilizzare i timestamp dai dati stessi per suddividerli per date e poi scrivere in tabelle corrispondenti? – nembleton
@nembleton: Se gli elementi hanno data/ora, tu può utilizzare la finestra per mapparli in finestre giornaliere.Modificare questo codice: 'PCollection windowedItems = items.apply ( Window. in (FixedWindows.of (Duration.standardMinutes (10))));'. Quindi il TableSpecFun che legge le finestre mapperanno gli elementi nei giorni corretti.Il codice proviene da [FixedWindows javadoc] (https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/transforms/windowing/FixedWindows) –
Grazie a @DanHalperin è praticamente quello che sto facendo, inclusa la finestra, ma usando '.apply (Window.into (CalendarWindows.days (1)))' L'unico problema è dato dal fatto che i dati possono essere in fusi orari diversi e vogliamo che BigQuery restituisca i dati nel fuso orario originale, facciamo un po 'di funkiness in un precedente PTransform con una chiamata 'outputWithTimestamp' – ptf