Skip to main content
Apache Airflow is a popular open-source workflow scheduler commonly used for data orchestration. Astro is a fully managed service for Airflow by Astronomer. This guide demonstrates how to setup Cube and Airflow to work together so that Airflow can push changes from upstream data sources to Cube via the Orchestration API.

Tasks

In Airflow, pipelines are represented by directed acyclic graphs (DAGs), Python function decorated with a @dag decorator. DAGs include calls to tasks, implemented as instances of the Operator class. Operators can perform various tasks: poll for some precondition, perform extract-load-transform (ETL), or trigger external systems like Cube. Integration between Cube and Airflow is enabled by the airflow-provider-cube package that provides the following operators.

CubeQueryOperator

CubeQueryOperator is used to query Cube via the /v1/load endpoint of the REST (JSON) API. It supports the following options:

CubeBuildOperator

CubeBuildOperator is used to trigger pre-aggregation builds and check their status via the /v1/pre-aggregations/jobs endpoint of the Orchestration API. It supports the following options:

Installation

Install Astro CLI installed. Create a new directory and initialize a new Astro project:
Add the integration package to requirements.txt:

Configuration

Connection

Create an Airflow connection via the web console or by adding the following contents to the airflow_settings.yaml file:
Let’s break the options down:
  • By default, Cube operators use cube_default as an Airflow connection name.
  • The connection shoud be of the generic type.
  • conn_host should be set to the URL of your Cube deployment.
  • conn_password should be set to the value of the CUBEJS_API_SECRET environment variable.
  • conn_extra should contain a security context (as security_context) that will be sent with API requests.

DAGs

Create a new DAG named cube_query.py in the dags subdirectory with the following contents. As you can see, the CubeQueryOperator accepts a Cube query via the query option.
Create a new DAG named cube_build.py in the dags subdirectory with the following contents. As you can see, the CubeBuildOperator accepts a pre-aggregation selector via the selector option.
Pay attention to the complete option. When it’s set to True, the operator will wait for pre-aggregation builds to complete before allowing downstream tasks to run.

Running workflows

Now, you can run these DAGs:
Alternatively, you can run Airflow and navigate to the web console at localhost:8080 (use admin/admin to authenticate):