[Clickhouse] 데이터의 수정과 삭제
Clickhouse는 기본적으로 빅데이터용 분산 DB이기 때문에삽입과 조회에 최적화되어있는 것이고, 수정과 삭제에 대해서는 그리 잘 구성이 되어있지는 않다.
그래도 물론 처리 자체는 가능하다. 기본 키나 정렬 키만 아니면 변경이 가능하다.
엔진
수정이 빈번하고 빠른 수정을 원한다면 MergeTree보단 ReplacingMergeTree 엔진을 사용하는 편이 낫다. 그리고 기본키로 Insert해서 덮어씌우는 것이다. 이 엔진은 중복되는 키 데이터에 대해서 자동으로 병합을 수행해준다.
신택스
PostgreSQL 호환이라고 말은 하는데, 호환 안되는게 더 많은 느낌이다.
일단 DBeaver 같은 SQL 에디터들에서는 기존 SQL들과 동일한 형태로 Update나 Delete를 수행할 수 있다.


이게 원래 규격에서 지원하는건지, 디비버에서 자동으로 변환을 수행하는 건지는 모르겠다.
문제는, 저걸 지원하지 않는 드라이버들이 있을 수 있다는 것이다. 오피셜 모듈인 clickhouse-go만 해도 저걸 지원하지 않는다.

권장하는 형태는 이렇다.
alter table을 앞에 달고 사용하는 이질적인 형태로 Update나 Delete를 사용한다.

수정도 잘 되고

삭제도 잘 된다.
근데 도대체 왜 이꼬라지로 만들어놓은거지?
참조
https://clickhouse.com/docs/en/sql-reference/statements/alter#mutations
https://clickhouse.com/docs/en/guides/developer/mutations