AshClickhouse

Note: This library is under active development, unstable and the API may change.

An Ash Framework data layer for ClickHouse. It implements the Ash.DataLayer behaviour using the clickhouse client.

Features

ClickHouse is a full SQL columnar store, so most Ash query features map directly:

Not supported

Installation

def deps do
[
{:ash_clickhouse, "~> 0.1.0"}
]
end

Quick start

1. Configure a Repo

defmodule MyApp.Repo do
use AshClickhouse.Repo, otp_app: :my_app
end
# config/config.exs
config :my_app, MyApp.Repo,
url: "http://localhost:8123",
database: "my_app_dev"

2. Add to your supervision tree

children = [MyApp.Repo, ...]

3. Define a resource

defmodule MyApp.User do
use Ash.Resource,
data_layer: AshClickhouse.DataLayer,
domain: MyApp.Domain
clickhouse do
table "users"
repo MyApp.Repo
engine "MergeTree()"
order_by "id"
end
attributes do
uuid_primary_key :id
attribute :name, :string
attribute :email, :string
end
actions do
defaults [:create, :read, :update, :destroy]
end
end

4. Create the database and tables

mix ash_clickhouse.setup
mix ash_clickhouse.migrate

5. Use it

{:ok, user} = Ash.create(MyApp.User, %{name: "John", email: "john@example.com"})
users = Ash.read!(MyApp.User)

Configuration

Resource (clickhouse DSL)

OptionDescription
tableTable name (overrides default)
repoThe AshClickhouse.Repo module
databaseDatabase to use (overrides repo default)
engineClickHouse table engine (default "MergeTree()")
order_byORDER BY expression for the engine
partition_byPARTITION BY expression
primary_keyExplicit primary key columns
settingsEngine settings string
base_filterFilter applied to all queries
default_contextContext merged into every query/changeset
migrateWhether to include in migrations (default true)

Repo

OptionDefault
url"http://localhost:8123"
username"default"
password""
databasenil
timeout30_000

License

Apache-2.0. See LICENSE.