ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Clickhouse] Docker 로 Clickhouse 구현하기
    Database/Clickhouse 2024. 2. 17. 17:05
    728x90
    반응형

     

    - 목차

     

    들어가며.

    이번 글에서는 Docker 를 활용해서 Clickhouse 를 구축하는 글을 작성하려고 합니다.

    사용할 Docker Image 는 bitnami/clickhouse 이미지입니다.

    간단한 MergeTree 엔진의 Table 을 생성하고 데이터를 취급하는 예시들을 작성할 예정입니다.

     

    bitnami/clickhouse 이미지를 사용하는 이유는 추후에 Kubernetes 에서 Clickhouse 를 구축하는 상황에서

    Bitnami Helm Repo 의 Clickhouse Chart 가 사용됩니다.

    그래서 yandex 를 포함한 다른 배포버전보다 bitnami 를 선택하였습니다.

     

    Clickhouse Docker Container 구현하기.

    아래 명령어를 통해서 Clickhouse Container 를 실행할 수 있습니다.

    그리고 ALLOW_EMPTY_PASSWORD 환경변수를 yes 로 설정하여 password 입력 절차를 생략하였습니다.

    docker run -d --name clickhouse \
    -e ALLOW_EMPTY_PASSWORD=yes \
    -p 8123:8123 \
    -p 9000:9000 \
    bitnami/clickhouse:23.3.19

     

     

    아래의 명령어는 Clickhouse Client Shell 을 활성화시키는 명령어입니다.

    clickhouse-client 명령어를 실행함으로써 Client Shell 이 활성화됩니다.

    docker exec -it clickhouse clickhouse-client
    ClickHouse client version 23.3.19.32 (official build).
    Connecting to localhost:9000 as user default.
    Connected to ClickHouse server version 23.3.19 revision 54462.
    
    Warnings:
     * Linux is not using a fast clock source. Performance can be degraded. Check /sys/devices/system/clocksource/clocksource0/current_clocksource
     * Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled
     * Effective user of the process (1001) does not match the owner of the data (clickhouse).
    
    0f006a52fe43 :)

     

    MergeTree 엔진 테이블 생성하기.

    아래 SQL DDL 은 MergeTree 엔진의 테이블을 생성하는 쿼리문입니다.

    user_actions 이라는 이름의 테이블을 생성하였구요.

    user_actions 테이블은 사용자의 행동정보를 저장합니다.

    user 는 행동 데이터의 행위자 정보, action 은 행동 데이터의 종류이고, acted_at 에 데이터의 생성 시각 정보를 담습니다.

    create table default.user_actions (
        user String,
        action String,
        acted_at DateTime
    ) engine=MergeTree()
    order by acted_at
    partition by toYYYYMM(acted_at);

     

    데이터 생성하기.

    insert into default.user_actions(user, action, acted_at)
    values ('Andy', 'Visit', '2023-01-01 00:00:00'),
    ('Brian', 'Buy', '2023-01-01 00:01:00'),
    ('Dennis', 'View', '2023-01-01 00:02:00'),
    ('Chris', 'View', '2023-01-01 00:03:00'),
    ('Emma', 'Buy', '2023-01-01 00:04:00'),
    ('Fabian', 'Cart', '2023-01-01 00:05:00'),
    ('Gareth', 'RemoveCart', '2023-01-01 00:06:00'),
    ('Hayden', 'Cart', '2023-01-01 00:07:00'),
    ('Illa', 'View', '2023-01-01 00:08:00')
    Query id: 062230b2-8ae8-4ff2-ac97-b5f44f37dfae
    
    Ok.
    
    9 rows in set. Elapsed: 0.002 sec.

     

    데이터 조회하기.

    select * from user_actions
    Query id: 2bebd066-7976-47ea-885e-1b341405837e
    
    ┌─user───┬─action─────┬────────────acted_at─┐
    │ Andy   │ Visit      │ 2023-01-01 00:00:00 │
    │ Brian  │ Buy        │ 2023-01-01 00:01:00 │
    │ Dennis │ View       │ 2023-01-01 00:02:00 │
    │ Chris  │ View       │ 2023-01-01 00:03:00 │
    │ Emma   │ Buy        │ 2023-01-01 00:04:00 │
    │ Fabian │ Cart       │ 2023-01-01 00:05:00 │
    │ Gareth │ RemoveCart │ 2023-01-01 00:06:00 │
    │ Hayden │ Cart       │ 2023-01-01 00:07:00 │
    │ Illa   │ View       │ 2023-01-01 00:08:00 │
    └────────┴────────────┴─────────────────────┘
    
    9 rows in set. Elapsed: 0.004 sec.

     

     

     

     

    반응형
Designed by Tistory.