SQL 포맷
SQL 포맷
ClickHouse는 여러 방식으로 OLTP 데이터베이스 인프라에 쉽게 통합될 수 있어요. 그중 하나는 SQL 덤프를 사용해 다른 데이터베이스와 ClickHouse 사이에 데이터를 전송하는 거예요.
출처: 문서
본문
SQL 덤프 만들기
데이터는 SQLInsert로 SQL 포맷으로 덤프할 수 있어요. ClickHouse는 INSERT INTO <table name> VALUES(... 형태로 데이터를 쓰고, 테이블 이름으로는 output_format_sql_insert_table_name 설정 옵션을 사용해요.
SET output_format_sql_insert_table_name = 'some_table';
SELECT * FROM some_data
INTO OUTFILE 'dump.sql'
FORMAT SQLInsert
컬럼 이름은 output_format_sql_insert_include_column_names 옵션을 꺼서 생략할 수 있어요.
SET output_format_sql_insert_include_column_names = 0
이제 dump.sql 파일을 다른 OLTP 데이터베이스에 공급할 수 있어요.
mysql some_db < dump.sql
some_db MySQL 데이터베이스에 some_table 테이블이 존재한다고 가정해요. 일부 DBMS는 단일 배치에서 처리할 수 있는 값의 수에 제한이 있을 수 있어요. 기본적으로 ClickHouse는 65k 값 배치를 만들지만, 이것은 output_format_sql_insert_max_batch_size 옵션으로 변경할 수 있어요.
SET output_format_sql_insert_max_batch_size = 1000;
값 집합 내보내기
ClickHouse에는 Values 포맷이 있는데, SQLInsert와 비슷하지만 INSERT INTO table VALUES 부분을 생략하고 값 집합만 반환해요.
SELECT * FROM some_data LIMIT 3 FORMAT Values
('Bangor_City_Forest','2015-07-01',34),('Alireza_Afzal','2017-02-01',24),('Akhaura-Laksam-Chittagong_Line','2015-09-01',30)
SQL 덤프에서 데이터 삽입하기
SQL 덤프를 읽으려면 MySQLDump를 사용해요.
SELECT *
FROM file('dump.sql', MySQLDump)
LIMIT 5
┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest │ 2015-07-01 │ 34 │
│ Alireza_Afzal │ 2017-02-01 │ 24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │ 30 │
│ 1973_National_500 │ 2017-10-01 │ 80 │
│ Attachment │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘
기본적으로 ClickHouse는 알 수 없는 컬럼을 건너뛰고(input_format_skip_unknown_fields 옵션으로 제어), 단일 파일에 여러 테이블이 덤프된 경우 덤프에서 처음 발견된 테이블의 데이터를 처리해요. DDL 문은 건너뛰어요. MySQL 덤프(mysql.sql 파일)에서 테이블로 데이터를 적재하려면:
INSERT INTO some_data
FROM INFILE 'mysql.sql' FORMAT MySQLDump
MySQL 덤프 파일에서 테이블을 자동으로 만들 수도 있어요.
CREATE TABLE table_from_mysql
ENGINE = MergeTree
ORDER BY tuple() AS
SELECT *
FROM file('mysql.sql', MySQLDump)
여기서 ClickHouse가 자동으로 추론한 구조를 바탕으로 table_from_mysql이라는 테이블을 만들었어요. ClickHouse는 데이터를 기반으로 타입을 감지하거나, 가능하면 DDL을 사용해요.
DESCRIBE TABLE table_from_mysql;
┌─name──┬─type─────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path │ Nullable(String) │ │ │ │ │ │
│ month │ Nullable(Date32) │ │ │ │ │ │
│ hits │ Nullable(UInt32) │ │ │ │ │ │
└───────┴──────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
다른 포맷
ClickHouse는 다양한 시나리오와 플랫폼을 다루기 위해 텍스트·바이너리 여러 포맷을 지원해요. 다음 문서에서 더 많은 포맷과 작업 방법을 살펴보세요.
또한 clickhouse-local을 확인해 보세요. ClickHouse 서버 없이 로컬/원격 파일을 다룰 수 있는 휴대형 풀기능 도구예요.