当您需要将本地文件导入到云数据库ClickHouse时,可通过clickhouse-client工具进行数据导入。本文为您介绍如何使用clickhouse-client工具导入数据至云数据库ClickHouse。
前提条件
-
已安装大于等于集群版本的clickhouse-client工具。如何安装,请参见安装clickhouse-client。
-
已将安装clickhouse-client服务器的IP地址添加到云数据库ClickHouse的白名单中。如何添加白名单,请参见设置白名单。
-
目标文件属于可导入的文件格式。有关支持导入的常见文件格式及其文本要求,请参见支持导入的文件格式。
操作步骤
本示例为将CSV类型的文件导入到云数据库ClickHouse数据库default库中的test_tbl_distributed分布式表中。在实际使用中,请根据您的实际情况修改对应参数。示例环境如下:
-
目标库:default
-
目标表:test_tbl_distributed
-
源数据:testData.csv文件
步骤一:准备导入数据
在clickhouse-client客户端的安装目录下,创建名为testData.csv的文件,并写入以下数据。
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,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,wangli,27,shenzhen,http://example.com
10,xiaohua,37,shanghai,http://example.com
步骤二:建表
-
连接数据库。
云数据库ClickHouse集成了可视化工具DMS,能够便捷的连接集群,如何使用DMS连接集群,请参见通过DMS连接ClickHouse。
如果您使用的是其他客户端,请参见连接数据库。
-
根据集群版本建表。
重要需注意表字段、字段类型与文本列及其类型之间的对应关系。表字段的列顺序与类型应与实际文本数据的顺序、类型逐一对应。否则,可能会导致导入数据时出现错误。
企业版集群仅需创建本地表,社区兼容版集群则可能需要根据您的环境和需求创建分布式表。以下为示例语句,更多建表语法,请参见CREATE TABLE。
企业版
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;如果您执行此语句时报
ON CLUSTER is not allowed for Replicated database的错误提示,可尝试通过升级版本解决此问题,如何升级版本,请参见升级内核小版本。社区兼容版
单副本和双副本的引擎有所不同,请根据您的副本类型选择相应的引擎。
重要在双副本集群中建表时,必须使用MergeTree系列引擎中支持数据复制的Replicated系列引擎。如果您在双副本集群中,创建了非Replicated系列引擎的表,将导致副本之间无法进行数据复制,从而导致副本数据可能不一致。
单副本
-
创建本地表。
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_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
双副本
-
创建本地表。
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 <file_name> | ./clickhouse-client --host=<host> --port=<port> --user=<user> --password=<password> --query="INSERT INTO <table_name> FORMAT <file_type>";
|
参数 |
说明 |
|
file_name |
目标文件路径。 |
|
host |
外网地址或VPC地址。您可以在集群信息页面,查看集群外网地址或VPC地址。 建议您根据clickhouse-client所在的服务器,选择合理的连接网络:
如何为集群申请外网,请参见申请和释放外网地址。 |
|
port |
TCP端口号。您可以在集群信息页面,查看TCP端口号。 |
|
user |
数据库账号。 |
|
password |
数据库账号的密码。 |
|
table_name |
目标表名。如果您创建了分布式表,此处为分布式表名。 |
|
file_type |
源数据文件类型。 |
步骤四:查看导入结果
-
连接集群。
通过DMS连接集群,请参见通过DMS连接ClickHouse。
-
执行查询语句。
重要如果您是社区版集群,并且是多节点集群,建议您查询分布式表;若未查询分布式表,则只能获取集群中一个节点的数据,这可能会导致查询结果少于您导入的数据。
SELECT * FROM test_tbl_local;查询结果如下。
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | yang | 32 | shanghai | http://example.com | | 2 | wang | 22 | beijing | http://example.com | | 3 | xiao | 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 | wangli | 27 | shenzhen | http://example.com | | 10 | xiaohua | 37 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+
支持导入的文件格式
支持导入的常见文件格式如下。
-
文本中,每行数据对应表中一条数据,每列数据对应创建表时的一个字段。
-
下述文件中,即使有的文件第一列或第二列有对列名或列类型描述,但这些内容都不会被解析,被解析的只有真正需要入表的数据。因此,此处列名和数据类型,并不能决定数据将来入表列的位置以及数据类型。
|
文件格式 |
文本要求 |
示例 |
|
TabSeparated |
|
|
|
TabSeparatedWithNames |
与TabSeparated类似,区别在于此文本要求第一行是列名。解析文本时,第一行会被忽略。 |
|
|
TabSeparatedWithNamesAndTypes |
与TabSeparated类似,区别是第一行是列名,第二行是类型。解析文本时,第一行、第二行都会被忽略。 |
|
|
CSV |
|
|
|
CSVWithNames |
与CSV类似,区别在于第一行表示列名。解析文本时,第一行会被忽略。 |
|
更多文件格式,请参见文件格式及说明。
相关文档
更多迁移方案,请参见数据迁移同步。