ClickHouse 삽입과 OLTP 데이터베이스의 차이
삽입 모범 사례
큰 배치 크기로 삽입하기
멱등적 재시도를 위해 일관된 배치를 유지하세요
-
- 데이터를 수신하는 노드에 문제가 있으면 삽입 쿼리가 시간 초과되거나(또는 더 구체적인 오류를 반환하거나) 확인 응답을 받지 못합니다.
-
- 노드가 데이터를 기록했더라도 네트워크 중단으로 인해 쿼리 전송자에게 확인 응답을 반환할 수 없으면, 전송자는 시간 초과 또는 네트워크 오류를 받게 됩니다.
MergeTree 테이블 또는 분산 테이블에 삽입
internal_replication=true를 설정하는 것을 권장합니다.
이렇게 하면 ClickHouse가 사용 가능한 레플리카 세그먼트에 데이터를 복제하고, 데이터의 최종 일관성을 보장합니다.
이러한 클라이언트 측 부하 분산이 불편하다면 분산 테이블을 통해 삽입할 수 있으며, 그러면 쓰기가 여러 노드에 분산됩니다. 이 경우에도 internal_replication=true를 설정하는 것이 좋습니다.
다만 이 방식은 쓰기가 먼저 분산 테이블이 있는 노드에 로컬로 수행된 후 세그먼트로 전송되어야 하므로 성능이 다소 떨어집니다.
작은 배치에는 비동기 삽입을 사용하세요
공식 ClickHouse 클라이언트 사용
네이티브 형식을 우선 사용하십시오
HTTP 인터페이스 사용
기본 예시
INSERT INTO TABLE 명령을 사용할 수 있습니다. “ClickHouse에서 테이블 생성하기” 빠른 시작 가이드에서 만든 테이블에 데이터를 삽입해 보겠습니다.
SELECT 쿼리를 실행합니다:
Postgres에서 데이터 로드하기
ClickPipes: PostgreSQL 데이터베이스 복제를 위해 특별히 설계된 ETL 도구입니다. 다음 두 환경에서 모두 사용할 수 있습니다.- ClickHouse Cloud - ClickPipes의 관리형 수집 서비스를 통해 사용할 수 있습니다.
- 자가 관리형 - PeerDB 오픈소스 프로젝트를 통해 사용할 수 있습니다.
- PostgreSQL 테이블 엔진을 사용해 이전 예시에서처럼 데이터를 직접 읽을 수 있습니다. 일반적으로 timestamp와 같은 알려진 워터마크를 기준으로 한 배치 복제로 충분하거나, 일회성 마이그레이션인 경우에 적합합니다. 이 접근 방식은 수천만 행 규모까지 확장할 수 있습니다. 더 큰 데이터셋을 마이그레이션하려는 경우, 데이터 청크를 각각 처리하는 여러 요청으로 나누는 방식을 고려해야 합니다. 각 청크에 대해 파티션을 최종 테이블로 옮기기 전에 스테이징 테이블을 사용할 수 있습니다. 이렇게 하면 실패한 요청을 재시도할 수 있습니다. 이 대량 로드 전략에 관한 자세한 내용은 여기에서 확인하십시오.
- PostgreSQL 데이터는 CSV 형식으로 내보낼 수 있습니다. 그런 다음 로컬 파일에서 또는 테이블 함수를 사용해 객체 스토리지를 통해 ClickHouse에 삽입할 수 있습니다.
대용량 데이터셋 삽입에 도움이 필요하신가요?대용량 데이터셋을 삽입하는 데 도움이 필요하거나 ClickHouse Cloud로 데이터를 가져오는 중 오류가 발생하면 support@clickhouse.com으로 문의해 주십시오. 지원해 드립니다.
명령줄에서 데이터 삽입
- ClickHouse를 설치했습니다
clickhouse-server가 실행 중입니다wget,zcat,curl을 사용할 수 있는 터미널이 있습니다
clickhouse-client를 사용해 명령줄에서 CSV 파일을 ClickHouse에 삽입하는 방법을 설명합니다. 배치 모드의 clickhouse-client를 사용해 명령줄로 데이터를 삽입하는 방법에 대한 자세한 정보와 예시는 “Batch mode”를 참조하십시오.
이 예시에서는 Hacker News 데이터셋을 사용합니다. 이 데이터셋에는 Hacker News 데이터 2,800만 행이 포함되어 있습니다.
CSV 다운로드
다음 명령을 실행하여 공개 S3 버킷에서 데이터셋의 CSV 버전을 다운로드하십시오:테이블 생성
clickhouse-server가 실행 중이면, 배치 모드의 clickhouse-client를 사용해 명령줄에서 직접 다음 스키마로 빈 테이블을 생성할 수 있습니다:_EOF)를 작은따옴표로 감쌌습니다. 작은따옴표가 없으면 컬럼 이름을 둘러싼 백틱을 이스케이프해야 합니다.명령줄에서 데이터 삽입
이제 다음 명령을 실행하여 앞에서 다운로드한 파일의 데이터를 테이블에 삽입하십시오:gzip, zcat 또는 이와 비슷한 도구로 파일의 압축을 해제한 다음, 압축 해제된 데이터를 적절한 INSERT 문과 FORMAT을 사용해 clickhouse-client로 파이프해야 합니다.대화형 모드에서
clickhouse-client로 데이터를 삽입할 때는 COMPRESSION 절을 사용해 삽입 시 ClickHouse가 압축 해제를 처리하도록 할 수 있습니다. ClickHouse는 파일 확장자를 기준으로 압축 유형을 자동으로 감지할 수 있으며, 압축 유형을 명시적으로 지정할 수도 있습니다.이 경우 삽입 쿼리는 다음과 같습니다:hackernews 테이블의 행 수를 확인할 수 있습니다:curl을 사용해 명령줄에서 데이터 삽입
앞선 단계에서는 먼저wget을 사용해 CSV 파일을 로컬 머신에 다운로드했습니다. 단일 명령으로 원격 URL에서 직접 데이터를 삽입하는 것도 가능합니다.다음 명령을 실행하여 hackernews 테이블의 데이터를 비우십시오. 그러면 로컬 머신에 다운로드하는 중간 단계 없이 데이터를 다시 삽입할 수 있습니다: