跳转到主要内容
在本教程中,你将把 CSV 和 Parquet 格式的 2800 万行 Hacker News 数据插入 ClickHouse 表中,并运行一些简单查询来探索这些数据。

CSV

1

下载 CSV

可从我们的公开 S3 存储桶 下载该数据集的 CSV 版本,或运行以下命令:
该压缩文件大小为 4.6GB,包含 2800 万行,下载大约需要 5–10 分钟。
2

对数据进行采样

clickhouse-local 可让你快速处理本地文件,而无需 部署和配置 ClickHouse 服务器。在将任何数据存储到 ClickHouse 之前,先使用 clickhouse-local 对文件进行采样。 在终端中运行:
接下来,运行以下命令以查看数据:
Query
Response
这个命令里有很多巧妙的功能。 file 操作符允许你从本地磁盘读取文件,只需指定 CSVWithNames 格式。 最重要的是,系统会根据文件内容自动为你推断 schema。 还要注意,clickhouse-local 能够读取压缩文件,并根据扩展名推断出 gzip 格式。 这里使用 Vertical 格式,以便更直观地查看每一列的数据。
3

通过 schema inference 加载数据

用于加载数据的最简单且最强大的工具是 clickhouse-client:一款功能丰富的原生命令行客户端。 要加载数据,你也可以再次利用 schema inference,由 ClickHouse 自动确定各列的类型。运行以下命令来创建表,并通过 url 函数直接从远程 CSV 文件插入数据。 schema 会自动推断:
这会使用从数据中推断出的 schema 创建一个空表。 DESCRIBE TABLE 命令可帮助我们了解这些已分配的类型。
Query
Response
要将数据插入此表,请使用 INSERT INTO ... SELECT 命令。 结合 url 函数,数据将直接从该 URL 导入:
你已成功用一条命令将 2800 万行数据插入 ClickHouse!
4

查看数据

运行以下查询,对 Hacker News 的新闻条目和特定列进行采样:
Query
Response
虽然 schema inference 是初期数据探索的利器,但它只是一种“尽力而为”的方法,不能作为长期方案来替代为您的数据定义最佳 schema。
5

定义 schema

一个显而易见的优化方式,就是为每个字段定义类型。 除了将时间字段声明为 DateTime 类型之外,在删除现有数据集后,我们还将为下列每个字段定义合适的类型。 在 ClickHouse 中,数据的主键 id 是通过 ORDER BY 子句定义的。选择合适的类型,并确定在 ORDER BY 子句中包含哪些列,有助于提升查询速度和压缩效果。运行以下查询以删除旧 schema 并创建优化后的 schema:
Query
有了优化后的 schema,现在你可以从本地文件系统中插入数据了。 再次使用 clickhouse-client,通过带有 INFILE 子句的显式 INSERT INTO 语句插入该文件。
Query
6

运行示例查询

以下提供了一些示例查询,希望能为您编写自己的查询提供参考。

“ClickHouse” 在 Hacker News 上是一个多热门的话题?

score 字段提供了衡量故事热度的指标,而 id 字段与 || 拼接运算符可用于生成原始帖子的链接。
Query
Response
ClickHouse 随时间推移是否产生了更多噪声?这里体现了将 time 字段定义为 DateTime 的价值所在——使用合适的数据类型,即可调用 toYYYYMM() 函数:
Query
Response
看来 “ClickHouse” 的热度正随着时间的推移持续上升。

谁是 ClickHouse 相关文章中评论最多的用户?

Query
Response

哪些评论最能引发关注?

Query
Response

Parquet

ClickHouse 的优势之一在于它能够处理多种格式。 CSV 是一种相当理想的使用场景,但并不是数据交换的最高效格式。 接下来,你将从 Parquet 文件加载数据,它是一种高效的列式格式。 Parquet 的类型很少,ClickHouse 必须遵循这些类型,而且这些类型信息就编码在格式本身中。 对 Parquet 文件进行类型推断,得到的 schema 往往会与 CSV 文件的 schema 略有不同。
1

插入数据

运行以下查询,以 Parquet 格式读取相同的数据,并再次使用 url 函数读取远程数据:
Parquet 中的 NULL受 Parquet 格式特性的影响,我们必须接受键可能为 NULL, 即使数据中并不存在这些键。
运行以下命令以查看推断出的 schema:
Response
和前面的 CSV 文件一样,你也可以手动指定 schema,以便更好地控制所选类型,并将 数据直接从 S3 插入:
2

添加数据跳过索引以加快查询速度

要查看有多少条评论提到了 “ClickHouse”,请运行以下查询:
Query
Response
接下来,您将在 “comment” 列上创建一个倒排索引, 以加快此查询。 请注意,comments 会以小写形式建立索引,以便在查找术语时不区分大小写。运行以下命令来创建索引:
索引物化需要一些时间 (要检查索引是否已创建,请使用系统表 system.data_skipping_indices) 。索引创建完成后,再次运行该查询:
Query
请注意:有了索引后,查询现在仅需 0.248 秒,而此前在没有索引时则需 0.843 秒:
Response
可以使用 EXPLAIN 子句来了解,为什么添加该索引后 查询性能提升了约 3.4 倍。
Response
请注意,索引通过跳过大量粒度来加快了查询速度。现在还可以高效地搜索单个词,或多个词中的全部词:
Query
Response
Query
Response
最后修改于 2026年7月1日