> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickHouse 데이터 업데이트 및 삭제

> ClickHouse에서 업데이트 및 삭제 작업을 수행하는 방법을 설명합니다

<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>

<div className="mt-2 flex flex-wrap gap-2">
  <Badge size="lg" color="blue">데이터 웨어하우징</Badge>
  <Badge size="lg" color="orange">OSS</Badge>
</div>

ClickHouse는 대용량 분석 워크로드에 맞게 설계되었지만, 일부 경우에는 기존 데이터를 수정하거나
삭제할 수 있습니다. 이러한 작업은 "뮤테이션"이라고 하며 `ALTER TABLE` 명령을 사용해 수행됩니다.

<Tip>
  업데이트를 자주 수행해야 한다면 ClickHouse의 [중복 제거](/ko/concepts/features/operations/insert/deduplication) 사용을 고려하십시오. 이 기능을 사용하면 뮤테이션 이벤트를 생성하지 않고도 행을 업데이트하거나
  삭제할 수 있습니다. 또는 [경량 업데이트](/ko/reference/statements/update)
  또는 [경량한 삭제](/ko/concepts/features/operations/delete/lightweight-delete)
  를 사용하십시오.
</Tip>

<div id="updating-data">
  ## 데이터 업데이트
</div>

테이블의 행을 업데이트하려면 `ALTER TABLE...UPDATE` 명령을 사용하십시오:

```sql theme={null}
ALTER TABLE [<database>.]<table> UPDATE <column> = <expression> WHERE <filter_expr>
```

`<expression>`은 `<filter_expr>`를 만족하는 행에서 해당 컬럼의 새 값입니다. `<expression>`은 컬럼과 동일한 데이터 형식이어야 하며, 또는 `CAST` 연산자를 사용해 동일한 데이터 형식으로 변환할 수 있어야 합니다. `<filter_expr>`는 데이터의 각 행에 대해 `UInt8` 값(0 또는 0이 아닌 값)을 반환해야 합니다. 여러 `UPDATE <column>` SQL 문은 쉼표로 구분해 하나의 `ALTER TABLE` 명령에 결합할 수 있습니다.

**예시**:

1. 다음과 같은 뮤테이션을 사용하면 딕셔너리 조회를 통해 `visitor_id`를 새 값으로 업데이트할 수 있습니다.

   ```sql theme={null}
   ALTER TABLE website.clicks
   UPDATE visitor_id = getDict('visitors', 'new_visitor_id', visitor_id)
   WHERE visit_date < '2022-01-01'
   ```

2. 하나의 명령으로 여러 값을 수정하는 것이 여러 명령을 실행하는 것보다 더 효율적일 수 있습니다.

   ```sql theme={null}
   ALTER TABLE website.clicks
   UPDATE url = substring(url, position(url, '://') + 3), visitor_id = new_visit_id
   WHERE visit_date < '2022-01-01'
   ```

3. 세그먼트로 나뉜 테이블의 경우 `ON CLUSTER`에서 뮤테이션을 실행할 수 있습니다.

   ```sql theme={null}
   ALTER TABLE clicks ON CLUSTER main_cluster
   UPDATE click_count = click_count / 2
   WHERE visitor_id ILIKE '%robot%'
   ```

<Note>
  프라이머리 키 또는 정렬 키의 일부인 컬럼은 업데이트할 수 없습니다.
</Note>

<div id="deleting-data">
  ## 데이터 삭제
</div>

행을 삭제하려면 `ALTER TABLE` 명령을 사용하십시오:

```sql theme={null}
ALTER TABLE [<database>.]<table> DELETE WHERE <filter_expr>
```

`<filter_expr>`는 각 행에 대해 UInt8 값을 반환해야 합니다.

**예시**

1. 컬럼 값이 값 배열에 포함된 레코드를 삭제합니다:
   ```sql theme={null}
   ALTER TABLE website.clicks DELETE WHERE visitor_id in (253, 1002, 4277)
   ```

2. 이 쿼리는 무엇을 변경합니까?
   ```sql theme={null}
   ALTER TABLE clicks ON CLUSTER main_cluster DELETE WHERE visit_date < '2022-01-02 15:00:00' AND page_id = '573'
   ```

<Note>
  테이블의 모든 데이터를 삭제하려면 `TRUNCATE TABLE [<database].]<table>` 명령을 사용하는 것이 더 효율적입니다. 이 명령은 `ON CLUSTER`에서도 실행할 수 있습니다.
</Note>

자세한 내용은 [`DELETE` SQL 문](/ko/reference/statements/delete) 문서 페이지를 참조하십시오.

<div id="lightweight-deletes">
  ## 경량한 삭제
</div>

행을 삭제하는 또 다른 방법은 `DELETE FROM` 명령을 사용하는 것이며, 이를 **경량한 삭제**라고 합니다. 삭제된 행은 즉시 삭제된 것으로 표시되고, 이후 실행되는 모든 쿼리에서 자동으로 필터링되므로 파트 병합을 기다리거나 `FINAL` 키워드를 사용할 필요가 없습니다. 데이터 정리는 백그라운드에서 비동기적으로 수행됩니다.

```sql theme={null}
DELETE FROM [db.]table [ON CLUSTER cluster] [WHERE expr]
```

예를 들어, 다음 쿼리는 `Title` 컬럼에 `hello` 문자열이 포함된 `hits` 테이블의 모든 행을 삭제합니다:

```sql theme={null}
DELETE FROM hits WHERE Title LIKE '%hello%';
```

경량한 삭제에 관한 몇 가지 참고 사항입니다:

* 이 기능은 `MergeTree` 테이블 엔진 계열에서만 사용할 수 있습니다.
* 경량한 삭제는 기본적으로 동기식으로 동작하며, 모든 레플리카가 삭제를 처리할 때까지 대기합니다. 이 동작은 [`lightweight_deletes_sync` 설정](/ko/reference/settings/session-settings#lightweight_deletes_sync)으로 제어됩니다.

<div className="mt-8">
  <a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
