Extend schema with views¶
Table of contents
What are views?¶
Views can be used to expose the results of a custom query as a virtual table. Views are not persisted physically i.e. the query defining a view is executed whenever data is requested from the view.
Hasura GraphQL engine lets you expose views over the GraphQL API to allow querying them using both queries
and
subscriptions
just like regular tables.
Creating & exposing views¶
Views can be created using SQL which can be run in the Hasura console:
- Head to the
Data -> SQL
section of the Hasura console - Enter your create view SQL statement
- Select the
Track this
checkbox to expose the new view over the GraphQL API - Hit the
Run
button
Use cases¶
Views are ideal solutions for retrieving some derived data based on some custom business logic. If your custom logic requires any user input, you should use custom SQL functions instead.
Let’s see a few example use cases for views:
Example: Group by and then aggregate¶
Let’s see how to fetch the average article rating for each author in our author/article schema.
A view that averages the rating of articles for each author can be created using the following SQL query:
CREATE VIEW author_average_rating AS
SELECT author_id, avg(rating)
FROM article
GROUP BY author_id
Example: Hide certain fields of a table¶
Say, we have some sensitive information in a table which we wouldn’t want to expose. We can create a view that only exposes the non-sensitive fields.
Let’s say our author
table has the fields id, name, city, email, phone, address
and we want to hide the email
,
phone
and address
fields. We can create the following view to achieve this:
CREATE VIEW author_public AS
SELECT id, name, city
FROM author