Adbc (adbc v0.7.9)
View SourceBindings for Arrow Database Connectivity (ADBC).
Adbc provides a standard database interface using the Apache Arrow format.
Installation
First, add :adbc
as a dependency in your mix.exs
:
{:adbc, "~> 0.1"}
Now, in your config/config.exs, configure the drivers you are going to use:
config :adbc, :drivers, [:sqlite]
If you are using a notebook or scripting, you can also use
Adbc.download_driver!/1
to dynamically download one. See
the function for more information on downloading drivers.
Then start the database and the relevant connection processes in your supervision tree:
children = [
{Adbc.Database,
driver: :sqlite,
process_options: [name: MyApp.DB]},
{Adbc.Connection,
database: MyApp.DB,
process_options: [name: MyApp.Conn]}
]
Supervisor.start_link(children, strategy: :one_for_one)
In a notebook, the above would look like this:
db = Kino.start_child!({Adbc.Database, driver: :sqlite})
conn = Kino.start_child!({Adbc.Connection, database: db})
And now you can make queries with:
# For named connections
{:ok, _} = Adbc.Connection.query(MyApp.Conn, "SELECT 123")
# When using the conn PID directly
{:ok, _} = Adbc.Connection.query(conn, "SELECT 123")
Supported drivers
Below we list all drivers supported out of the box. You may also
give the full path to a driver in the :driver
option to load other
existing drivers.
DuckDB
The DuckDB driver provides access to in-memory DuckDB databases.
Examples
{Adbc.Database, driver: :duckdb}
PostgreSQL
The PostgreSQL driver provides access to any database that supports
the PostgreSQL wire format. It is implemented as a wrapper around
libpq
.
Examples
{Adbc.Database, driver: :postgresql, uri: "postgresql://postgres@localhost"}
You must pass the :uri
option using Postgres'
connection URI:
Sqlite
The SQLite driver provides access to SQLite databases.
Examples
{Adbc.Database, driver: :sqlite, uri: ":memory:"}
{Adbc.Database, driver: :sqlite, uri: "./db/my.db"}
{Adbc.Database, driver: :sqlite, uri: "file:/path/to/file/in/disk.db"}
The :uri
option should be, ":memory:", a filename or
URI filename.
If omitted, it will default to an in-memory database, but
one that is shared across all connections.
Snowflake
The Snowflake driver provides access to Snowflake Database Warehouses.
Examples
{Adbc.Database, driver: :snowflake, uri: "..."}
The Snowflake URI should be of one of the following formats:
user[:password]@account/database/schema[?param1=value1¶mN=valueN]
user[:password]@account/database[?param1=value1¶mN=valueN]
user[:password]@host:port/database/schema?account=user_account[¶m1=value1¶mN=valueN]
host:port/database/schema?account=user_account[¶m1=value1¶mN=valueN]
The first two are the most recommended formats. The schema, database and parameters are optional. See Account identifiers for more information.
Summary
Functions
Downloads a driver and returns the download status.
Downloads a driver and raises in case of errors.
Functions
Downloads a driver and returns the download status.
It returns :ok
or {:error, binary}
. See download_driver!/1
for more information.
Downloads a driver and raises in case of errors.
It returns :ok
.
See Adbc
module documentation for all supported drivers.
Options
:version
- the version of the asset being downloaded:url
- the url to find the precompiled asset
For example, to download the latest DuckDB driver, you must find its latest release on GitHub, and pass the version and the precompiled asset to your OS. For example, if the latest version is v1.3.0, you can invoke:
Adbc.download_driver!(:duckdb,
version: "1.3.0",
url: "https://github.com/duckdb/duckdb/releases/download/v1.3.0/libduckdb-osx-universal.zip"
)
You can also pass download options when configuring the :adbc
:
config :adbc, :drivers,
[{:duckdb, version: ..., url: ...}]