

In this case the materialized view is considered to be stale. Let’s do a side by side comparison of the execution plans: Refreshing when staleĪs mentioned above, it’s highly likely that the data in the source tables will change over time, and therefore the data in the materialized view will no longer be a true reflection. So quicker than the query against the table, as we’d hoped. Let’s see how a query against the materialized view compares. Select town_city,tenure_type,max(sale_price) as max_sale_price,min(sale_price) as min_sale_price, count(*) sale_count from house_price_dataĪs shown above, the materialized view house_price_mvw is created, and some warnings were generated, indicating that some of the functions are not supported for incremental refreshing. create materialized view house_price_mvw as So nothing too trenuous or complex, but a fair enough place to start. We’ll start off by issuing a query against table that includes some aggregates, and looking at the execution time.

In this basic example we’ll use 1 source table (a table containing 22m rows of property sale data).
#REDSHIFT MATERIALIZED VIEW LIMITATIONS FULL#
It’s also worth noting that incremental refreshes are not supported for certain aggregate functions.įor the full list of usage limitations and restrictions, you should review the documentation here. Some of the notable ones that may affect your decision to use them are things like you cannot create materialized views that references other materialized views or standard views, external tables, or system tables and views in terms of SQL, clauses such as ORDER BY and LIMIT are also not currently supported. LimitationsĪt the time of writing this article, there are a number of limitations you need to be aware of.

they can be ideal for reducing execution time for a regular set of queries/reports that might otherwise have to access large amounts of data, calculate aggregates, etc.) In this post I will be taking an initial look at how they work in Redshift. Materialized views have long been available in other RDBMS platforms such as Oracle, and are often mentioned in Data Warehouse/reporting use cases (e.g. As data inevitably changes in the source tables over time, any materialized views based on those tables will need to be refreshed, and depending on complexity/usage limitations a refresh can either be partial (incremental) or complete (full). So wherein a standard view will contain a parsed query but still reads the source tables when accessed, a materialized view will contain the actual rows and thus in theory save you some CPU/memory/Disk time. For those that are not aware, a materialized view is similar to a standard view in that it is generated with an SQL statement against 1 or more source tables, but as it’s name suggests it is itself supported by an underlying physical table which contains the results of the query. One of the recent additions to the growing number of features in Amazon Redshift was materialized views.
