Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

BigQuery에서 ClickHouse로 데이터 로드

이 가이드는 ClickHouse Cloud 및 자체 호스팅 ClickHouse v23.5+와 호환됩니다.

이 가이드에서는 BigQuery에서 ClickHouse로 데이터를 마이그레이션하는 방법을 설명합니다.

먼저 테이블을 Google Cloud Storage(GCS)로 내보낸 다음, 해당 데이터를 ClickHouse Cloud로 가져옵니다. BigQuery에서 ClickHouse로 내보낼 각 테이블에 대해 이 단계를 반복해야 합니다.

ClickHouse로 데이터를 내보내는 데 얼마나 걸리나요?

BigQuery에서 ClickHouse로 데이터를 내보내는 데 걸리는 시간은 데이터셋 크기에 따라 달라집니다. 참고로 이 가이드를 따르면 BigQuery에서 ClickHouse로 4TB 공개 Ethereum 데이터셋을 내보내는 데 약 1시간이 걸립니다.

테이블 행 수 내보낸 파일 수 데이터 크기 BigQuery 내보내기 슬롯 시간 ClickHouse 가져오기
blocks 16,569,489 73 14.53GB 23초 37분 15.4초
transactions 1,864,514,414 5169 957GB 1분 38초 1일 8시간 18분 5초
traces 6,325,819,306 17,985 2.896TB 5분 46초 5일 19시간 34분 55초
contracts 57,225,837 350 45.35GB 16초 1시간 51분 39.4초
합계 82.6억 23,577 3.982TB 8분 3초 > 6일 5시간 53분 45초

테이블 데이터를 GCS로 내보내기

이 단계에서는 BigQuery SQL 워크스페이스를 사용해 SQL 명령을 실행합니다. 아래에서는 EXPORT DATA SQL 문을 사용하여 mytable이라는 BigQuery 테이블의 데이터를 GCS 버킷으로 내보냅니다.

DECLARE export_path STRING;
DECLARE n INT64;
DECLARE i INT64;
SET i = 0;

-- We recommend setting n to correspond to x billion rows. So 5 billion rows, n = 5
SET n = 100;

WHILE i < n DO
  SET export_path = CONCAT('gs://mybucket/mytable/', i,'-*.parquet');
  EXPORT DATA
    OPTIONS (
      uri = export_path,
      format = 'PARQUET',
      overwrite = true
    )
  AS (
    SELECT * FROM mytable WHERE export_id = i
  );
  SET i = i + 1;
END WHILE;

위 쿼리에서는 BigQuery 테이블을 Parquet 데이터 포맷으로 내보냅니다. 또한 uri 매개변수에 * 문자가 포함되어 있습니다. 이렇게 하면 내보낸 데이터가 1GB를 초과할 경우 출력이 여러 파일로 분할되고, 각 파일 이름에는 숫자가 증가하는 접미사가 붙습니다.

이 접근 방식에는 여러 가지 장점이 있습니다.

  • Google은 하루 최대 50TB까지 GCS로 무료로 내보내기를 허용합니다. 사용자는 GCS 스토리지 비용만 지불하면 됩니다.
  • 내보내기를 수행하면 여러 파일이 자동으로 생성되며, 각 파일은 최대 1GB의 테이블 데이터로 제한됩니다. 따라서 가져오기를 병렬화할 수 있어 ClickHouse에 유리합니다.
  • Parquet는 컬럼 지향 포맷이므로 더 적합한 데이터 교환 포맷입니다. 기본적으로 압축되어 있어 BigQuery에서 더 빠르게 내보낼 수 있고 ClickHouse에서도 더 빠르게 쿼리할 수 있습니다.

GCS에서 ClickHouse로 데이터 가져오기

내보내기가 완료되면 이 데이터를 ClickHouse 테이블로 가져올 수 있습니다. 아래 명령은 ClickHouse SQL 콘솔 또는 clickhouse-client를 사용해 실행할 수 있습니다.

먼저 ClickHouse에서 테이블을 생성해야 합니다:

-- If your BigQuery table contains a column of type STRUCT, you must enable this setting
-- to map that column to a ClickHouse column of type Nested
SET input_format_parquet_import_nested = 1;

CREATE TABLE default.mytable
(
        `timestamp` DateTime64(6),
        `some_text` String
)
ENGINE = MergeTree
ORDER BY (timestamp);

테이블을 생성한 후 클러스터에 ClickHouse 레플리카가 여러 개 있는 경우, 내보내기 속도를 높이기 위해 parallel_distributed_insert_select 설정을 활성화하십시오. ClickHouse 노드가 1개뿐이라면 이 단계는 건너뛰어도 됩니다:

SET parallel_distributed_insert_select = 1;

마지막으로, INSERT INTO SELECT 명령을 사용해 GCS의 데이터를 ClickHouse 테이블에 삽입할 수 있습니다. 이 명령은 SELECT 쿼리 결과를 기반으로 테이블에 데이터를 삽입합니다.

INSERT할 데이터를 가져오려면, GCS가 Amazon S3와 상호 운용되므로 s3Cluster function을 사용해 GCS 버킷에서 데이터를 가져올 수 있습니다. ClickHouse 노드가 하나뿐이면 s3Cluster 함수 대신 s3 table function를 사용할 수 있습니다.

INSERT INTO mytable
SELECT
    timestamp,
    ifNull(some_text, '') AS some_text
FROM s3Cluster(
    'default',
    'https://storage.googleapis.com/mybucket/mytable/*.parquet.gz',
    '<ACCESS_ID>',
    '<SECRET>'
);

위 쿼리에서 사용하는 ACCESS_IDSECRET은 GCS 버킷에 연결된 HMAC key입니다.

데이터 내보내기 성공 여부 확인

데이터가 올바르게 삽입되었는지 확인하려면 새 테이블에서 SELECT 쿼리를 실행하세요:

SELECT * FROM mytable LIMIT 10;

BigQuery 테이블을 더 내보내려면 추가 테이블마다 위 단계를 다시 수행하면 됩니다.

추가 읽을거리 및 지원

이 가이드와 함께, ClickHouse를 사용해 BigQuery를 가속화하고 증분 가져오기를 처리하는 방법을 소개하는 블로그 게시물도 읽어보시기를 권장합니다.

BigQuery에서 ClickHouse로 데이터를 전송하는 데 문제가 있으면 support@clickhouse.com으로 문의해 주십시오.

Navigation