> For the complete documentation index, see [llms.txt](https://docs.slingdata.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.slingdata.io/connections/database-connections/firebolt.md).

# Firebolt

Connect & Ingest data from / to a Firebolt database

[Firebolt](https://www.firebolt.io/) is a high-performance analytical database. Sling connects directly to the HTTP query endpoint of a self-hosted [Firebolt Core](https://github.com/firebolt-db/firebolt-core) engine, so the Firebolt SDK is not required.

## Setup

The following credentials keys are accepted:

* `host` **(required)** -> The hostname / ip of the engine
* `port` (optional) -> The port of the instance. Default is `3473`.
* `database` (optional) -> The database to run queries against. Default is `firebolt`.
* `schema` (optional) -> The default schema Sling uses to resolve unqualified table names. Default is `public`.
* `secure` (optional) -> whether to use HTTPS / TLS (`true` / `false`). Default is `false`.
* `skip_verify` (optional) -> skip TLS certificate verification, for self-signed certificates (`true` / `false`). Default is `false`.
* `user` (optional) -> Accepted for URL compatibility (alias: `username`). Firebolt Core does not authenticate, so it is not sent.
* `password` (optional) -> Accepted for URL compatibility. Not sent.

{% hint style="info" %}
Sling supports self-hosted Firebolt Core, which is unauthenticated: statements are posted to `http://<host>:3473` and results are streamed back. Managed Firebolt (Cloud) uses OAuth token exchange plus engine discovery, which this connection does not implement.
{% endhint %}

{% hint style="info" %}
`schema` is applied by Sling when resolving unqualified table names, e.g. `mytable` becomes `public.mytable`. Firebolt Core has no session-level schema setting, so qualify names yourself inside raw `sql` streams.
{% endhint %}

### Using `sling conns`

Here are examples of setting a connection named `FIREBOLT`. We must provide the `type=firebolt` property:

{% code overflow="wrap" %}

```bash
$ sling conns set FIREBOLT type=firebolt host=<host> port=3473 database=firebolt

# With TLS (and a self-signed certificate)
$ sling conns set FIREBOLT type=firebolt host=<host> port=3473 database=firebolt \
    secure=true skip_verify=true

# OR use url
$ sling conns set FIREBOLT url="firebolt://:@host.ip:3473/firebolt?secure=false&skip_verify=false"
```

{% endcode %}

### Environment Variable

See [here](https://docs.slingdata.io/connections/database-connections/pages/eAdVs2BHCgdr6RS8GoJC#dot-env-file-.env.sling) to learn more about the `.env.sling` file.

{% code overflow="wrap" %}

```bash
export FIREBOLT='firebolt://:@host.ip:3473/firebolt?secure=false&skip_verify=false'
export FIREBOLT='{ type: firebolt, host: "host.ip", port: 3473, database: "firebolt" }'
export FIREBOLT_TLS='{ type: firebolt, host: "host.ip", port: 3473, database: "firebolt", secure: true, skip_verify: true }'
```

{% endcode %}

### Sling Env File YAML

See [here](https://docs.slingdata.io/connections/database-connections/pages/eAdVs2BHCgdr6RS8GoJC#sling-env-file-env.yaml) to learn more about the sling `env.yaml` file.

```yaml
connections:
  FIREBOLT:
    type: firebolt
    host: host.ip
    port: 3473
    database: firebolt
    schema: public

  FIREBOLT_TLS:
    type: firebolt
    host: host.ip
    port: 3473
    database: firebolt
    secure: true
    skip_verify: true

  FIREBOLT_URL:
    type: firebolt
    url: "firebolt://:@host.ip:3473/firebolt?secure=false&skip_verify=false"
```

## Examples

```yaml
source: firebolt
target: snowflake

defaults:
  mode: full-refresh
  object: public.{stream_schema}_{stream_table}

streams:
  mydb.analytics.events:
  mydb.public.users:
    select: [id, email, created_at]
```

```yaml
# Incremental load out of Firebolt
source: firebolt
target: postgres

defaults:
  mode: incremental
  object: public.{stream_table}
  primary_key: [id]
  update_key: updated_at

streams:
  mydb.public.orders:
```

```yaml
source: postgres
target: firebolt

defaults:
  mode: full-refresh
  object: mydb.public.{stream_table}

streams:
  public.orders:
  public.order_items:
```

```yaml
# Firebolt views can be used as streams
source: firebolt
target: s3

defaults:
  mode: full-refresh
  object: s3://bucket/export/{stream_name}.parquet

streams:
  mydb.public.orders_vw:
```

### Notes

* **No plain indexes** — Firebolt's secondary indexes are specialized (`FULL_TEXT`, `INVERTED_INDEX`, `HNSW`, `SKIP_INDEX`) and are not declared through Sling's `index:` option. Use `pre_sql` / `post_sql` to create them.
* **Merge strategies** — `insert`, `update`, `update_insert` (the default) and `delete_insert` are all supported, backed by `MERGE INTO` / `INSERT ... SELECT`.
* **Transactions** — each load runs inside a Firebolt transaction, so a failed load does not leave a partially written table.
* **Text columns** — Firebolt `text` is unbounded, so no length is enforced on writes; string columns are created as `text`.
* **Views** — Firebolt views can be read as streams.
* **Loads are staged** — a full-refresh load creates a `<table>_tmp` table, fills it, and only then moves the rows into the final object, so readers never see a half-loaded table.

If you are facing issues connecting, give [`sling assist`](/sling-cli/ai/assist.md) a try, or reach out to us at <support@slingdata.io>, on [discord](https://discord.gg/q5xtaSNDvp) or open a Github Issue [here](https://github.com/slingdata-io/sling-cli/issues).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.slingdata.io/connections/database-connections/firebolt.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
