3333import marquez .common .models .SourceType ;
3434import marquez .db .DatasetFieldDao .DatasetFieldMapping ;
3535import marquez .db .JobVersionDao .BagOfJobVersionInfo ;
36+ import marquez .db .RunDao .RunUpsert ;
37+ import marquez .db .RunDao .RunUpsert .RunUpsertBuilder ;
3638import marquez .db .mappers .LineageEventMapper ;
3739import marquez .db .models .ColumnLineageRow ;
3840import marquez .db .models .DatasetFieldRow ;
@@ -149,7 +151,6 @@ default UpdateLineageRow updateMarquezModel(LineageEvent event, ObjectMapper map
149151
150152 default UpdateLineageRow updateMarquezModel (DatasetEvent event , ObjectMapper mapper ) {
151153 daos .initBaseDao (this );
152-
153154 Instant now = event .getEventTime ().withZoneSameInstant (ZoneId .of ("UTC" )).toInstant ();
154155
155156 UpdateLineageRow bag = new UpdateLineageRow ();
@@ -164,9 +165,9 @@ default UpdateLineageRow updateMarquezModel(DatasetEvent event, ObjectMapper map
164165
165166 Dataset dataset = event .getDataset ();
166167 List <DatasetRecord > datasetOutputs = new ArrayList <>();
167- DatasetRecord record = upsertLineageDataset (dataset , now , null , false , daos );
168+ DatasetRecord record = upsertLineageDataset (dataset , now , null , false );
168169 datasetOutputs .add (record );
169- insertOutputFacets (dataset , record , null , null , now , daos );
170+ insertOutputFacets (dataset , record , null , null , now );
170171
171172 daos .getDatasetDao ()
172173 .updateVersion (
@@ -192,18 +193,8 @@ default UpdateLineageRow updateBaseMarquezModel(LineageEvent event, ObjectMapper
192193 DEFAULT_NAMESPACE_OWNER );
193194 bag .setNamespace (namespace );
194195
195- Instant nominalStartTime =
196- Optional .ofNullable (event .getRun ().getFacets ())
197- .flatMap (f -> Optional .ofNullable (f .getNominalTime ()))
198- .map (NominalTimeRunFacet ::getNominalStartTime )
199- .map (t -> t .withZoneSameInstant (ZoneId .of ("UTC" )).toInstant ())
200- .orElse (null );
201- Instant nominalEndTime =
202- Optional .ofNullable (event .getRun ().getFacets ())
203- .flatMap (f -> Optional .ofNullable (f .getNominalTime ()))
204- .map (NominalTimeRunFacet ::getNominalEndTime )
205- .map (t -> t .withZoneSameInstant (ZoneId .of ("UTC" )).toInstant ())
206- .orElse (null );
196+ Instant nominalStartTime = getNominalStartTime (event );
197+ Instant nominalEndTime = getNominalEndTime (event );
207198
208199 Optional <ParentRunFacet > parentRun =
209200 Optional .ofNullable (event .getRun ()).map (Run ::getFacets ).map (RunFacet ::getParent );
@@ -230,51 +221,25 @@ default UpdateLineageRow updateBaseMarquezModel(LineageEvent event, ObjectMapper
230221 bag .setRunArgs (runArgs );
231222
232223 final UUID runUuid = runToUuid (event .getRun ().getRunId ());
233-
234224 RunRow run ;
225+ RunUpsertBuilder runUpsertBuilder =
226+ RunUpsert .builder ()
227+ .runUuid (runUuid )
228+ .parentRunUuid (parentUuid .orElse (null ))
229+ .externalId (event .getRun ().getRunId ())
230+ .now (now )
231+ .jobUuid (job .getUuid ())
232+ .jobVersionUuid (null )
233+ .runArgsUuid (runArgs .getUuid ())
234+ .namespaceName (namespace .getName ())
235+ .jobName (job .getName ())
236+ .location (job .getLocation ());
237+
235238 if (event .getEventType () != null ) {
236- RunState runStateType = getRunState (event .getEventType ());
237- run =
238- daos .getRunDao ()
239- .upsert (
240- runUuid ,
241- parentUuid .orElse (null ),
242- event .getRun ().getRunId (),
243- now ,
244- job .getUuid (),
245- null ,
246- runArgs .getUuid (),
247- nominalStartTime ,
248- nominalEndTime ,
249- runStateType ,
250- now ,
251- namespace .getName (),
252- job .getName (),
253- job .getLocation ());
254- // Add ...
255- Optional .ofNullable (event .getRun ().getFacets ())
256- .ifPresent (
257- runFacet ->
258- daos .getRunFacetsDao ()
259- .insertRunFacetsFor (
260- runUuid , now , event .getEventType (), event .getRun ().getFacets ()));
261- } else {
262- run =
263- daos .getRunDao ()
264- .upsert (
265- runUuid ,
266- parentUuid .orElse (null ),
267- event .getRun ().getRunId (),
268- now ,
269- job .getUuid (),
270- null ,
271- runArgs .getUuid (),
272- nominalStartTime ,
273- nominalEndTime ,
274- namespace .getName (),
275- job .getName (),
276- job .getLocation ());
239+ runUpsertBuilder .runStateType (getRunState (event .getEventType ())).runStateTime (now );
277240 }
241+ run = daos .getRunDao ().upsert (runUpsertBuilder .build ());
242+ insertRunFacets (event , runUuid , now );
278243 bag .setRun (run );
279244
280245 if (event .getEventType () != null ) {
@@ -290,51 +255,73 @@ default UpdateLineageRow updateBaseMarquezModel(LineageEvent event, ObjectMapper
290255 }
291256 }
292257
293- // Add ...
294- Optional .ofNullable (event .getJob ().getFacets ())
295- .ifPresent (
296- jobFacet ->
297- daos .getJobFacetsDao ()
298- .insertJobFacetsFor (
299- job .getUuid (),
300- runUuid ,
301- now ,
302- event .getEventType (),
303- event .getJob ().getFacets ()));
258+ insertJobFacets (event , job .getUuid (), runUuid , now );
304259
305260 // RunInput list uses null as a sentinel value
306261 List <DatasetRecord > datasetInputs = null ;
307262 if (event .getInputs () != null ) {
308263 datasetInputs = new ArrayList <>();
309264 for (Dataset dataset : event .getInputs ()) {
310- DatasetRecord record = upsertLineageDataset (dataset , now , runUuid , true , daos );
265+ DatasetRecord record = upsertLineageDataset (dataset , now , runUuid , true );
311266 datasetInputs .add (record );
312- insertInputFacets (dataset , record , runUuid , event .getEventType (), now , daos );
267+ insertInputFacets (dataset , record , runUuid , event .getEventType (), now );
313268 }
314269 }
315270 bag .setInputs (Optional .ofNullable (datasetInputs ));
271+
316272 // RunInput list uses null as a sentinel value
317273 List <DatasetRecord > datasetOutputs = null ;
318274 if (event .getOutputs () != null ) {
319275 datasetOutputs = new ArrayList <>();
320276 for (Dataset dataset : event .getOutputs ()) {
321- DatasetRecord record = upsertLineageDataset (dataset , now , runUuid , false , daos );
277+ DatasetRecord record = upsertLineageDataset (dataset , now , runUuid , false );
322278 datasetOutputs .add (record );
323- insertOutputFacets (dataset , record , runUuid , event .getEventType (), now , daos );
279+ insertOutputFacets (dataset , record , runUuid , event .getEventType (), now );
324280 }
325281 }
326282
327283 bag .setOutputs (Optional .ofNullable (datasetOutputs ));
328284 return bag ;
329285 }
330286
287+ private static Instant getNominalStartTime (LineageEvent event ) {
288+ return Optional .ofNullable (event .getRun ().getFacets ())
289+ .flatMap (f -> Optional .ofNullable (f .getNominalTime ()))
290+ .map (NominalTimeRunFacet ::getNominalStartTime )
291+ .map (t -> t .withZoneSameInstant (ZoneId .of ("UTC" )).toInstant ())
292+ .orElse (null );
293+ }
294+
295+ private static Instant getNominalEndTime (LineageEvent event ) {
296+ return Optional .ofNullable (event .getRun ().getFacets ())
297+ .flatMap (f -> Optional .ofNullable (f .getNominalTime ()))
298+ .map (NominalTimeRunFacet ::getNominalEndTime )
299+ .map (t -> t .withZoneSameInstant (ZoneId .of ("UTC" )).toInstant ())
300+ .orElse (null );
301+ }
302+
303+ private void insertRunFacets (LineageEvent event , UUID runUuid , Instant now ) {
304+ // Add ...
305+ Optional .ofNullable (event .getRun ().getFacets ())
306+ .ifPresent (
307+ runFacet ->
308+ daos .getRunFacetsDao ()
309+ .insertRunFacetsFor (
310+ runUuid , now , event .getEventType (), event .getRun ().getFacets ()));
311+ }
312+
313+ private void insertJobFacets (LineageEvent event , UUID jobUuid , UUID runUuid , Instant now ) {
314+ // Add ...
315+ Optional .ofNullable (event .getJob ().getFacets ())
316+ .ifPresent (
317+ jobFacet ->
318+ daos .getJobFacetsDao ()
319+ .insertJobFacetsFor (
320+ jobUuid , runUuid , now , event .getEventType (), event .getJob ().getFacets ()));
321+ }
322+
331323 private void insertInputFacets (
332- Dataset dataset ,
333- DatasetRecord record ,
334- UUID runUuid ,
335- String eventType ,
336- Instant now ,
337- ModelDaos daos ) {
324+ Dataset dataset , DatasetRecord record , UUID runUuid , String eventType , Instant now ) {
338325 // Facets ...
339326 Optional .ofNullable (dataset .getFacets ())
340327 .ifPresent (
@@ -363,12 +350,7 @@ private void insertInputFacets(
363350 }
364351
365352 private void insertOutputFacets (
366- Dataset dataset ,
367- DatasetRecord record ,
368- UUID runUuid ,
369- String eventType ,
370- Instant now ,
371- ModelDaos daos ) {
353+ Dataset dataset , DatasetRecord record , UUID runUuid , String eventType , Instant now ) {
372354 // Facets ...
373355 Optional .ofNullable (dataset .getFacets ())
374356 .ifPresent (
@@ -665,7 +647,7 @@ default JobType getJobType(Job job) {
665647 }
666648
667649 default DatasetRecord upsertLineageDataset (
668- Dataset ds , Instant now , UUID runUuid , boolean isInput , ModelDaos daos ) {
650+ Dataset ds , Instant now , UUID runUuid , boolean isInput ) {
669651 NamespaceRow dsNamespace =
670652 daos .getNamespaceDao ()
671653 .upsertNamespaceRow (UUID .randomUUID (), now , ds .getNamespace (), DEFAULT_NAMESPACE_OWNER );
0 commit comments