本文介绍如何通过clickhouse-client工具将本地文件的数据导入至云数据库ClickHouse。
注意事项
支持导入到云数据库ClickHouse的常见文件格式为TabSeparated、TabSeparatedWithNames、TabSeparatedWithNamesAndTypes、CSV和CSVWithNames。更多支持的文件格式,请参见文件格式及说明。
前提条件
- 已将本地机器的IP地址添加到云数据库ClickHouse的白名单中。
- 已安装与云数据库ClickHouse集群版本对应的clickhouse-client工具。下载链接,请参见clickhouse-client。
操作步骤
- 准备测试数据在clickhouse-client客户端的安装目录下,创建文件ceshi.csv并写入如下数据。
1,tick,32,shanghai,http://example.com 2,wangl,22,beijing,http://example.com 3,xiaoh,23,shenzhen,http://example.com 4,jess,45,hangzhou,http://example.com 5,jack,14,shanghai,http://example.com 6,tomy,25,hangzhou,http://example.com 7,lucy,45,shanghai,http://example.com 8,tengyin,26,shanghai,http://example.com 9,cuos,27,shenzhen,http://example.com 10,wangsh,37,shanghai,http://example.com
- 创建云数据库ClickHouse表
- 登录云数据库ClickHouse控制台。
- 在集群列表页面,单击目标集群ID。
- 单击右上方导航栏的登录数据库。
- 在登录实例页面,输入数据库账号和密码,单击登录。
- 创建本地表。说明 云数据库ClickHouse表的结构类型需与本地文件数据对应。
- 如果您的集群是单副本版,请输入如下建表语句。
create table test_tbl_local on cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) engine = MergeTree() order by id;
- 如果您的集群是双副本版,请输入如下建表语句。
create table test_tbl_local on cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) engine = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}') order by id;
- 如果您的集群是单副本版,请输入如下建表语句。
- 创建分布式表。说明 如果您只需要导入本地文件数据至本地表,可跳过此步骤。
create table test_tbl_distributed on cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) engine = Distributed(default, default, test_tbl_local, rand());
- 导入本地文件数据在clickhouse-client客户端的安装目录下执行如下命令。
cat <本地文件名> | ./clickhouse-client --host=<数据库连接地址> --port=<TCP端口号> --user=<数据库账号> --password=<数据库账号的密码> --query="INSERT INTO <ClickHouse表名> FORMAT <本地文件格式>";
说明 外网导入数据速度较慢,如果数据量较大或者测试导入性能,您可以采用如下方法。- 内网导入:购买与云数据库ClickHouse集群在同一个VPC网络的ECS实例,从ECS通过VPC地址连接云数据库ClickHouse集群并导入数据。
- 多进程导入:将原始文件等分为多份,启动多个client多进程并发导入。
云数据库ClickHouse支持的常用文件格式如下。常用文件格式 说明 TabSeparated 数据按行写入文本文件中,列与列之间通过Tab分割。需要对Tab、换行符、反斜线进行转义处理,分别对应为: \t
、\n
、\\
。 NULL值使用\N
进行表示。TabSeparatedWithNames 与TabSeparated类似,区别是第一行是列名。解析时,第一行会被忽略,因此不能够使用第一行列名来决定列的位置。 TabSeparatedWithNamesAndTypes 与TabSeparated类似,区别是第一行是列名,第二行是类型。解析时,第一行、第二行都会被忽略。 CSV 数据按行写入文件中。字符串类型使用英文双引号括起来,字符串本身的双引号用两个双引号进行转义,数值类型不使用双引号。默认列分隔符为 ,
,您也可以通过--format_csv_delimiter
指定其他列分隔符,例如列与列之间使用竖线分割,则命令示例如下。cat data.csv | ./clickhouse-client --format_csv_delimiter="|" --host=cc-bp163l724nkf8****.clickhouse.ads.aliyuncs.com --port=3306 --user=test --password=123456Aa --query="INSERT INTO test_tbl_distributed FORMAT CSV";
CSVWithNames 与CSV类似,区别是第一行表示列名。解析时,第一行会被忽略,因此不能够使用第一行列名来决定列的位置。 说明 云数据库ClickHouse支持的其他文件格式,详情请参见文件格式及说明。 - 查询云数据库ClickHouse表执行查询语句。
select * from test_tbl_distributed;
说明 如果您导入的是本地表,请将查询语句中的分布式表名更换为本地表名,再进行查询。查询结果如下。