🏚️

ClickHouseに入門してみた

に公開

ClickHouseとは

リアルタイムデータウェアハウスです。OLAPなのに超高速でコストがとても安いというのが魅力なサービスになります。インテグレーションも豊富で便利ということに尽きます。
似た製品はBigQueryRedshiftSnowflakeあたりです。ログ補完とビジュアライズという文脈で使うのであればDatadogNewRelicの代替製品にもなり得ます。
速度と料金は多くの場合上回るというメリットがあるのですが、彼らほど柔軟性に富んではいないため技術的ハードルと運用コストがデメリットになります。


※公式サイトを引用

https://clickhouse.com/jp

ドキュメント

公式サイトのドキュメントがかなりきれいにまとまっており一通りできます。まずは、目を通すと良いでしょう。
https://clickhouse.com/docs

Docker Composeで動作確認してみる

本番運用であれば、Cloud版を利用するのが良いでしょう。動作検証レベルではOSS版が良いと思います。ClickHouseはデータストア(とデータ操作UI)の提供になりますのでグラフなどのビジュアライズは別に用意する必要があります。ClickHouse専用コネクタが準備されているものは多数存在しますが、もっともメジャーなGrafanaで確認していこうと思います。

docker-compose.yaml
services:
  clickhouse:
    image: clickhouse/clickhouse-server:latest
    container_name: clickhouse
    environment:
      CLICKHOUSE_DB: mydb
      CLICKHOUSE_USER: myuser
      CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
      CLICKHOUSE_PASSWORD: password
    ports:
      - "8123:8123" # http
      - "9001:9000" # native tcp, 9000 portが私の環境では使用済だったので9001に振り替えた
    volumes:
      - ./click-data/var/lib/clickhouse:/var/lib/clickhouse
      - ./click-data/var/log/clickhouse-server:/var/log/clickhouse-server
    ulimits:
      nproc: 65535
      nofile:
        soft: 262144
        hard: 262144
    networks:
      - clickhouse-grafana

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_INSTALL_PLUGINS=grafana-clickhouse-datasource
      - GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=grafana-clickhouse-datasource
    ports:
      - "3000:3000"
    volumes:
      - grafana-storage:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    depends_on:
      - clickhouse
    networks:
      - clickhouse-grafana
    user: "472"  # Grafanaの標準ユーザーID

networks:
  clickhouse-grafana:
    driver: bridge

volumes:
  grafana-storage:

docker composeを起動しましょう

docker compose up -d

起動できましたら、ClickHouseにアクセスしてデータを投入していきます。8123ポートでDBアクセスできますのでアクセスしていきましょう。

WEB SQL UIボタンでSQL実行画面にはいることができます。

※もしローカルのツールから接続が良い場合は、DBaverが専用の接続を持っていますのでお勧めします。

DBを早速追加して、

CREATE DATABASE IF NOT EXISTS mydb

サンプルテーブル、データを作成します。公式にたくさんのサンプルがありますので選択するのがよいでしょう。コマンドも公式サイトに記載があるため、省略します。
https://clickhouse.com/docs/getting-started/example-datasets

9000ポートへアクセスするとGrafanaでデータを可視化できます。ClickHouseのプラグインを導入済みになっていると思いますので、SQLでデータを抽出しグラフ化すればOKです。大量データが瞬時にグラフ化できたことが確認できたと思います。

GitHub(サンプル)

Docker ComposeなどはGitHubへ保存しておきましたので必要に応じで参照してください。Grafanaの設定も入っています。
https://github.com/icck/clickhouse-docker-compose

さいごに

高速で安価なデータ分析基盤に興味がある方は、まずはローカルでClickHouseを触ってみるのがおすすめです。数百万件規模のデータを瞬時にクエリ・グラフ化できる性能は、初回の検証でも十分にインパクトを感じられるはずです。

Discussion