May 22

Интеграция ClickHouse с Rails 

ClickHouse — мощная аналитическая база данных, идеально подходящая для обработки больших объемов данных. Так как интегрировать ClickHouse с Rails и выполнить простой запрос?

Установка ClickHouse

Сначала запустите Clickhouse Docker следующим образом:
docker run -d --name mac-clickhouse-server --ulimit nofile=262144:262144 yandex/clickhouse-server
  1. Установка https://clickhouse.com/docs/en/install
  2. # Gemfile gem 'clickhouse'

config/initializers/clickhouse.rb

Clickhouse.establish_connection(
  url: 'http://localhost:8123',
  database: 'default',
  user: 'default',
  password: ''
)

Пример запроса

Теперь можно выполнить простой запрос к ClickHouse из Rails. Например, получим все события за последний день:

# app/controllers/events_controller.rb
class EventsController < ApplicationController
  def index
    @events = Clickhouse.connection.execute("
      SELECT * FROM events WHERE created_at >= now() - INTERVAL 1 DAY
    ")
  end
end

Как использовать в моделях

# app/models/event.rb
class Event < Clickhouse::Base
  self.table_name = 'events'

  def self.recent
    execute("SELECT * FROM events WHERE created_at >= now() - INTERVAL 1 DAY")
  end

  def self.count_by_day
    execute("
      SELECT toDate(created_at) AS day, count(*) AS event_count
      FROM events
      GROUP BY day
      ORDER BY day
    ")
  end
end