본문으로 건너뛰기
최종 수정: 에

데이터 적재 개요

Apache Doris는 다양한 소스의 데이터를 데이터베이스에 쓸 수 있도록 여러 데이터 적재 및 통합 방식을 제공합니다. 이 문서에서는 일반적인 업무 시나리오를 바탕으로 실시간 쓰기, 스트리밍 동기화, 배치 데이터 적재, 외부 데이터 소스 통합이라는 네 가지 범주에서 가장 적합한 방식을 선택하는 방법을 설명합니다.

빠른 안내​

데이터 소스와 데이터 반영 속도 요구 사항에 따라 다음 표에서 권장 데이터 적재 방식을 빠르게 찾을 수 있습니다.

업무 시나리오데이터 소스권장 데이터 적재 방식
애플리케이션 실시간 쓰기(극소량, 5분마다)JDBC 클라이언트JDBC INSERT
애플리케이션의 높은 동시성 또는 고빈도 소규모 배치 쓰기JDBC / HTTPGroup Commit + JDBC INSERT 또는 Stream Load
애플리케이션의 고처리량 쓰기HTTPStream Load
실시간 데이터 스트림 수집FlinkFlink Doris Connector
실시간 메시지 큐 수집KafkaRoutine Load 또는 Doris Kafka Connector
트랜잭션 데이터베이스 실시간 동기화(외부 구성 요소 불필요)MySQL / PostgreSQLStreaming Job 연속 데이터 적재
트랜잭션 데이터베이스 CDC 동기화MySQL / PostgreSQL 등Flink CDC 또는 DataX
객체 스토리지 연속 데이터 적재(증분 파일 자동 데이터 적재)S3Streaming Job 연속 데이터 적재
객체 스토리지 / HDFS 파일 배치 데이터 적재S3 / OSS / HDFSBroker Load 또는 INSERT INTO SELECT
로컬 파일 배치 데이터 적재로컬 디스크Stream Load 또는 Doris Streamloader
외부 데이터 소스(데이터 레이크 / 외부 테이블) 쿼리 및 데이터 적재Hive / Iceberg / JDBC 등Catalog + INSERT INTO SELECT

Doris에서 각 데이터 적재 작업은 기본적으로 암시적 트랜잭션입니다. 트랜잭션에 관한 자세한 내용은 트랜잭션을 참조하세요.

시나리오별 데이터 적재 방식 선택​

실시간 쓰기: 애플리케이션에서 직접 쓰기​

애플리케이션이 HTTP 또는 JDBC를 통해 Doris 테이블에 실시간으로 데이터를 쓰는 시나리오에 적용됩니다. 실시간 분석과 쿼리가 필요한 업무에서 주로 사용합니다.

  • 극소량의 데이터(약 5분에 한 번): JDBC INSERT를 사용하여 데이터를 씁니다.
  • 높은 동시성 또는 빈번한 쓰기(동시 실행 수가 20을 초과하거나 1분 이내에 여러 번 쓰는 경우): Group Commit을 활성화하고 JDBC INSERT 또는 Stream Load와 함께 사용합니다.
  • 고처리량 쓰기: Stream Load를 사용하여 HTTP 프로토콜로 데이터를 씁니다.

스트리밍 동기화: 실시간 데이터 스트림 수집​

실시간 데이터 스트림(Flink, Kafka 또는 트랜잭션 데이터베이스 CDC 등)을 통해 데이터를 Doris 테이블에 지속적으로 동기화하는 시나리오에 적용됩니다.

  1. Flink 실시간 데이터 스트림

    Flink Doris Connector를 사용하여 Flink 실시간 데이터 스트림을 Doris 테이블에 씁니다.

  2. Kafka 실시간 데이터 스트림

    Routine Load와 Doris Kafka Connector 중에서 선택합니다. 차이점은 다음과 같습니다.

    방식데이터 흐름 방향지원 형식
    Routine LoadDoris가 Kafka에서 데이터를 능동적으로 가져옴csv, json
    Kafka ConnectorKafka가 Doris로 데이터를 능동적으로 전송함avro, json, csv, protobuf
  3. 트랜잭션 데이터베이스 CDC 동기화

    Flink CDC 또는 DataX를 사용하여 트랜잭션 데이터베이스의 CDC 데이터 스트림을 Doris에 씁니다.

  4. Streaming Job 연속 데이터 적재(외부 구성 요소 불필요)

    Doris에 내장된 Streaming Job을 통해 Flink나 Kafka 같은 외부 구성 요소에 의존하지 않고 MySQL, PostgreSQL, S3 등의 소스에서 데이터를 지속적으로 읽어 Doris에 쓸 수 있습니다. 두 가지 동기화 방식을 지원합니다.

    동기화 방식내부 동작 메커니즘테이블 자동 생성처리 보장 수준일반적인 시나리오
    SQL Mapping SyncJob + TVF (INSERT INTO SELECT)사전 생성 필요exactly-once열 가지치기, 필드 이름 변경, 타입 변환 또는 조건부 필터링이 필요한 경우
    Auto Table Creation SyncJob + 네이티브 데이터베이스 전체 DDL첫 실행 시 자동 생성at-least-once데이터베이스 전체 또는 테이블 그룹을 미러 복제하고, 다운스트림 테이블 스키마가 업스트림 스키마를 자동으로 따르는 경우

배치 데이터 적재: 외부 스토리지의 파일 데이터 적재​

외부 스토리지 시스템(객체 스토리지, HDFS, 로컬 파일 또는 NAS 등)의 파일을 Doris 테이블에 배치로 데이터 적재하는 비실시간 시나리오에 적용됩니다.

  • 객체 스토리지 / HDFS 파일: Broker Load를 사용하여 Doris에 데이터를 씁니다.
  • 객체 스토리지 / HDFS / NAS 파일(동기 또는 비동기): INSERT INTO SELECT를 사용하여 동기 방식으로 데이터를 씁니다. 비동기 실행이 필요하면 JOB 스케줄링과 함께 사용합니다.
  • 로컬 파일: Stream Load 또는 Doris Streamloader를 사용하여 Doris에 데이터를 씁니다.

외부 데이터 소스 통합: Catalog 연합 쿼리 및 데이터 적재​

외부 데이터 소스(Hive, JDBC 또는 Iceberg 등)와 통합하여 외부 데이터를 쿼리하고 필요에 따라 Doris 테이블에 데이터 적재하는 시나리오에 적용됩니다.

  • Catalog를 생성하여 외부 데이터 소스의 데이터를 읽습니다.
  • INSERT INTO SELECT를 사용하여 외부 데이터 소스의 데이터를 Doris에 동기 방식으로 씁니다. 비동기 실행이 필요하면 JOB 스케줄링과 함께 사용합니다.

데이터 적재 중 일부 열 업데이트​

Doris는 데이터 적재 중 일부 열 업데이트를 지원합니다. 이를 통해 모든 열의 값을 제공하지 않고도 테이블의 특정 열만 업데이트할 수 있습니다. 이 기능은 특히 다음과 같은 시나리오에서 유용합니다.

  • 열이 많은 테이블에서 소수의 필드 업데이트
  • 증분 업데이트 수행(일부 열에 대한 Upsert)

Unique Key 테이블과 Aggregate 테이블에서 일부 열을 업데이트하는 방법은 열 업데이트를 참조하세요.

데이터 적재 방식 개요​

Doris의 데이터 적재에는 데이터 소스, 데이터 형식, 데이터 적재 방식, 오류 데이터 처리, 데이터 변환, 트랜잭션 등 여러 측면이 관련됩니다. 다음 표는 각 방식에 적합한 시나리오, 지원 파일 형식, 데이터 적재 모드를 요약한 것입니다.

데이터 적재 방식사용 사례지원 파일 형식데이터 적재 모드
Stream Load로컬 파일 데이터 적재 또는 애플리케이션 쓰기csv, json, parquet, orc동기
Broker Load객체 스토리지, HDFS 등에서 데이터 적재csv, json, parquet, orc비동기
INSERT INTO VALUESJDBC 등의 인터페이스를 통한 데이터 적재SQL동기
INSERT INTO SELECT외부 테이블, 객체 스토리지 또는 HDFS에서 데이터 적재SQL동기
Routine LoadKafka에서 실시간 데이터 적재csv, json비동기
MySQL Load로컬 데이터 적재csv동기
Group Commit고빈도 소규모 배치 데이터 적재사용하는 데이터 적재 방식에 따라 다름-
Streaming JobMySQL, PostgreSQL, S3 등의 소스에서 연속 데이터 적재데이터 소스에 따라 다름비동기

자주 묻는 질문​

Q1: 동시성이 높은 소규모 배치 쓰기에는 어떤 데이터 적재 방식을 선택해야 하나요?

Group Commit을 활성화하고 JDBC INSERT 또는 Stream Load와 함께 사용하세요. 동시 실행 수가 20을 초과하거나 1분 이내에 여러 번 쓰는 경우 Group Commit으로 데이터 적재 부하를 크게 줄일 수 있습니다.

Q2: Routine Load와 Doris Kafka Connector는 어떤 차이가 있나요?

  • Routine Load: Doris가 Kafka에서 데이터를 능동적으로 가져오는 작업을 스케줄링합니다. csv와 json 형식을 지원합니다.
  • Doris Kafka Connector: Kafka가 Doris로 데이터를 능동적으로 전송합니다. avro, json, csv, protobuf 형식을 지원합니다.

Q3: 로컬 파일을 Doris에 데이터 적재하려면 어떻게 하나요?

Stream Load(중소형 파일에 적합) 또는 Doris Streamloader(대용량 파일을 배치로 처리하는 시나리오에 적합)를 사용할 수 있습니다.

Q4: Hive나 Iceberg 같은 외부 데이터 소스의 데이터를 Doris에 데이터 적재할 수 있나요?

네. 먼저 Catalog를 통해 외부 데이터 소스에 연결한 다음, INSERT INTO SELECT를 사용하여 데이터를 Doris에 동기 방식으로 씁니다. 비동기 실행이 필요하면 JOB 스케줄링과 함께 사용합니다.

Q5: 데이터 적재 시 트랜잭션이 보장되나요?

네. Doris에서 각 데이터 적재 작업은 기본적으로 암시적 트랜잭션입니다. 자세한 내용은 트랜잭션을 참조하세요.

Q6: Streaming Job과 Flink CDC 중에서 어떻게 선택하나요?

  • Streaming Job: Flink나 Kafka 같은 외부 구성 요소에 의존하지 않는 Doris 내장 기능입니다. MySQL과 PostgreSQL에 대해 SQL Mapping Sync와 Auto Table Creation Sync를 지원하며, S3에서 연속 데이터 적재도 지원합니다. Auto Table Creation Sync는 다운스트림 테이블을 자동으로 생성하고, SQL Mapping Sync는 exactly-once 시맨틱을 제공하며 SQL 처리를 지원합니다.
  • Flink CDC: Flink 클러스터를 배포해야 합니다. 이미 Flink 스트림 처리 시스템을 갖추고 있거나, 복잡한 ETL 처리가 필요하거나, 여러 대상으로 동기화해야 하는 시나리오에 적합합니다.

MySQL이나 PostgreSQL 데이터를 Doris에 지속적으로 동기화하기만 하면 되고 외부 스트림 처리 요구 사항이 없다면 Streaming Job을 우선 선택하세요. 자세한 내용은 연속 데이터 적재 개요를 참조하세요.