You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
image::openlineage/job-details-customer-orders-2.png[Marquez job details for load_orders showing the SQL statement and OpenLineage facets as JSON]
282
+
283
+
== Explore the lineage in Marquez
254
284
255
-
The real Spark job is not lost: because of the parent-run link, the Spark run reports the
256
-
`openlineage_demo.spark_orders_by_nation` task as its *root*, so you can drill from that task into the Spark run itself
257
-
(in the `spark-openlineage-demo` namespace).
285
+
With the Marquez UI still open at http://localhost:3000, use the namespace selector at the top to switch
286
+
between the namespaces that produced the lineage:
258
287
259
-
[TIP]
260
-
====
261
-
Open a *dataset* or a *task* node - for example `spark_orders_by_nation` or the `orders_by_nation` dataset - not the
262
-
top-level `openlineage_demo` DAG node. Airflow reports the DAG-level job with no inputs/outputs of its own, so that one
263
-
node looks empty; the data flow hangs off the task and dataset nodes.
264
-
====
288
+
* `trino-openlineage-demo` - the Trino query jobs (one per executed statement), set via
289
+
`openlineage-event-listener.namespace`, and
290
+
* `trino://trino-coordinator:8443` - the datasets (`tpch.tiny.*` and `memory.demo.*`), named after the Trino
291
+
coordinator's address. Both the Trino event listener and the Airflow SQL operator report the tables under
292
+
this shared namespace, and
293
+
* `airflow-openlineage-demo` - the `openlineage_demo` DAG and its tasks.
294
+
295
+
Selecting the `memory.demo.customer_orders` dataset and expanding upstream shows the full graph back to
296
+
`tpch.tiny.customer` and `tpch.tiny.orders`, including column-level lineage for the individual queries:
297
+
298
+
image::openlineage/customer-orders-2.png[Marquez lineage graph tracing memory.demo.customer_orders upstream through the jobs to tpch.tiny.customer and tpch.tiny.orders]
265
299
266
300
[NOTE]
267
301
====
268
-
The Trino event-listener view (`trino://...`) and the Spark job's own view (`spark-openlineage-demo` / `s3://lakehouse`
269
-
/ `hive://...`) are separate, self-contained graphs alongside the Airflow one. Marquez identifies datasets by
270
-
`namespace + name`, and each engine names the same physical Iceberg table differently (Trino by its coordinator URI,
271
-
Spark by the storage location / metastore), so they do not auto-merge. That is expected: each producer reports lineage
272
-
from its own perspective, and the *connected* end-to-end view is the Airflow one, where a single producer (the
273
-
orchestrator) names every dataset consistently.
302
+
Trino and Airflow report lineage independently but, because `trino.uri` matches the address Airflow uses for its
303
+
Trino connection, both name the tables under the same `trino://trino-coordinator:8443` namespace. Their lineage
304
+
therefore converges on one shared set of dataset nodes: Trino contributes column-level detail per query, while
305
+
Airflow contributes the task/DAG structure around the same tables.
0 commit comments