Skip to content

Commit

Permalink
docs: Expand the use case in the original_sql recipe (#8072)
Browse files Browse the repository at this point in the history
  • Loading branch information
igorlukanin authored Apr 3, 2024
1 parent aeea172 commit d264cf7
Showing 1 changed file with 29 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,33 @@ redirect_from:
- /recipes/using-originalsql-and-rollups-effectively
---

# Using originalSql and rollup pre-aggregations effectively
# Using `original_sql` and `rollup` pre-aggregations effectively

## Use case

For cubes that are built from an expensive SQL query, we can optimize
pre-aggregation builds so that they don't have to re-run the SQL query.
You can use the [`sql` parameter][ref-cube-sql] to define [cubes][ref-cubes]
over arbitrary SQL queries. Sometimes, these queries might be fairly complex
and take substantial time to execute. That's totally okay because you can use
[pre-aggregations][ref-preaggs] to accelerate queries to such cubes.

However, if you have more than one pre-aggregation that references members of
such a cube, its `sql` expression would have to be executed each time every
pre-aggregation is built. This also the case if you run both pre-aggregated
and non-pre-aggregated queries against such a cube.

A special [`original_sql` pre-aggregation][ref-schema-ref-preaggs-type-origsql]
can help:
* First, it will materialize the results of the `sql` expression in the data source.
* Then, it will make these results available to other `rollup` pre-aggregations
and non-pre-aggregated queries.

## Configuration

We can do this by creating a pre-aggregation of type
[`originalSql`][ref-schema-ref-preaggs-type-origsql] on the source (also known
as internal) database, and then configuring our existing `rollup`
pre-aggregations to use the `originalSql` pre-aggregation with the
[`useOriginalSqlPreAggregations` property][ref-schema-ref-preaggs-use-origsql].
[`original_sql`][ref-schema-ref-preaggs-type-origsql] on the data source
database, and then configuring our existing `rollup`
pre-aggregations to use the `original_sql` pre-aggregation with the
[`use_original_sql_pre_aggregations` property][ref-schema-ref-preaggs-use-origsql].

<WarningBox>

Expand All @@ -36,6 +49,7 @@ cubes:
- name: base
type: original_sql
external: false

- name: main
dimensions:
- id
Expand All @@ -54,20 +68,18 @@ cube("orders", {
pre_aggregations: {
base: {
type: `original_sql`,
external: false,
external: false
},

main: {
dimensions: [id, name],
measures: [count],
time_dimension: created_at,
granularity: `day`,
use_original_sql_pre_aggregations: true,
},
},

// ...
});
use_original_sql_pre_aggregations: true
}
}
})
```

</CodeTabs>
Expand All @@ -81,3 +93,6 @@ pre-aggregation.
/reference/data-model/pre-aggregations#original_sql
[ref-schema-ref-preaggs-use-origsql]:
/reference/data-model/pre-aggregations#use_original_sql_pre_aggregations
[ref-cubes]: /reference/data-model/cube
[ref-cube-sql]: /reference/data-model/cube#sql
[ref-preaggs]: /product/caching/using-pre-aggregations

0 comments on commit d264cf7

Please sign in to comment.