Google Looker connection¶
Run Looker queries and trigger PDTs from a task via a managed Leoflow Connection and the
Google provider's LookerHook. The conn_type is gcp_looker. A connection has no
password โ the API3 client_id and client_secret live in Extra.
The conn_type has an underscore, so the delivered URI scheme is normalized to
gcp-looker(Airflow does the same).
Declare the provider¶
Fields the UI asks for¶
| Field | Where it goes | Notes |
|---|---|---|
| Conn Id | โ | e.g. gcp_looker_default. |
| Host | host | The Looker instance base URL, e.g. https://my.looker.com. |
| Extra | extra | e.g. {"client_id": "x", "client_secret": "y"} (API3 credentials). Encrypted at rest (ADR 0019). |
The client_id / client_secret Extra round-trip under the normalized gcp-looker
scheme is pinned by TestGCPLookerConnectionURIShapeIntegration.
Example DAG (copy-paste)¶
Docs-only recipe (needs a real Looker instance). The hook is imported inside the task โ a top-level provider import fails the compile (see Installing a connector's provider).
# dag.py
from __future__ import annotations
from airflow.sdk import DAG, task
@task
def build_pdt() -> None:
from airflow.providers.google.cloud.hooks.looker import LookerHook
hook = LookerHook(looker_conn_id="gcp_looker_default")
print("build_pdt: starting PDT build via LookerHook(gcp_looker_default)")
materialization_id = hook.start_pdt_build(model="my_model", view="my_view")
print(f"build_pdt: materialization {materialization_id}")
with DAG("looker_pdt", schedule=None, catchup=False, tags=["example"]):
build_pdt()
# leoflow.yaml
schema_version: "1.0"
dag_id: looker_pdt
description: Build a Looker PDT via LookerHook.
owner: examples
tags:
- example
python_version: "3.11"
connectors:
- gcp_looker
Run it¶
- Admin โ Connections โ +, type
gcp_looker. Set the instance URL in Host and the API3client_id/client_secretin Extra. leoflow lite path/to/this/dagโ triggerlooker_pdt.
Security notes¶
- Scope the API3 credentials to a dedicated service account and rotate them regularly; the Extra is encrypted at rest and never echoed back.
- Never
print()the URI โ it carries the API3 secret.
Related¶
docs/connections/index.mdโ Installing a connector's provider.- ADR 0019 / 0021 โ secret encryption + agent delivery.