dbt-frostlake
A dbt adapter for Frostlake, so a dbt project runs locally with zero warehouse cost.
It is a standalone adapter: built directly on dbt-adapters, with its own macros and
dialect rules. No other adapter is installed or imported. The transport is
frostlake-connector over
frostlake, which speak Frostlake's HTTP protocol.
Install
pip install dbt-frostlake
That brings dbt-core, frostlake-connector and frostlake with it. No JVM is needed on
the client.
Profile
my_project:
target: dev
outputs:
dev:
type: frostlake
host: localhost # Frostlake HTTP server
port: 18082
database: demo_db
schema: public
threads: 1
account, user and password are optional: they are accepted so a profile carried
over from another warehouse still loads, and ignored — the server has no login.
Start a server for it
The engine is published to Maven Central, so no build is required:
mvn dependency:get -Dartifact=dev.frostlake:frostlake-db:0.0.7
java -cp "<frostlake-db jar>:<its runtime deps>" dev.frostlake.http.DatabaseHttpServer 18082
Requires JDK 17 and a Frostlake engine 0.0.7 or newer. Create the target database once it is up:
CREATE DATABASE IF NOT EXISTS demo_db;
Smoke-tested surface
Against a booted DatabaseHttpServer: dbt debug,
dbt seed (typed CSV loads incl. DECIMAL), dbt run (view + table materializations),
dbt test (unique, not_null), dbt build, dbt snapshot (check strategy, repeat
runs), incremental models (first and subsequent runs), and dbt docs generate
(information_schema catalog) — all green.
Dialect notes
Frostlake resolves unquoted identifiers uppercase, so the adapter turns dbt's default
quoting off, and seed columns are unquoted unless a project sets quote_columns.
Two engine limitations are worked around in the macros: ALTER VIEW … RENAME TO rejects
a qualified target (tables accept one), and CASCADE is accepted on DROP SCHEMA but
not on DROP TABLE/DROP VIEW.
A runnable example project lives in
frostlake-dbt-demo, a sibling
repository: two seeds, two staging views, a table model and five data tests.
Tests
export JAVA_HOME=/path/to/jdk17
export FROSTLAKE_CLASSPATH="/path/to/frostlake-db.jar:<engine deps>"
python3 test/test_adapter.py
Covers the plugin wiring dbt reads on load (adapter and credentials classes, the
empty plugin dependency list, the shipped include path), the credential
surface and its unique_field connection key, and open() against a live server —
handle usability, database/schema context, query tags, and reuse of an already-open
connection. The plugin and credential tests need no server; the connection tests skip
without FROSTLAKE_CLASSPATH.
Still to do
Grind dbt's standard acceptance suite (dbt-tests-adapter) green; every failure is either
a facade gap or a Frostlake SQL gap worth fixing.
Metadata
Release files for dbt-frostlake 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dbt_frostlake-0.2.1.tar.gz | 20.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_frostlake-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.4 kB
Release files / dbt_frostlake-0.2.1.tar.gz
| Download URL | dbt_frostlake-0.2.1.tar.gz |
|---|---|
| Size | 20.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dcbbedcea8de4473282e6a74124beecd9292edb7b9fa949d68e6a19aff31f2cb
|
|
BLAKE2b-256 checksum How to use checksums |
a9de9453aac1db0e5b6aeb023811f68323b8d11fecb038c572d1be765bb4e109
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / dbt_frostlake-0.2.1-py3-none-any.whl
| Download URL | dbt_frostlake-0.2.1-py3-none-any.whl |
|---|---|
| Size | 15.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8b04944c51c09f051d93c63db0ddff9d08d6f5725856ea796ce5be6a025f2c04
|
|
BLAKE2b-256 checksum How to use checksums |
7c4504acdb902c0548e66de8b719580545614fd61c683a363eaa1163a8c7d996
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|