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.0
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.0.tar.gz | 20.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dbt_frostlake-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.3 kB
Release files / dbt_frostlake-0.2.0.tar.gz
| Download URL | dbt_frostlake-0.2.0.tar.gz |
|---|---|
| Size | 20.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
98102c6abbe25296b20dfe4dc12a59e753ca6afa9164f0b45ce18f6036baf545
|
|
BLAKE2b-256 checksum How to use checksums |
20b2bda6557bdd4346716c95b14d933e7ab550d289b39ea2b32489e46668a3bf
|
| 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.0-py3-none-any.whl
| Download URL | dbt_frostlake-0.2.0-py3-none-any.whl |
|---|---|
| Size | 15.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2bab5cf93d1b60f598ba74a1f061a2a0c42b50c94044602e614ff8d4284d839a
|
|
BLAKE2b-256 checksum How to use checksums |
18624c786200177abf6fa8905ac037c908f00de61f884db69efe0ae3b50a9206
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|