π€Relationships
In Euno, the data model is made up of resources, each identified with a Universal Resource Identifier. Between these resources there are relationships.
These relationships form the foundation of Eunoβs graph-based understanding of the data stack. There are five primary types of relationships:
1. Dependency
A dependency relationship exists when one resource relies on another. For example, a database view created by joining three tables will have three dependency relationships pointing from the view to each table.
If resource A depends on resource B, A is said to be downstream of B, and B is upstream of A.
A single resource may have zero, one, or many dependenciesβtechnically a many-to-many relationship.
Examples of using upstream and downstream queries:
To find the upstream of a resource:
has upstream(uri="<resource-uri>")To find the downstream of a resource:
has downstream(uri="<resource-uri>")
Column-Level Dependencies
Euno also supports fine-grained, column-level dependency tracking using the attributes upstream_fields and downstream_fields.
These relationships capture dependencies between individual fields (such as columns, measures, or dimensions), or between fields and visualizations (such as Tableau views or Looker Looks).
For instance:
A column in a table used in a Tableau view would create a dependency from the view to the column.
A measure in a Looker Look based on multiple columns would be downstream of those columns.
Examples of using upstream_fields and downstream_fields:
To find the visualizations in Tableau that use a specific field:
type="tableau_view" and has upstream_fields(uri="<resource-uri>")To find all the fields used in a Tableau view:
type="tableau_field" and has downstream_fields(uri="<resource-uri>")
Note: If a resource has both column-level lineage and regular lineage, and you want to return all relevant resources, you need to include both types of queries. For example:
has downstream_fields(uri="<resource-uri>") or has downstream(uri="<resource-uri>")
Statement-level dependencies for table resources
For SQL-based table resources (for example, warehouse views), Euno also captures field dependencies that come from statement logic, not only projected fields. This means fields used in clauses like JOIN, WHERE, GROUP BY, HAVING, QUALIFY, and ORDER BY can appear in table-level upstream_fields relationships even when they are not selected in the final projection.
Example
If a view is defined as:
SELECT order_id, customer_id FROM proj_sales.analytics.orders_raw WHERE order_status = 'COMPLETE'
you may see a table-level upstream field relationship to the source column orders_raw.order_status, because that field is part of the statement logic.
2. Containment
A resource can be contained within another resource. For example, a column is contained in a table, and a table is contained in a schema.
When two resources, A and B, have a containment relationship such that A contains B, we say that A is the parent of B, and B is a child of A.
A resource can have zero, one, or many children, and zero or one parent. In technical terms, this is an optional many-to-one relationship.
Examples using the containment relationship:
To find all the resources inside a workbook:
has parent(type="tableau_workbook" and uri="<resource-uri>")To return all the fields in a table:
has parent(type="table" and uri="<resource-uri>")
3. Defined-by
The defined by relationship links a resource to the entity that defines it.
It is used when one resource determines the structure or existence of another.
For example, a Snowflake table created via a dbt model will have a defined by relationship pointing from the table to the dbt model.
Conversely, the dbt model is considered the definer of the table.
It is possible for a resource to have multiple definers.
Example:
To find the
dbtresource that defines a specific table in the warehouse:type~"dbt" and has defined(type="table" and uri="<resource-uri>")ortype~"dbt" and is definer of(type="table" and uri="<resource-uri>")To find the
tablethat is defined by a dbt model:type="table" and has definer(type~"dbt" and uri="<resource-uri>")ortype="table" and is defined by(type~"dbt" and uri="<resource-uri>")
This relationship helps trace logical definitions across tools, and surfaces authoritative sources within your data stack.
4. Usage
A usage relationship exists when a user interacts with or uses a resource. This relationship tracks which users are accessing which resources, providing insights into resource utilization and user behavior.
If resource A (a user) uses resource B, A is said to be a user of B, and B is used by A.
A resource can be used by zero, one, or many usersβtechnically a many-to-many relationship.
Examples of using user and used queries:
To find all users of a specific resource:
type="user" AND is user of(type='tableau_dashboard' AND uri="<resource-uri>")To find all resources used by a specific user:
type="tableau_view" AND is used by(name="john@doe.com")
Timeframe specification: For usage relationships, you can limit results to a specific time period by adding -Xd parameters (where X is the number of days).
5. Membership
A membership relationship exists when a user or group is a member of another group, workspace, or supported BI item. This relationship tracks organizational structure, access control, and group hierarchies.
If resource A (a user or group) is a member of resource B (a group, workspace, or supported BI item), A is said to be a member of B, and B has A as a member.
A group, workspace, or supported BI item can have zero, one, or many membersβtechnically a many-to-many relationship. Groups can also be members of other groups, creating nested group hierarchies.
Examples of using member and group queries:
To find all members of a specific group:
has group(uri="<group-uri>")To find all groups that a user is a member of:
has member(uri="<user-uri>")To find all members of a PowerBI workspace:
has group(uri="<workspace-uri>")To find all members of a Power BI report, dashboard, semantic model, app-backed report row, or dataflow:
has group(uri="<powerbi-item-uri>")
Resource Types:
user: Represents an individual user in the system. Users can be members of groups and workspaces.
user_group: Represents a security group or organizational group. Groups can contain users and other groups as members.
powerbi_workspace: PowerBI workspaces can have users and groups as members, with role information (e.g., Admin, Member, Contributor).
Power BI item resources: Reports, dashboards, semantic models, app-backed report rows, and dataflows can have users and groups as members when direct item access is available.
Role Information:
When querying membership relationships with extended_relationships=true, the API returns role information for Power BI workspace and item memberships when available. For example, a user might be an "Admin" or "Member" of a PowerBI workspace.
Summary of Resources and Possible Relationships
Summary tables list downstream β upstream relationships: Source is the dependent resource (the one with table_dependencies or upstream_fields); Target lists its upstream dependencies. This matches has upstream(uri=...) and has upstream_fields(uri=...) in EQL. Equivalence: A is upstream of B β B has upstream A β A has downstream B.
Lineage Relationships (has upstream)
has upstream)adf_pipeline
has upstream
adf_pipeline, adf_dataflow, adf_power_query
airflow_dag
has upstream
airflow_dataset, table
airflow_task
has upstream
airflow_dataset, airflow_task, table
databricks_notebook
has upstream
table
dbt_dimension
has upstream
hex_dimension
dbt_metric
has upstream
dbt_metric, dbt_semantic_model, hex_measure
dbt_model
has upstream
dbt_model, dbt_seed, dbt_snapshot, dbt_source
dbt_semantic_model
has upstream
dbt_model, hex_semantic_model
dbt_snapshot
has upstream
dbt_model, dbt_seed, dbt_snapshot, dbt_source
hex_project
has upstream
table
looker_dashboard
has upstream
looker_explore, looker_look, looker_tile
looker_explore
has upstream
looker_explore, looker_view
looker_look
has upstream
looker_explore
looker_tile
has upstream
looker_explore
looker_view
has upstream
dbt_metric, looker_explore, looker_view, table
omni_dashboard
has upstream
omni_query
omni_model
has upstream
table
omni_query
has upstream
omni_topic, omni_view
omni_topic
has upstream
omni_view
omni_view
has upstream
table
omni_workbook
has upstream
omni_model
powerbi_app
has upstream
powerbi_report
powerbi_dashboard
has upstream
powerbi_report
powerbi_dataflow
has upstream
powerbi_dataflow
powerbi_report
has upstream
powerbi_table, powerbi_tile
powerbi_table
has upstream
powerbi_dataflow, table
powerbi_tile
has upstream
powerbi_table
salesforce_dashboard
has upstream
salesforce_report
salesforce_flow
has upstream
salesforce_field, salesforce_flow, salesforce_object
salesforce_report
has upstream
salesforce_field, salesforce_object
sigma_data_model_element
has upstream
table
sigma_workbook
has upstream
sigma_workbook_element
sigma_workbook_element
has upstream
sigma_data_model_element, sigma_workbook_element, table
snowflake_inbound_share
has upstream
snowflake_outbound_share
snowflake_semantic_view
has upstream
table
table
has upstream
dbt_metric, table
tableau_custom_sql
has upstream
table
tableau_dashboard
has upstream
tableau_view
tableau_embedded_datasource
has upstream
table, tableau_custom_sql, tableau_published_datasource
tableau_published_datasource
has upstream
table, tableau_custom_sql
tableau_view
has upstream
tableau_embedded_datasource
Column-Level Lineage Relationships (has upstream_fields)
has upstream_fields)column
has upstream_fields
column
databricks_notebook
has upstream_fields
column
dbt_dimension
has upstream_fields
hex_dimension
dbt_metric
has upstream_fields
hex_measure
hex_project
has upstream_fields
column
looker_dimension
has upstream_fields
column, looker_dimension
looker_measure
has upstream_fields
column, dbt_metric, looker_dimension
omni_dimension
has upstream_fields
column, omni_dimension, omni_measure
omni_measure
has upstream_fields
column, omni_dimension, omni_measure
omni_query
has upstream_fields
omni_dimension, omni_measure
powerbi_column
has upstream_fields
column, powerbi_column
powerbi_measure
has upstream_fields
column, powerbi_column
powerbi_tile
has upstream_fields
powerbi_column, powerbi_measure
salesforce_field
has upstream_fields
salesforce_field
salesforce_flow
has upstream_fields
salesforce_field
salesforce_report
has upstream_fields
salesforce_field
sigma_data_model_element
has upstream_fields
column
sigma_workbook_element
has upstream_fields
column
snowflake_dimension
has upstream_fields
column
snowflake_metric
has upstream_fields
column
tableau_field
has upstream_fields
column, tableau_field
tableau_view
has upstream_fields
tableau_field
Hierarchical Relationships (has parent)
has parent)column
has parent
table
dbt_column
has parent
dbt_source, dbt_model, dbt_seed, dbt_snapshot
table
has parent
database_schema
database_schema
has parent
database
database
has parent
databricks_workspace, snowflake_account
dbt_dimension, dbt_measure
has parent
dbt_model
dbt_seed, dbt_source, dbt_model, dbt_snapshot, dbt_metric, dbt_semantic_model
has parent
dbt_project
tableau_published_datasource, tableau_workbook
has parent
tableau_project
tableau_embedded_datasource, tableau_dashboard, tableau_view
has parent
tableau_workbook
tableau_custom_sql
has parent
tableau_embedded_datasource, tableau_published_datasource
tableau_field
has parent
tableau_embedded_datasource, tableau_published_datasource, tableau_custom_sql, tableau_view
looker_dimension, looker_measure
has parent
looker_view, looker_explore, looker_look, looker_tile
looker_view, looker_explore
has parent
looker_model
looker_model
has parent
looker_instance
looker_folder
has parent
looker_instance, looker_folder
looker_dashboard, looker_look
has parent
looker_folder
looker_tile
has parent
looker_dashboard
matillion_pipeline
has parent
matillion_project
montecarlo_monitor
has parent
montecarlo_account
powerbi_workspace
has parent
powerbi_account
powerbi_folder
has parent
powerbi_workspace
powerbi_report, powerbi_dashboard, powerbi_semantic_model, powerbi_dataflow, powerbi_app
has parent
powerbi_workspace, powerbi_folder
powerbi_table
has parent
powerbi_semantic_model
powerbi_column, powerbi_measure
has parent
powerbi_table
powerbi_column
has parent
powerbi_dataflow
powerbi_page
has parent
powerbi_report
powerbi_tile
has parent
powerbi_page
sigma_workspace, sigma_folder, sigma_data_model
has parent
sigma_account
sigma_folder
has parent
sigma_folder, sigma_workspace
sigma_workbook
has parent
sigma_folder, sigma_workspace
sigma_workbook_element
has parent
sigma_workbook
sigma_data_model_element
has parent
sigma_data_model
hex_project, hex_semantic_project
has parent
hex_workspace
databricks_notebook
has parent
databricks_workspace
snowflake_semantic_view
has parent
database_schema
hex_semantic_model
has parent
hex_semantic_project
hex_dimension, hex_measure
has parent
hex_semantic_model
snowflake_dimension, snowflake_metric
has parent
snowflake_semantic_view
snowflake_inbound_share, snowflake_outbound_share
has parent
snowflake_account
omni_folder, omni_model
has parent
omni_account
omni_folder, omni_workbook
has parent
omni_folder
omni_view, omni_topic
has parent
omni_model
omni_dimension, omni_measure
has parent
omni_view, omni_topic
omni_query, omni_dashboard, omni_view, omni_topic
has parent
omni_workbook
omni_dimension
has parent
omni_query
airflow_dag, airflow_dataset
has parent
airflow_instance
airflow_task
has parent
airflow_dag
adf_pipeline, adf_dataset, adf_dataflow, adf_power_query
has parent
adf_factory
stitch_source
has parent
stitch_destination
stitch_stream
has parent
stitch_source
salesforce_folder
has parent
salesforce_org
salesforce_object
has parent
salesforce_org
salesforce_field
has parent
salesforce_object
salesforce_report, salesforce_dashboard
has parent
salesforce_org, salesforce_folder
salesforce_flow
has parent
salesforce_org
Definition Relationship (has definer)
has definer)table
has definer
dbt_seed, dbt_source, dbt_model, dbt_snapshot, fivetran_connector, matillion_pipeline, databricks_notebook, adf_pipeline, adf_dataflow, adf_power_query
table
has definer
airflow_dag, airflow_task
table
has definer
stitch_source, stitch_stream
database
has definer
snowflake_inbound_share, snowflake_outbound_share
salesforce_object
has definer
salesforce_flow
Membership Relationships (has member / has group)
has member / has group)user, user_group
has member
user_group, powerbi_workspace, Power BI item resources, omni_folder
user_group, powerbi_workspace, Power BI item resources, omni_folder
has group
user, user_group
Note:
Groups can be members of other groups, creating nested hierarchies
PowerBI workspaces can have both users and groups as members
Power BI reports, dashboards, semantic models, app-backed report rows, and dataflows can have both users and groups as members
Omni folders can have both users and groups as members
Membership relationships may include role information (e.g., Admin, Member) for Power BI workspace and item memberships
Salesforce
user_groupresources exposememberstoward observeduserresources when user and group observation is enabled for the Salesforce source
Policy Regulation Relationships (has regulator / has regulated)
has regulator / has regulated)powerbi_report, powerbi_dashboard, powerbi_semantic_model, powerbi_app, powerbi_dataflow
has regulator
purview_dlp_policy
purview_dlp_policy
has regulated
powerbi_report, powerbi_dashboard, powerbi_semantic_model, powerbi_app, powerbi_dataflow
Policy regulation relationships connect governed resources to the policy resources that regulate them. For Microsoft Purview, supported Power BI resources can have a purview_dlp_policy as their regulator.
Usage Relationships (is user of / is used by)
is user of / is used by)user, user_group
is user of
looker_tile, looker_explore, looker_view, looker_dimension, looker_measure, looker_look, looker_dashboard, tableau_site, tableau_dashboard, tableau_view, powerbi_account, powerbi_report, powerbi_dashboard, powerbi_semantic_model, omni_workbook, omni_dashboard, sigma_data_model_element, sigma_workbook_element, sigma_workbook, salesforce_report, salesforce_dashboard, salesforce_flow
looker_tile, looker_explore, looker_view, looker_dimension, looker_measure, looker_look, looker_dashboard, tableau_site, tableau_dashboard, tableau_view, powerbi_account, powerbi_report, powerbi_dashboard, powerbi_semantic_model, omni_workbook, omni_dashboard, sigma_data_model_element, sigma_workbook_element, sigma_workbook, salesforce_report, salesforce_dashboard, salesforce_flow
is used by
user, user_group
User-declared lineage from Custom integration
The Custom integration lets you push observations with explicit upstream dependencies. Which property to set depends on the resource type and whether the lineage is resource-level or field-level:
Resource type
Property to set
Relationship created
table
explicit_additional_dependencies
Each listed URI is upstream of the observed table
column
explicit_additional_dependencies
Each listed URI is an upstream field of the observed column
Any other type (for example view, a custom type)
table_dependencies
Each listed URI is upstream of the observed resource
Any field-like type other than column (for example dbt_metric, dbt_dimension, snowflake_metric, snowflake_dimension, looker_measure, looker_dimension, omni_measure, omni_dimension)
upstream_fields
Each listed URI is an upstream field of the observed resource
Rules: use explicit_additional_dependencies on table and column; use table_dependencies for resource-level lineage on all other types; use upstream_fields for field-level lineage on field-like resources other than column. Do not set upstream_fields directly on type: "column" β Euno recomputes it from explicit_additional_dependencies and inferred code-based column dependencies, so a value set directly on a column would be overwritten.
See the Custom Integration Properties Reference for examples.
Manually adding upstream dependencies in dbt
In addition to standard dbt-inferred relationships, Euno also supports custom dependency declarations via metadata annotations in dbt . Specifically, column-level meta fields in your .yml files can define additional upstream dependencies using the key:
This allows you to declare column-level relationships that are not inferable from SQL lineage. For example, create an upstream relationship from a column to a dbt metric.
Accepted formats
Both of the following are valid, add them to column definition in a .yml file:
Supported reference types
Each value in the list should be a string referring to a valid dbt object. The following formats are supported:
dbt model/seed/source/snapshot
model.<dbt_project_name>.<model_name> or full unique ID
Metric (short form)
metric.<metric_name>
Metric (full unique_id)
metric.<dbt_project_name>.<metric_name>
These references will be parsed and added as additional table_dependencies in the Euno knowledge graph.
Last updated