데이터 업데이트

데이터 업데이트 (Data updates)

Apache Druid에서 기존 데이터를 덮어쓰는(overwrite) 방법과 reindexing으로 기존 데이터를 다시 처리하는 방법을 알아봐요. Druid에는 UPDATE나 ALTER TABLE 같은 문이 없어서, 데이터 변경은 배치 ingestion 메커니즘을 재사용해요.

출처: 문서

본문

덮어쓰기 (Overwrite)

Apache Druid는 데이터를 시간 청크 단위로 파티셔닝해 저장하고, 시간 범위를 사용해 기존 데이터를 덮어쓰는 것을 지원해요. 교체 시간 범위 밖의 데이터는 건드리지 않아요. 기존 데이터의 덮어쓰기는 batch ingestion과 같은 메커니즘으로 수행돼요.

예를 들어:

두 경우 모두 Druid의 원자적 업데이트(atomic update) 메커니즘 덕분에, 쿼리는 시간 청크 단위로 기존 데이터에서 새 데이터로 끊김 없이 전환돼요.

같은 데이터소스의 같은 시간 범위에서는 ingestion과 overwrite를 동시에 실행할 수 없어요. 데이터소스의 특정 시간 범위에 대해 overwrite 작업이 진행 중이면, 그 시간 범위의 새 ingestion은 대기열에 쌓여요. 다른 시간 범위의 ingestion은 평소처럼 진행돼요. 읽기 전용 쿼리도 데이터의 기존 버전을 사용해 평소처럼 진행돼요.

info

Druid는 기본 키(primary key)에 의한 단일 레코드 업데이트를 지원하지 않아요.

Reindex

Reindexing은 새 데이터의 소스가 기존 데이터 그 자체인 ingestion이에요. 스키마 변경, 데이터 재파티셔닝, 원치 않는 데이터 필터링, 기존 데이터 보강 등에 사용돼요. 원자적 업데이트와 locking 측면에서 다른 일반 ingestion처럼 동작해요.

native batch로 reindex하려면 druid input source를 사용해요. 필요하다면 reindexing 작업 중 데이터를 필터링하거나 수정하도록 transformSpec을 쓸 수 있어요.

SQL로 reindex하려면 SELECT ... FROM <table>과 함께 REPLACE <table> OVERWRITE를 사용하세요. (Druid에는 UPDATE나 ALTER TABLE 문이 없어요.) reindexing 작업 중 데이터를 필터링·수정·보강하려면 어떤 SQL SELECT 쿼리든 사용할 수 있어요.

Rolled-up 데이터소스

Rolled-up 데이터소스는 재작성 없이 append만으로도 효과적으로 업데이트할 수 있어요. 기존 행과 동일한 dimension 집합을 가진 행을 append하면, 집계 연산자를 사용하는 쿼리가 쿼리 시점에 그 두 행을 자동으로 결합해요.

나중에 이 일치하는 행들을 물리적으로 결합하고 싶다면 Compaction 또는 automatic compaction으로 백그라운드에서 segment를 다시 써서 처리할 수 있어요.

Lookups

값을 자주 업데이트해야 하는 dimension이 있다면 먼저 lookups을 사용해 보세요. lookups의 전형적인 사용 사례는 Druid segment에 ID dimension이 저장되어 있고, 이 ID dimension을 주기적으로 업데이트해야 할 수 있는 사람이 읽을 수 있는 문자열로 매핑하고 싶을 때예요.

더 알아보기 (Learn more)

  • Batch ingestion — 덮어쓰기와 reindexing이 재사용하는 배치 ingestion 메커니즘을 알아봐요.
  • Data deletion — reindexing과 필터로 특정 레코드를 삭제하는 방법을 살펴봐요.
  • Compaction — rolled-up 데이터소스를 물리적으로 결합하는 방법을 알아봐요.
  • Lookups — ID를 사람이 읽을 수 있는 문자열로 매핑하는 방법을 살펴봐요.