Skip to Content
Data SynchronizationMySQL Data Import

Import Data from MySQL

Create a table in ClickHouse based on the MySQL table structure. For the mapping between MySQL data types and ClickHouse types, refer to: Developer Guide

MySQL Table Creation:

CREATE TABLE testdb.mysql_test_table ( id int NOT NULL, quarter tinyint unsigned DEFAULT NULL, month tinyint DEFAULT NULL, day_of_month smallint unsigned DEFAULT NULL, day_of_week smallint DEFAULT NULL, airline_id int DEFAULT NULL, carrier float DEFAULT NULL, origin double DEFAULT NULL, unique_carrier varchar(80) NOT NULL, flight_date date NOT NULL, tail_date datetime DEFAULT NULL, origin_airport_time timestamp, comment varchar(100) ) ENGINE=InnoDB

Create a corresponding table in ClickHouse:

--Create a local table create table default.clickhouse_test_table ON CLUSTER ch_cluster ( id Int32, quarter Nullable(UInt32), month Nullable(Int8), day_of_month Nullable(UInt16), day_of_week Nullable(Int16), airline_id Nullable(Int32), carrier Nullable(Float32), origin Nullable(Float64), unique_carrier String, flight_date Date, tail_date Nullable(Datetime), origin_airport_time Nullable(Datetime), comment Nullable(String) ) ENGINE = ReplicatedMergeTree( '/clickhouse/tables/clickhouse_test_table/{shard}', '{replica}', flight_date, (id, unique_carrier), 8192); --Create a distributed table CREATE TABLE clickhouse_test_table_distributed ON CLUSTER ch_cluster AS clickhouse_test_table ENGINE = Distributed(default, default, clickhouse_test_table, rand());

Insert Data

insert into <table_name> select * from mysql('<host>:<port>', '<db_name>','<table_name>', '<username>', '<password>')

Query Data

select count(*) from <table_name>