Getting started with BigQuery with Hasura in Docker
Get the Hasura docker-compose file:
# in a new directory run
# or run
curl https://raw.githubusercontent.com/hasura/graphql-engine/stable/install-manifests/docker-compose/docker-compose.yaml -o docker-compose.yaml
The following command will run Hasura along with a Postgres database required for its functioning.
$ docker compose up -d
Check if the containers are running:
$ docker ps
CONTAINER ID IMAGE ... CREATED STATUS PORTS ...
097f58433a2b hasura/graphql-engine ... 1m ago Up 1m 8080->8080/tcp ...
b0b1aac0508d postgres ... 1m ago Up 1m 5432/tcp ...
Please do note that you will see a Postgres database running, which is used by Hasura to store its configuration (Hasura metadata).
http://localhost:8080/console to open the Hasura console.
Connecting to a BigQuery project
Hasura GraphQL engine requires the following to connect to a BigQuery project:
- The project Id
- The datasets that can be exposed over graphql have to be explicitly listed.
- A Service Account to query the project.
Creating a Service Account
In Google Cloud's console, head to your BigQuery project.
IAM & Admin > Service Accounts > Create Service Account
- Give it a name, and under roles, and grant these 3 roles:
BigQuery Metadata Viewer
BigQuery Data Viewer
BigQuery Job User
- Click on the created service account,
Keys > ADD KEY > Create New Key > JSON > Create. This will download a service account file on your computer.
Connect BigQuery to Hasura
- Update Graphql engine with an environment variable set to the contents of the service account.
For example, this could be done as follows if you are using Docker:
docker run -e BIGQUERY_SA_ACCOUNT=$(cat /path/to/the/service-account.json) <rest-of-the-flags>
- Head to the Console, in the
Connect Existing Databasepage, choose
Connect Via, and fill in the necessary details:
You should now be able to track the tables that are part of the specified tables and configure relationships between them. As BigQuery lacks foreign key constraints, the Hasura Console cannot suggest relationships, so all relationships between BigQuery tables have to be manually configured.
Try out a GraphQL query
Head to the
API tab in the Console and try running a GraphQL query! Use the explorer sidebar on GraphQL to get help in
creating a GraphQL query.