> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> BladePipe 데이터 파이프라인을 사용해 데이터를 ClickHouse로 스트리밍합니다

# BladePipe를 ClickHouse에 연결

export const PartnerBadge = () => {
  return <div className="PartnerBadge">
            <div className="PartnerBadgeIcon">
                <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <polyline points="12.5 9.5 10 12 6 11 2.5 8.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1" />
                    <polyline points="4.54 4.41 8 3.5 11.46 4.41" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1" />
                    <path d="M2.15,3.78 L0.55,6.95 A0.5,0.5 0,0,0 0.77,7.62 L2.5,8.5 L4.54,4.41 L2.82,3.55 A0.5,0.5 0,0,0 2.15,3.78 Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1" />
                    <path d="M13.5,8.5 L15.23,7.62 A0.5,0.5 0,0,0 15.45,6.95 L13.85,3.78 A0.5,0.5 0,0,0 13.18,3.55 L11.46,4.41 Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1" />
                    <path d="M11.5,4.5 L9,4.5 L6.15,7.27 A0.5,0.5 0,0,0 6.24,8.05 C7.33,8.74 8.81,8.72 10,7.5 L12.5,9.5 L13.5,8.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1" />
                    <polyline points="7.75 13.5 5.15 12.85 3.5 11.67" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1" />
                </svg>
            </div>
            파트너 통합
        </div>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<PartnerBadge />

<a href="https://www.bladepipe.com/" target="_blank">BladePipe</a>는 1초 미만의 지연 시간을 지원하는 실시간 엔드투엔드 데이터 통합 도구로, 여러 플랫폼 전반에서 원활한 데이터 흐름을 지원합니다.

ClickHouse는 BladePipe에서 제공하는 사전 구축된 connector 중 하나로, 다양한 소스의 데이터를 ClickHouse로 자동 통합할 수 있습니다. 이 페이지에서는 데이터를 ClickHouse로 실시간 로드하는 방법을 단계별로 설명합니다.

<div id="supported-sources">
  ## 지원되는 소스
</div>

현재 BladePipe는 다음 소스에서 ClickHouse로의 데이터 통합을 지원합니다:

* MySQL/MariaDB/AuroraMySQL
* Oracle
* PostgreSQL/AuroraPostgreSQL
* MongoDB
* Kafka
* PolarDB-MySQL
* OceanBase
* TiDB

추후 더 많은 소스를 지원할 예정입니다.

<Steps>
  <Step title="BladePipe 다운로드 및 실행" id="1-run-bladepipe">
    1. <a href="https://www.bladepipe.com/" target="_blank">BladePipe Cloud</a>에 로그인합니다.

    2. <a href="https://doc.bladepipe.com/productOP/byoc/installation/install_worker_docker" target="_blank">Worker 설치(Docker)</a> 또는 <a href="https://doc.bladepipe.com/productOP/byoc/installation/install_worker_binary" target="_blank">Worker 설치(Binary)</a>의 안내에 따라 BladePipe Worker를 다운로드하고 설치합니다.

    <Note>
      또는 <a href="https://doc.bladepipe.com/productOP/onPremise/installation/install_all_in_one_binary" target="_blank">BladePipe Enterprise</a>를 다운로드하여 배포할 수도 있습니다.
    </Note>
  </Step>

  <Step title="ClickHouse를 대상으로 추가" id="2-add-clickhouse-as-a-target">
    <Note>
      1. BladePipe는 ClickHouse 버전 `20.12.3.3` 이상을 지원합니다.
      2. ClickHouse를 대상으로 사용하려면 사용자에게 SELECT, INSERT 및 일반 DDL 권한이 있어야 합니다.
    </Note>

    1. BladePipe에서 "DataSource" > "Add DataSource"를 클릭합니다.

    2. `ClickHouse`를 선택한 다음 ClickHouse 호스트와 포트, 사용자 이름, 비밀번호를 입력해 설정하고 "Test Connection"을 클릭합니다.

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_1.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=63b11e4a76a8fedaf8a98c4d3a496fa6" size="lg" border alt="ClickHouse를 대상으로 추가" width="1882" height="1744" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_1.webp" />

    3. 하단의 "Add DataSource"를 클릭하면 ClickHouse 인스턴스가 추가됩니다.
  </Step>

  <Step title="MySQL을 소스로 추가하기" id="3-add-mysql-as-a-source">
    이 튜토리얼에서는 MySQL 인스턴스를 소스로 사용하여 MySQL 데이터를 ClickHouse로 적재하는 과정을 설명합니다.

    <Note>
      MySQL을 소스로 사용하려면 사용자에게 <a href="https://doc.bladepipe.com/dataMigrationAndSync/datasource_func/MySQL/privs_for_mysql" target="_blank">필요한 권한</a>이 있는지 확인하십시오.
    </Note>

    1. BladePipe에서 "DataSource" > "Add DataSource"를 클릭하십시오.

    2. `MySQL`를 선택한 다음 MySQL 호스트와 포트, 사용자 이름, 비밀번호를 입력하여 설정을 완료하고 "Test Connection"을 클릭하십시오.

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_2.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=86149981e4823e8ffc94d870405a0674" size="lg" border alt="MySQL을 소스로 추가하기" width="1882" height="1746" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_2.webp" />

    3. 하단의 "Add DataSource"를 클릭하면 MySQL 인스턴스가 추가됩니다.
  </Step>

  <Step title="파이프라인 생성" id="4-create-a-pipeline">
    1. BladePipe에서 "DataJob" > "Create DataJob"을 클릭합니다.

    2. 추가한 MySQL 및 ClickHouse 인스턴스를 선택한 다음 "Test Connection"을 클릭하여 BladePipe가 해당 인스턴스에 연결되어 있는지 확인합니다. 그런 다음 옮길 데이터베이스를 선택합니다.
           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_3.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=6c86c863a807dc03306618540b9167ab" size="lg" border alt="소스 및 대상 선택" width="3264" height="1904" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_3.webp" />

    3. DataJob Type에서 "Incremental"을 선택하고, "Full Data" 옵션도 함께 선택합니다.
           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_4.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=0bb27a97a3e1b70fd1b5590af98ea1e8" size="lg" border alt="동기화 유형 선택" width="2248" height="1884" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_4.webp" />

    4. 복제할 테이블을 선택합니다.
           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_5.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=750373dc99b3fc14365d4b8b5cba5786" size="lg" border alt="테이블 선택" width="2956" height="1730" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_5.webp" />

    5. 복제할 컬럼을 선택합니다.
           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_6.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=d4fb0124a2705ab7b41cc727645b326b" size="lg" border alt="컬럼 선택" width="2960" height="1738" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_6.webp" />

    6. DataJob 생성을 확인하면 DataJob이 자동으로 실행됩니다.
           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_8.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=abbfdab480cf84fbe2047ec33a0b9111" size="lg" border alt="DataJob 실행 중" width="2244" height="294" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_8.webp" />
  </Step>

  <Step title="데이터 검증" id="5-verify-the-data">
    1. MySQL 인스턴스의 데이터 쓰기를 중지하고 ClickHouse에서 데이터가 머지될 때까지 기다리십시오.

    <Note>
      ClickHouse의 자동 머지 시점은 예측할 수 없으므로 `OPTIMIZE TABLE xxx FINAL;` 명령을 실행해 수동으로 머지를 트리거할 수 있습니다. 다만 이 수동 머지가 항상 성공하는 것은 아닐 수 있습니다.

      또는 `CREATE VIEW xxx_v AS SELECT * FROM xxx FINAL;` 명령을 실행해 뷰를 생성한 뒤, 해당 뷰에서 쿼리를 수행하여 데이터가 완전히 머지되었는지 확인할 수 있습니다.
    </Note>

    2. <a href="https://doc.bladepipe.com/operation/job_manage/create_job/create_period_verification_correction_job" target="_blank">검증용 DataJob</a>을 생성합니다. 검증용 DataJob이 완료되면 결과를 검토하여 ClickHouse의 데이터가 MySQL의 데이터와 동일한지 확인하십시오.
           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/bp_ck_9.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=85a6aedaebcf7d61338b632241660fda" size="lg" border alt="데이터 검증" width="2234" height="286" data-path="images/integrations/data-ingestion/etl-tools/bp_ck_9.webp" />
  </Step>
</Steps>
