New to Kestra?
Use blueprints to kickstart your first workflows.
Query Apache Pinot, serialize the results to CSV, and load them into a typed BigQuery table with Kestra. Declarative YAML, retries, and event triggers.
Move real-time analytics data out of Apache Pinot and into BigQuery for long-term warehousing and SQL analysis. This blueprint queries a Pinot table over JDBC, serializes the result set to CSV, and loads it into a typed BigQuery table, solving the common problem of bridging a low-latency OLAP store with a cloud data warehouse without writing glue scripts or managing intermediate infrastructure.
query_pinot (io.kestra.plugin.jdbc.pinot.Query) runs a SQL query against a Pinot broker over the jdbc:pinot driver, casting the location_st_point bytes column to a string so it survives serialization, and emits the rows as an Ion-formatted internal storage file.write_to_csv (io.kestra.plugin.serdes.csv.IonToCsv) converts that Ion file into a CSV file, consuming the upstream output via {{ outputs.query_pinot.uri }}.load_bigquery (io.kestra.plugin.gcp.bigquery.Load) loads the CSV into my_project.my_dataset.my_table, applying an explicit field schema (FLOAT64, STRING) and csvOptions (comma delimiter, skipLeadingRows: 1) so the destination table is created with correct types at runtime.schema is declared inline, so the table is created or validated on every run.Pinot is built for fast queries, not for scheduling cross-system data movement, and it has no native way to trigger, retry, or track a load into BigQuery. Kestra adds event triggers and schedules, automatic retries on transient broker or load failures, full execution lineage across the query, serialize, and load steps, and a single declarative YAML definition you can version control. That fills the gap Pinot's own engine cannot: reliable, observable, end-to-end orchestration.
jdbc:pinot:// URL).GCP_SERVICE_ACCOUNT_JSON: the GCP service account JSON key used by the BigQuery Load task, referenced as {{ secret('GCP_SERVICE_ACCOUNT_JSON') }}.docker pull apachepinot/pinot:latest
docker run -p 9000:9000 apachepinot/pinot:latest QuickStart -type batch
QuickStart mode loads example datasets, including the starbucksStores table used here.GCP_SERVICE_ACCOUNT_JSON secret to your Kestra instance.projectId, destinationTable, and the Pinot url to match your environment.sql query and the BigQuery schema to move any Pinot table.IonToCsv with another serdes format, or add downstream bigquery.Query tasks to transform after load.inputs for reuse across environments.