本地文件导入

最近更新时间:2023-09-05 11:25:15

我的收藏
本文介绍如何把本地文件的数据导入到云数据仓库 TCHouse-C 。

前提条件

1. 已经安装 clickhouse-client。(尚未安装的可参考快速入门 > 连接集群,进行下载和安装)
2. 支持导入到云数据仓库 TCHouse-C 的常见文件格式为 TabSeparated、TabSeparatedRaw、TabSeparatedWithNames、TabSeparatedWithNamesAndTypes、Template、CSV和CSVWithNames 等。更多支持的文件格式,请参见文件格式及说明
3. 确保 clickhouse-client 所在的本地服务器和云数据仓库 ClickHous 集群处于同一 VPC 下。
注意
不同的客户端和服务器版本彼此兼容,但是一些特性可能在旧客户端中不可用。我们建议使用与服务器应用相同版本的客户端。当您尝试使用旧版本的客户端时,服务器上的 clickhouse-client 会显示如下信息: “ClickHouse client version is older than ClickHouse server. It may lack support for new features.”可使用如下命令进行导入:cat <data_file> | ./clickhouse-client --host=<host> --port=<port> --user=<username> --password=<password> --query="INSERT INTO <table_name> FORMAT <format>";
在批量模式中,默认的数据格式是 TabSeparated 分隔的。您可以根据查询来灵活设置 FORMAT 格式。 默认情况下,在批量模式中只能执行单个查询。为了从一个 Script 中执行多个查询,可以使用--multiquery 参数。除了 INSERT 请求外,这种方式在任何地方都有用。查询的结果会连续且不含分隔符地输出。 同样的,为了执行大规模的查询,您可以为每个查询执行一次 clickhouse-client。但注意到每次启动 clickhouse-client 程序都需要消耗几十毫秒时间。

操作步骤

以下以本地文件 test.csv 为例说明整个数据导入的过程。
1. 准备本地文件 test.csv,并写入数据如下。
$ cat /test.csv
1,2,3
3,2,1
78,43,45
2. 目标表创建。
如果您的集群是单副本版:
CREATE TABLE test.test on cluster default_cluster
(
`column1` UInt32,
`column2` UInt32,
`column3` UInt32
)
engine = MergeTree()
order by column1;
如果您的集群是双副本版:
create table test.test on cluster default_cluster
(
`column1` UInt32,
`column2` UInt32,
`column3` UInt32
)
engine = ReplicatedMergeTree('/clickhouse/tables/test/test/{shard}', '{replica}')
order by column1;
创建分布式表:
create table test.test_dis on cluster default
AS test.test
engine = Distributed('default_cluster', 'test', 'test', rand());
3. 向目标表写入数据。
cat data.csv | clickhouse-client --query="INSERT INTO test FORMAT CSV"
4. 查询。
select * from test;