全量从mysql导入数据到clickhouse(并建表)

1
2
3
clickhouse-client -m -u default --password 123456 --query="CREATE TABLE 
clickhouse_database_name.clickhouse_table_name ENGINE = MergeTree ORDER BY id AS
SELECT * FROM mysql('ip:port', 'database_name', 'table_name','name', 'password');";

clickhouse数据导出到csv文件

1
clickhouse-client -h 127.0.0.1 --database="db" --query="select * from db.test_table FORMAT CSV" > test.csv

csv文件导入到clickhouse数据库

1
clickhouse-client -h 127.0.0.1 --database="db" --query="insert into db.test_table FORMAT CSV" < ./test.csv

建表eg

关于建表时指定的order by

1
2
3
ORDER BY 决定了每个分区中数据的排序规则;
PRIMARY KEY 决定了一级索引(primary.idx);
ORDER BY 可以指代PRIMARY KEY, 通常只用声明ORDER BY 即可。
1
2
3
4
5
6
7
create table database_name.table_name(
`id` String COMMENT 'id',
`name` String COMMENT 'name',
`age` Int64 COMMENT 'age'
) ENGINE = MergeTree
ORDER BY
id SETTINGS index_granularity = 8192;

alter字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 追加新字段
ALTER TABLE tb_name ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [AFTER name_after]
ALTER TABLE testtable ADD COLUMN colum1 String DEFAULT 'defaultvalue';

-- 修改字段类型
ALTER TABLE tb_name MODIFY COLUMN [IF EXISTS] name [type] [default_expr];
ALTER TABLE testtable MODIFY COLUMN age Int32;

-- 修改备注
ALTER TABLE tb_name COMMENT COLUMN [IF EXISTS] name 'some comment';
ALTER TABLE testtable COMMENT COLUMN key '主键ID';

-- 删除已有字段
ALTER TABLE tb_name DROP COLUMN [IF EXISTS] name;
ALTER TABLE tb_name DROP COLUMN key;

alter 表

1
2
3
4
5
6
7
8
-- 修改数据表名称
RENAME TABLE default.testcol_v1 TO db_test.testcol_v2

-- 删除数据表数据(条件必须)
alter table database.tablename delete where ?=?

-- 删除数据表数据(条件必须)
alter table database.tablename update ?=? where ?=?

命令行批量执行sql

1
clickhouse-client --user 用户名 --password 密码 -d 数据库 --multiquery <  /root/temp.sql