Skip to content

Computed Join Supported Inputs

Computed Join accepts the following container types on either side:

Container type Supported as join input?
Base table or view
Base file (DFS)
Computed Table
Computed File
Another Computed Join

Computed Tables and Computed Files can be used as the left side, the right side, or both sides of the join. This lets you reuse SQL-defined logic (filters, aggregations, transformations) and parsed file content across multiple joins without re-expressing it in each Select Expression.

Note

Inputs must be profiled before they can be used in a Computed Join. The Left Container and Right Container dropdowns show only profiled containers; unprofiled containers are filtered out. Support for these container types is the same across all connectors. For example, a Snowflake table and an Amazon S3 CSV file can be paired as inputs to the same Computed Join.

Why Another Computed Join Cannot Be Used

Chaining joins recursively would force each level to load both sides in full before the next level can start, with no upper bound on depth. That risks unbounded memory growth and execution time, and makes failure diagnosis hard. Blocking Computed Joins as inputs also prevents accidental dependency loops that would be hard to detect.

To combine three or more sources, build the first join's result as a Computed Table and use that Computed Table as one side of the next Computed Join.

Working with Derived Datasets

If your derived data isn't yet a Computed Table, Computed File, or a regular table, view, or file in a source datastore, you have two options.

Option 1: Wrap Each Side as a Computed Table

Create one Computed Table per side that captures the filters, aggregations, or transformations you need, then reference both Computed Tables from a Computed Join. The per-side logic stays reusable across multiple joins.

For example, build a customers_filtered Computed Table:

SELECT customer_id, name, city
FROM customers
WHERE status = 'active'

And an orders_recent Computed Table:

SELECT order_id, customer_id, product
FROM orders
WHERE order_date >= '2024-01-01'

Then create a Computed Join with customers_filtered on the left, orders_recent on the right, joining on customer_id.

Option 2: Materialize Intermediate Results in Your Data Warehouse

If you need to reuse intermediate datasets across multiple contexts outside Qualytics:

  1. Create the intermediate result as a view or table in your data warehouse (using your warehouse's SQL interface, dbt, or another ETL tool).
  2. Discover that view or table in Qualytics via Sync, so it becomes a base container.
  3. Use the synced container as an input to your Computed Join.

This works because the materialized result is a regular container in your datastore that Qualytics can discover, profile, and join like any other base table, view, or file.