| 데이터 저장 및 위치 | 소스 테이블에 INSERT할 때 삽입 트리거처럼 동작하며, 결과를 별도의 명시적인 대상 테이블에 저장합니다. | 프로젝션은 최적화된 데이터 레이아웃을 생성하며, 이는 물리적으로 기본 테이블 데이터와 함께 저장되고 사용자에게는 보이지 않습니다. |
| 업데이트 메커니즘 | 소스 테이블에 대한 INSERT 시 동기식으로 동작합니다(증분형 materialized view의 경우). 참고: 갱신 가능 구체화 뷰를 사용하면 예약 실행할 수도 있습니다. | 기본 테이블에 INSERT된 후 백그라운드에서 비동기식으로 업데이트됩니다. |
| 쿼리 상호작용 | materialized view를 사용하려면 대상 테이블을 직접 쿼리해야 하므로, 쿼리를 작성할 때 materialized view의 존재를 알고 있어야 합니다. | 프로젝션은 ClickHouse의 쿼리 옵티마이저가 자동으로 선택하며, 사용자가 이를 활용하기 위해 프로젝션이 있는 테이블에 대한 쿼리를 수정할 필요가 없다는 점에서 투명합니다. 25.6 버전부터는 둘 이상의 프로젝션으로 필터링하는 것도 가능합니다. |
UPDATE / DELETE 처리 | materialized view는 소스 테이블에 대한 삽입 트리거로만 동작할 뿐 소스 테이블 자체를 인식하지 못하므로, 소스 테이블의 UPDATE 또는 DELETE 작업에 자동으로 반응하지 않습니다. 이로 인해 소스 테이블과 대상 테이블 사이에 데이터가 오래될 수 있으며, 우회 방법이나 주기적인 전체 갱신이 필요합니다. (갱신 가능 구체화 뷰를 통해). | 기본적으로 DELETED 행과 호환되지 않습니다(특히 경량한 삭제). lightweight_mutation_projection_mode (v24.7+)를 사용하면 호환성을 활성화할 수 있습니다. |
JOIN 지원 | 예. 갱신 가능 구체화 뷰는 복잡한 비정규화에 사용할 수 있습니다. 증분형 materialized view는 가장 왼쪽 테이블에 대한 삽입에서만 트리거됩니다. | 아니요. 프로젝션 정의 내에서는 구체화된 데이터를 필터링하기 위한 JOIN 작업을 지원하지 않습니다. 그러나 프로젝션이 있는 테이블을 조인하는 쿼리는 정상적으로 동작하며, 프로젝션은 개별 테이블 접근을 최적화합니다. |
정의에서의 WHERE 절 | 예. 구체화 전에 데이터를 필터링하기 위해 WHERE 절을 포함할 수 있습니다. | 아니요. 프로젝션 정의 내에서는 구체화된 데이터를 필터링하기 위한 WHERE 절을 지원하지 않습니다. |
| 체이닝 기능 | 예. 하나의 materialized view 대상 테이블을 다른 materialized view의 소스로 사용할 수 있으므로 다단계 파이프라인을 구성할 수 있습니다. | 아니요. 프로젝션은 체이닝할 수 없습니다. |
| 적용 가능한 테이블 엔진 | 다양한 소스 테이블 엔진과 함께 사용할 수 있지만, 대상 테이블은 일반적으로 MergeTree 계열입니다. | MergeTree 계열 테이블 엔진에서만 사용할 수 있습니다. |
| 장애 처리 | 데이터 삽입 중 장애가 발생하면 대상 테이블의 데이터가 유실되어 잠재적인 불일치가 발생할 수 있습니다. | 장애는 백그라운드에서 조용히 처리됩니다. 쿼리는 구체화된 파트와 구체화되지 않은 파트를 자연스럽게 함께 사용할 수 있습니다. |
| 운영 오버헤드 | 명시적인 대상 테이블 생성이 필요하며, 종종 수동 백필도 필요합니다. UPDATE/DELETE와의 일관성을 관리하면 복잡성이 증가합니다. | 프로젝션은 자동으로 유지되고 동기화 상태도 자동으로 유지되므로 일반적으로 운영 부담이 더 낮습니다. |
FINAL 쿼리 호환성 | 일반적으로 호환되지만, 대상 테이블에서 GROUP BY가 필요한 경우가 많습니다. | FINAL 쿼리와는 작동하지 않습니다. |
| Lazy materialization | 예. | materialization 기능을 사용할 때는 프로젝션 호환성 문제를 확인해야 합니다. query_plan_optimize_lazy_materialization = false를 설정해야 할 수 있습니다. |
| 병렬 레플리카 | 예. | 아니요. |
optimize_read_in_order | 예. | 예. |
| 경량 업데이트 및 삭제 | 예. | 아니요. |