Ducker Tutorial
View SourceMix.install([
{:ducker, "~> 0.2.0"},
{:adbc, "~> 0.7.9"},
{:kino, "~> 0.16.0"},
{:kino_db, "~> 0.3.0"},
{:kino_explorer, "~> 0.1.24"}
])
Section
Create connection to DuckDB in-memory database
alias Adbc.Connection, as: Conn
:ok = Adbc.download_driver!(:duckdb)
{:ok, db} = Kino.start_child({Adbc.Database, driver: :duckdb})
{:ok, conn} = Kino.start_child({Adbc.Connection, database: db})
# This example uses files in ducker's `priv/example`
work_dir = Path.join(:code.priv_dir(:ducker), "example")
You can attach to DuckDB database file
ATTACH '/path/to/your.db' AS file_db;
USE file_db;
Initialize Ducker to create SQL macros and tables needed by Ducker.
ducker = Ducker.initialize!(conn, work_dir)
# clear validation results
Ducker.reset_validation_results!(ducker)
# run query from `sources` directory
# (relative to `work_dir`)
Ducker.execute_query_file_from_dir!(ducker, "sources")
|> IO.inspect(label: "Executed SQL files")
# run validation from `sources` directory
Ducker.execute_validation_from_dir!(ducker, "sources")
|> IO.inspect(label: "Executed validation")
:ok
View validation result
result2 =
Explorer.DataFrame.from_query!(
conn,
~S"""
select * from ducker_validate_result
where fail_count > 0
""",
[]
)
result = Explorer.DataFrame.from_query!(conn, ~S"SUMMARIZE mtcars ", [])