Packages
pillar
0.39.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.1
0.34.0
0.33.1
0.33.0
0.32.0
0.31.0
0.30.0
0.29.1
0.29.0
0.28.0
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Elixir client for ClickHouse, a fast open-source Online Analytical Processing (OLAP) database management system.
Current section
Files
Jump to
Current section
Files
stuff/guides/getting_started.md
# Getting Started with Pillar
This guide will help you get up and running with Pillar, the Elixir client for ClickHouse.
## Installation
Add `pillar` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:pillar, "~> 0.39.0"}
]
end
```
Then run:
```bash
mix deps.get
```
## Basic Configuration
### Direct Connection
The simplest way to use Pillar is with a direct connection:
```elixir
# Create a connection to your ClickHouse server
conn = Pillar.Connection.new("http://user:password@localhost:8123/database")
```
The connection URL follows this format:
```
http://[username:password@]host[:port]/database
```
Where:
- `username` and `password` are your ClickHouse credentials (default: default/empty)
- `host` is the ClickHouse server hostname or IP
- `port` is the HTTP port (default: 8123)
- `database` is the database name
### Connection Options
You can provide additional options when creating a connection:
```elixir
conn = Pillar.Connection.new(
"http://user:password@localhost:8123/database",
%{
timeout: 30_000, # Connection timeout in milliseconds
max_execution_time: 60, # Maximum query execution time in seconds
database: "analytics" # Override database in URL
}
)
```
## Basic Operations
### Running Queries
```elixir
# Simple query
{:ok, result} = Pillar.query(conn, "SELECT 1")
# Parameterized query
{:ok, users} = Pillar.select(
conn,
"SELECT * FROM users WHERE age > {min_age} LIMIT {limit}",
%{min_age: 21, limit: 100}
)
```
### Inserting Data
```elixir
# Insert with parameters
{:ok, _} = Pillar.insert(
conn,
"INSERT INTO events (user_id, event_type, created_at) VALUES ({user_id}, {event_type}, {created_at})",
%{user_id: 123, event_type: "login", created_at: DateTime.utc_now()}
)
# Insert a record using a map
{:ok, _} = Pillar.insert_to_table(
conn,
"users",
%{
id: 456,
name: "John Doe",
email: "john@example.com",
created_at: DateTime.utc_now()
}
)
# Insert multiple records
{:ok, _} = Pillar.insert_to_table(
conn,
"users",
[
%{id: 1, name: "Alice", email: "alice@example.com"},
%{id: 2, name: "Bob", email: "bob@example.com"},
%{id: 3, name: "Charlie", email: "charlie@example.com"}
]
)
```
## Understanding Responses
Most Pillar functions return one of these response patterns:
```elixir
{:ok, result} # Success with result data
{:error, reason} # Error with reason
```
For example:
```elixir
case Pillar.select(conn, "SELECT * FROM users LIMIT 10") do
{:ok, users} ->
# Do something with the users list
Enum.each(users, &IO.inspect/1)
{:error, error} ->
# Handle the error
Logger.error("Query failed: #{inspect(error)}")
end
```
## Next Steps
Now that you have a basic understanding of how to use Pillar, you might want to explore:
- [Connection Pool](connection_pool.html) for managing multiple connections
- [Migrations](migrations.html) for managing your ClickHouse schema
- [Bulk Insert Strategies](bulk_inserts.html) for efficiently loading data