全量从 MySQL 导入数据到 ClickHouse(并建表)

1
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

建表示例

关于建表时指定的 ORDER BY

  • 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