跳转到主内容
跳转到主内容

ClickHouse 开源版快速开始

在本快速入门教程中,我们将通过几个简单步骤帮助你完成开源版 ClickHouse 的设置。你将使用 ClickHouse CLI clickhousectl 安装 ClickHouse, 启动 ClickHouse 服务端,连接到服务器来创建一张表, 向其中插入数据,并执行一条 SELECT 查询。

安装 ClickHouse CLI \

ClickHouse CLI (clickhousectl) 用于安装和管理本地 ClickHouse 版本、启动服务器及执行查询。使用以下命令安装:

curl https://clickhouse.com/cli | sh

系统还会自动创建 chctl 别名以方便使用。

安装 ClickHouse

ClickHouse 原生支持在 Linux 和 macOS 上运行,并可通过 WSL 在 Windows 上运行。

使用 CLI 安装最新稳定版 ClickHouse:

clickhousectl local install stable
注意

这不是在生产环境中安装 ClickHouse 的推荐方式。 如需安装生产环境的 ClickHouse 实例,请参阅安装页面

启动服务器

启动 ClickHouse 服务端实例:

clickhousectl local server start --name my-first-server

服务器默认在后台运行。如需验证其是否正在运行:

clickhousectl local server list

启动客户端

连接到正在运行的 ClickHouse 服务端:

clickhousectl local client --name my-first-server

连接到运行在 localhost 上的服务后,您应该会看到一个笑脸:

my-host :)

创建表

使用 CREATE TABLE 定义新表。标准 SQL DDL 命令在 ClickHouse 中均可使用,但有一点额外要求——ClickHouse 中的表需要指定 ENGINE 子句。使用 MergeTree 以充分发挥 ClickHouse 的性能优势:

CREATE TABLE my_first_table
(
    user_id UInt32,
    message String,
    timestamp DateTime,
    metric Float32
)
ENGINE = MergeTree
PRIMARY KEY (user_id, timestamp)

插入数据

您可以在 ClickHouse 中使用熟悉的 INSERT INTO TABLE 命令,但有一点需要了解:每次向 MergeTree 表插入数据时,ClickHouse 都会在存储中创建一个称为 part 的数据单元。这些 parts 随后会由 ClickHouse 在后台合并。

在 ClickHouse 中,我们通常一次性批量插入大量行 (一次插入数万甚至数百万行) ,以尽量减少后台进程中需要合并的 parts 数量。

在本指南中,我们暂时不需要关注这个问题。运行以下命令,向表中插入几行数据:

INSERT INTO my_first_table (user_id, message, timestamp, metric) VALUES
    (101, 'Hello, ClickHouse!',                                 now(),       -1.0    ),
    (102, 'Insert a lot of rows per batch',                     yesterday(), 1.41421 ),
    (102, 'Sort your data based on your commonly-used queries', today(),     2.718   ),
    (101, 'Granules are the smallest chunks of data read',      now() + 5,   3.14159 )

查询新表

您可以像在任何 SQL 数据库中一样编写 SELECT 查询:

SELECT *
FROM my_first_table
ORDER BY timestamp

请注意,响应以整洁的表格形式返回:

┌─user_id─┬─message────────────────────────────────────────────┬───────────timestamp─┬──metric─┐
│     102 │ Insert a lot of rows per batch                     │ 2022-03-21 00:00:00 │ 1.41421 │
│     102 │ Sort your data based on your commonly-used queries │ 2022-03-22 00:00:00 │   2.718 │
│     101 │ Hello, ClickHouse!                                 │ 2022-03-22 14:04:09 │      -1 │
│     101 │ Granules are the smallest chunks of data read      │ 2022-03-22 14:04:14 │ 3.14159 │
└─────────┴────────────────────────────────────────────────────┴─────────────────────┴─────────┘

4 rows in set. Elapsed: 0.008 sec.

插入您自己的数据 [#insert-own-data}

下一步是将您自己的数据导入 ClickHouse。我们提供了大量表函数集成方案用于摄取数据。以下标签页中提供了一些示例,您也可以查阅我们的集成方案页面,了解与 ClickHouse 集成的完整技术列表。

使用 s3 表函数 从 S3 读取文件。它是一个表函数——也就是说,结果是一个表, 可以:

  1. 作为 SELECT 查询的数据源使用 (这样你就可以执行临时查询,并 将数据保留在 S3 中) ,或者……
  2. 将结果表插入 MergeTree 表 (当你准备好 将数据迁移到 ClickHouse 时)

临时查询示例如下:

SELECT
passenger_count,
avg(toFloat32(total_amount))
FROM s3(
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_0.gz',
'TabSeparatedWithNames'
)
GROUP BY passenger_count
ORDER BY passenger_count;

将数据写入 ClickHouse 表的方式如下所示,其中 nyc_taxi 是一个 MergeTree 表:

INSERT INTO nyc_taxi
SELECT * FROM s3(
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi/trips_0.gz',
'TabSeparatedWithNames'
)
SETTINGS input_format_allow_errors_num=25000;

查看我们的 AWS S3 文档页面合集,获取更多有关 S3 与 ClickHouse 搭配使用的详细说明和示例。


探索

  • 查看我们的 Core Concepts 部分,了解 ClickHouse 底层工作原理的基础知识。
  • 请参阅进阶教程,其中会更深入地介绍 ClickHouse 的关键概念和功能。
  • 通过 ClickHouse Academy 的免费线点播培训课程,继续学习。
  • 我们整理了一份示例数据集列表,并附有插入说明。
  • 如果您的数据来自外部源,请参阅我们的集成指南汇总,了解如何连接消息队列、数据库、管道等。
  • 如果你使用的是 UI/BI 可视化工具,请参阅将 UI 连接到 ClickHouse 的用户指南
  • 主键用户指南全面介绍了有关主键及其定义方法的所有内容。