Amazon Athena connection
Amazon Athena connection
Version v0.4.0 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot. For up-to-date documentation, see the latest version.
A Connection is a piece of credentialised configuration the control plane
encrypts at rest (ADR 0019) and delivers to a running task as
AIRFLOW_CONN_<CONN_ID> (ADR 0021). User code (Python psycopg2,
requests, your operator of choice) reads the env var and connects.
This page is the index. Each linked entry below is a focused recipe with the URI shape, an example DAG, and how to test it.
Only a subset of Airflow’s standard connection types are documented + tested so far. The list below grows as we land them.
A Connection only carries credentials. To use a connector — whether through
its Airflow hook (PostgresHook) or a raw driver (psycopg2) — the matching
Python package has to be in the image / venv. Leoflow gives you two ways to
declare that in leoflow.yaml, and you pick whichever fits:
dag_id: my_pipeline
connectors:
- postgres
- http
Short names you don’t have to memorise. At compile, each expands to its
apache-airflow-providers-* package (ADR 0038), which pulls the hook and
its driver transitively — so connectors: [postgres] is enough to use either
PostgresHook or raw psycopg2. One line per connector, no version to recall.
dag_id: my_pipeline
dependencies:
- apache-airflow-providers-postgres==6.0.0 # pin the provider, or…
- psycopg2-binary==2.9.10 # …just the driver, your call
Full control: pin an exact version, install only the driver, or add a package the catalog doesn’t know about. Advanced users who already think in pip specifiers stay here.
Both lists are additive — the effective install is expand(connectors) + dependencies. A name in connectors: that isn’t in the catalog fails the
compile with the offender, the known list, and a pointer to dependencies:,
so a typo never slips through to a runtime ModuleNotFoundError in the task pod.
Leoflow parses your DAG without providers installed (the parser only needs the
DAG’s shape). So put hook/operator imports inside the @task body, not at
the module top level:
@task
def load():
from airflow.providers.postgres.hooks.postgres import PostgresHook # here
hook = PostgresHook(postgres_conn_id="pg_target")
...
A provider import at the module top level fails the compile with an actionable
message telling you to move it into the task and declare it via connectors:.
The import works at runtime because connectors:/dependencies: installed the
provider into the task image / venv.
The catalog is generated from a real Airflow install (scripts/gen_connectors.py
→ internal/connectors/catalog.json, ADR 0039), so ~86 connector types ship with
a dropdown entry, the correct standard-field behavior, and the provider-specific
custom fields served to the form (e.g. Snowflake’s account/warehouse, the
GCP keyfile) in the exact param-spec shape the Airflow 3.2 FlexibleForm consumes.
It is the single source of truth shared by the admin form, the sugar expansion, and
compile validation.
The field metadata is verified end-to-end: it is generated from Airflow’s own
serializer and pinned by a Go test (TestConnectionHookMetaExtraFieldsFlexibleFormShape),
and the delivered AIRFLOW_CONN_* URI is accepted by real Airflow’s
Connection.from_uri. The one piece confirmed only by manual UI check is the
SPA visually rendering those custom inputs. For a connector whose creds live
in Extra, you can always fall back to the raw Extra (JSON) field.
The common head:
connectors: name | pip package |
|---|---|
postgres | apache-airflow-providers-postgres |
mysql | apache-airflow-providers-mysql |
sqlite | apache-airflow-providers-sqlite |
mssql | apache-airflow-providers-microsoft-mssql |
oracle | apache-airflow-providers-oracle |
redis | apache-airflow-providers-redis |
mongo | apache-airflow-providers-mongo |
http | apache-airflow-providers-http |
aws | apache-airflow-providers-amazon |
google_cloud_platform (alias gcp, google) | apache-airflow-providers-google |
snowflake | apache-airflow-providers-snowflake |
ssh | apache-airflow-providers-ssh |
ftp | apache-airflow-providers-ftp |
sftp | apache-airflow-providers-sftp |
kafka | apache-airflow-providers-apache-kafka |
The package boundary is not a mechanical join of the dotted hook path
(amazon.aws → amazon; microsoft.mssql → microsoft-mssql), which is
exactly why the mapping is curated rather than derived.
When you press Test on a connection of a known type, the result line also
reminds you to declare the provider (connectors: [<type>]) — a Connection in the
UI carries credentials, but the DAG still has to install the hook to use them.
Every documented connector grouped by domain — its conn_type, the provider package the connectors: sugar expands to, and its category. Click a name for the full recipe (URI shape, example DAG, how to test).
| Connector | conn_type | Provider package | Category |
|---|---|---|---|
| cassandra | cassandra | apache-airflow-providers-apache-cassandra | Databases |
| druid | druid | apache-airflow-providers-apache-druid | Databases |
| elasticsearch | elasticsearch | apache-airflow-providers-elasticsearch | Databases |
| hive_cli | hive_cli | apache-airflow-providers-apache-hive | Databases |
| hiveserver2 | hiveserver2 | apache-airflow-providers-apache-hive | Databases |
| influxdb | influxdb | apache-airflow-providers-influxdb | Databases |
| jdbc | jdbc | apache-airflow-providers-jdbc | Databases |
| mongo | mongo | apache-airflow-providers-mongo | Databases |
| mssql | mssql | apache-airflow-providers-microsoft-mssql | Databases |
| mysql | mysql / mariadb | apache-airflow-providers-mysql | Databases |
| neo4j | neo4j | apache-airflow-providers-neo4j | Databases |
| oracle | oracle | apache-airflow-providers-oracle | Databases |
| pinot | pinot | apache-airflow-providers-apache-pinot | Databases |
| postgres | postgres | apache-airflow-providers-postgres | Databases |
| presto | presto | apache-airflow-providers-presto | Databases |
| redis | redis | apache-airflow-providers-redis | Databases |
| sqlite | sqlite | apache-airflow-providers-sqlite | Databases |
| trino | trino | apache-airflow-providers-trino | Databases |
| vertica | vertica | apache-airflow-providers-vertica | Databases |
| Connector | conn_type | Provider package | Category |
|---|---|---|---|
| athena | athena | apache-airflow-providers-amazon | Cloud |
| aws | aws | apache-airflow-providers-amazon | Cloud |
| azure | wasb / adls / azure_* | apache-airflow-providers-microsoft-azure | Cloud |
| databricks | databricks | apache-airflow-providers-databricks | Cloud |
| docker | docker | apache-airflow-providers-docker | Cloud |
| emr | emr | apache-airflow-providers-amazon | Cloud |
| gcpbigquery | gcpbigquery | apache-airflow-providers-google | Cloud |
| gcpcloudsql | gcpcloudsql | apache-airflow-providers-google | Cloud |
| gcpssh | gcpssh | apache-airflow-providers-google | Cloud |
| google_cloud_platform | google_cloud_platform | apache-airflow-providers-google | Cloud |
| http | http / https | apache-airflow-providers-http | Cloud |
| livy | livy | apache-airflow-providers-apache-livy | Cloud |
| redshift | redshift | apache-airflow-providers-amazon | Cloud |
| snowflake | snowflake | apache-airflow-providers-snowflake | Cloud |
| spark | spark / spark_sql / spark_connect / spark_jdbc | apache-airflow-providers-apache-spark | Cloud |
| Connector | conn_type | Provider package | Category |
|---|---|---|---|
| discord | discord | apache-airflow-providers-discord | Messaging |
| imap | imap | apache-airflow-providers-imap | Messaging |
| kafka | kafka | apache-airflow-providers-apache-kafka | Messaging |
| opsgenie | opsgenie | apache-airflow-providers-opsgenie | Messaging |
| pagerduty | pagerduty | apache-airflow-providers-pagerduty | Messaging |
| slack | slack / slackwebhook | apache-airflow-providers-slack | Messaging |
| smtp | smtp | apache-airflow-providers-smtp | Messaging |
| telegram | telegram | apache-airflow-providers-telegram | Messaging |
| Connector | conn_type | Provider package | Category |
|---|---|---|---|
| datadog | datadog | apache-airflow-providers-datadog | BI & SaaS |
| dbt_cloud | dbt_cloud | apache-airflow-providers-dbt-cloud | BI & SaaS |
| gcp_looker | gcp_looker | apache-airflow-providers-google | BI & SaaS |
| github | github | apache-airflow-providers-github | BI & SaaS |
| google_ads | google_ads | apache-airflow-providers-google | BI & SaaS |
| msgraph | msgraph | apache-airflow-providers-microsoft-azure | BI & SaaS |
| powerbi | powerbi | apache-airflow-providers-microsoft-azure | BI & SaaS |
| salesforce | salesforce | apache-airflow-providers-salesforce | BI & SaaS |
| tableau | tableau | apache-airflow-providers-tableau | BI & SaaS |
| zendesk | zendesk | apache-airflow-providers-zendesk | BI & SaaS |
| Connector | conn_type | Provider package | Category |
|---|---|---|---|
| file-transfer | ssh / sftp / ftp | apache-airflow-providers-ssh / -sftp / -ftp | Files |
| samba | samba | apache-airflow-providers-samba | Files |
Every documented connector, its conn_type, the provider package the
connectors: sugar expands to (ADR 0038), the auth shape (where the
credential lives), the local-testable tier, and a runnable example. Each ships
a chain-of-custody delivery test; the tier-1 rows also ship an automated example
test (see the contract below). Cloud families
share a provider package (e.g. redshift/athena/emr →
apache-airflow-providers-amazon; gcpbigquery/gcpcloudsql/gcp_looker →
…-google); the boundary is curated, not a mechanical join of the hook path.
| Connector | conn_type | Provider package | Auth shape | Local tier | Example |
|---|---|---|---|---|---|
| postgres | postgres | apache-airflow-providers-postgres | host + login/password | local (Docker) | postgres_load |
| mysql | mysql / mariadb | apache-airflow-providers-mysql | host + login/password | local (Docker) | mysql_load |
| mssql | mssql | apache-airflow-providers-microsoft-mssql | host + login/password | local (Docker) | mssql_load |
| sqlite | sqlite | apache-airflow-providers-sqlite | file path | local (tier 1) | sqlite_load |
| redis | redis | apache-airflow-providers-redis | host + password | local (tier 1) | redis_load |
| http | http / https | apache-airflow-providers-http | base URL + Extra | local (tier 1) | http_load |
| oracle | oracle | apache-airflow-providers-oracle | host + login/password (service in Schema) | doc-only | recipe |
| mongo | mongo | apache-airflow-providers-mongo | host + login/password (db in Schema) | doc-only | recipe |
| file-transfer | ssh / sftp / ftp | apache-airflow-providers-ssh / -sftp / -ftp | host + login/password (key in Extra) | doc-only | recipe |
| google_cloud_platform | google_cloud_platform | apache-airflow-providers-google | keyless (Workload Identity / ADC) or key in Extra | doc-only | gcp_gcs_load |
| snowflake | snowflake | apache-airflow-providers-snowflake | login/password + account in Extra (or key-pair) | doc-only | recipe |
| aws | aws | apache-airflow-providers-amazon | keyless (IAM role) or access key | doc-only | recipe |
| slack | slack / slackwebhook | apache-airflow-providers-slack | token in password | doc-only | recipe |
| databricks | databricks | apache-airflow-providers-databricks | host + PAT (or OAuth M2M) | doc-only | recipe |
| azure | wasb / adls / azure_* | apache-airflow-providers-microsoft-azure | keyless (managed identity) or key | doc-only | recipe |
| spark | spark / spark_sql / spark_connect / spark_jdbc | apache-airflow-providers-apache-spark | host:port + tuning Extra | doc-only | recipe |
| kafka | kafka | apache-airflow-providers-apache-kafka | all-Extra client config (SASL) | doc-only | recipe |
| redshift | redshift | apache-airflow-providers-amazon | host + login/password (or keyless IAM) | doc-only | recipe |
| athena | athena | apache-airflow-providers-amazon | keyless IAM (region in Extra) | doc-only | recipe |
| emr | emr | apache-airflow-providers-amazon | keyless IAM (region in Extra) | doc-only | recipe |
| gcpbigquery | gcpbigquery | apache-airflow-providers-google | keyless (WI / ADC), project in Extra | doc-only | recipe |
| gcpcloudsql | gcpcloudsql | apache-airflow-providers-google | keyless (WI / ADC), instance in Extra | doc-only | recipe |
| google_ads | google_ads | apache-airflow-providers-google | OAuth material in Extra | doc-only | recipe |
| gcp_looker | gcp_looker | apache-airflow-providers-google | API3 client_id/secret in Extra | doc-only | recipe |
| gcpssh | gcpssh | apache-airflow-providers-google | host + login/password | doc-only | recipe |
| cassandra | cassandra | apache-airflow-providers-apache-cassandra | host + login/password (keyspace in Schema) | doc-only | recipe |
| neo4j | neo4j | apache-airflow-providers-neo4j | host + login/password (db in Schema) | doc-only | recipe |
| vertica | vertica | apache-airflow-providers-vertica | host + login/password | doc-only | recipe |
| influxdb | influxdb | apache-airflow-providers-influxdb | org + token in Extra | doc-only | recipe |
| druid | druid | apache-airflow-providers-apache-druid | host + login/password | doc-only | recipe |
| pinot | pinot | apache-airflow-providers-apache-pinot | host + login/password (optional) | doc-only | recipe |
| trino | trino | apache-airflow-providers-trino | host + login/password (optional) | doc-only | recipe |
| presto | presto | apache-airflow-providers-presto | host + login/password (optional) | doc-only | recipe |
| jdbc | jdbc | apache-airflow-providers-jdbc | host + login/password + driver in Extra | doc-only | recipe |
| docker | docker | apache-airflow-providers-docker | host + login/password | doc-only | recipe |
| salesforce | salesforce | apache-airflow-providers-salesforce | login/password + token in Extra | doc-only | recipe |
| telegram | telegram | apache-airflow-providers-telegram | token in password | doc-only | recipe |
| discord | discord | apache-airflow-providers-discord | token in password + endpoint in Extra | doc-only | recipe |
| pagerduty | pagerduty | apache-airflow-providers-pagerduty | token in password + routing key in Extra | doc-only | recipe |
| datadog | datadog | apache-airflow-providers-datadog | API + app keys in Extra | doc-only | recipe |
| tableau | tableau | apache-airflow-providers-tableau | host + login/password (or PAT) | doc-only | recipe |
| github | github | apache-airflow-providers-github | PAT in password | doc-only | recipe |
| elasticsearch | elasticsearch | apache-airflow-providers-elasticsearch | host + login/password | doc-only | recipe |
| smtp | smtp | apache-airflow-providers-smtp | host + login/password | doc-only | recipe |
| imap | imap | apache-airflow-providers-imap | host + login/password | doc-only | recipe |
| opsgenie | opsgenie | apache-airflow-providers-opsgenie | API key in password | doc-only | recipe |
| zendesk | zendesk | apache-airflow-providers-zendesk | agent email + API token | doc-only | recipe |
| samba | samba | apache-airflow-providers-samba | host + login/password | doc-only | recipe |
| dbt_cloud | dbt_cloud | apache-airflow-providers-dbt-cloud | account id (login) + API token | doc-only | recipe |
| hiveserver2 | hiveserver2 | apache-airflow-providers-apache-hive | host + login/password (db in Schema) | doc-only | recipe |
| hive_cli | hive_cli | apache-airflow-providers-apache-hive | host + login/password + beeline/kerberos in Extra | doc-only | recipe |
| powerbi | powerbi | apache-airflow-providers-microsoft-azure | client id/secret + tenant in Extra | doc-only | recipe |
| msgraph | msgraph | apache-airflow-providers-microsoft-azure | client id/secret + tenant in Extra | doc-only | recipe |
| livy | livy | apache-airflow-providers-apache-livy | host + login/password | doc-only | recipe |
Local tier — local (Docker): spin the service up with Docker/Lima and run the example end-to-end; local (tier 1): no external service needed (or already in CI); doc-only: a real run needs the external account/service, so the page is a recipe with a delivery test rather than a runnable example. Example — recipe links back to the connector’s own page (the copy-paste DAG lives there).
Every curated connector above is first-class (impl + delivery test + cookbook).
Beyond them, all ~86 connector types in the generated catalog (ADR 0039) are
usable today via connectors: (dropdown + sugar) — they just don’t each have a
dedicated cookbook recipe yet. Any other Airflow provider works via
dependencies:. Recipes are added connector-by-connector as they are promoted.
Every entry in this cookbook ships with all three of:
examples/<type>_*/ with its own
README.md showing how to spin up the dependency (Docker / Lima), how
to create the Connection in the UI, and the expected end-state of the
target system.internal/storage/ (companion to the example) gated by the
integration build tag, runs in CI against a real Postgres.If a layer is mocked or the e2e test is manual-only, the doc says so and a follow-up issue covers the gap.
Amazon Athena connection
Amazon Web Services connection
Azure connection
Cassandra connection
Databricks connection
Datadog connection
dbt Cloud connection
Discord connection
Docker registry connection
Druid connection
Elasticsearch connection
Amazon EMR connection
File transfer connections (SSH / SFTP / FTP)
Google Looker connection
Google BigQuery connection
Google Cloud SQL connection
GCP SSH connection
GitHub connection
Google Ads connection
google_cloud_platform — Google Cloud connection
Hive CLI connection
HiveServer2 connection
HTTP connection
IMAP connection
InfluxDB connection
JDBC connection
Apache Kafka connection
Apache Livy connection
MongoDB connection
Microsoft Graph connection
Microsoft SQL Server connection
MySQL / MariaDB connection
Neo4j connection
Opsgenie connection
Oracle connection
PagerDuty connection
Pinot connection
Postgres connection
Power BI connection
Presto connection
Redis connection
Amazon Redshift connection
Salesforce connection
Samba connection
Slack connection
SMTP connection
Snowflake connection
Spark connection
SQLite connection
Tableau connection
Telegram connection
Trino connection
Vertica connection
Zendesk connection