跳到主要内容
跳到主要内容

ClickHouse OSS 快速入门

在本快速入门教程中,我们将通过 8 个简单步骤帮助你完成 OSS ClickHouse 的设置。你将下载适用于你操作系统的二进制文件,学习如何运行 ClickHouse server,并使用 ClickHouse client 创建一张表,然后向其中插入数据并运行查询来选取这些数据。

下载 ClickHouse

ClickHouse 原生支持 Linux、FreeBSD 和 macOS,并可通过 WSL 在 Windows 上运行。 在本地下载 ClickHouse 最简单的方式是运行以下 curl 命令。 该命令将检测您的操作系统是否受支持,然后下载从 master 分支构建的相应 ClickHouse 二进制文件。

注意

建议在新建的空子目录中运行以下命令,因为首次运行 ClickHouse 服务器时,会在二进制文件所在目录中创建一些配置文件。

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

curl https://clickhouse.com/ | sh

您应该会看到:

成功下载 ClickHouse 二进制文件后,可以通过以下方式运行:
    ./clickhouse

也可以进行安装:
sudo ./clickhouse install

在此阶段,可以忽略运行 install 命令的提示。

注意

Mac 用户注意:如果您遇到无法验证二进制文件开发者的错误,请参阅"修复 macOS 中的开发者验证错误"

启动服务器

运行以下命令启动 ClickHouse 服务器:

./clickhouse server

您应该会看到终端中充满日志输出。这是预期行为。在 ClickHouse 中, 默认日志级别 设置为 trace 而非 warning

启动客户端

使用 clickhouse-client 连接到您的 ClickHouse 服务。打开新终端,切换到 clickhouse 二进制文件所在的目录,然后运行以下命令:

./clickhouse client

您应该会看到一个笑脸,表示已成功连接到本地运行的服务:

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)

插入数据

您可以使用熟悉的 INSERT INTO TABLE 命令操作 ClickHouse,但需要理解的是,每次向 MergeTree 表插入数据都会在存储中创建我们所称的 part(数据部分)。这些 ^^part^^ 随后会由 ClickHouse 在后台进行合并。

在 ClickHouse 中,我们建议一次性批量插入大量数据行(单次插入数万甚至数百万行),以最小化后台进程中需要合并的 parts 数量。

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

INSERT INTO my_first_table (user_id, message, timestamp, metric) VALUES
    (101, '你好,ClickHouse!',                                 now(),       -1.0    ),
    (102, '每批次插入大量数据行',                     yesterday(), 1.41421 ),
    (102, '根据常用查询对数据进行排序', today(),     2.718   ),
    (101, 'Granule 是数据读取的最小单元',      now() + 5,   3.14159 )

查询您的新表

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

SELECT *
FROM my_first_table
ORDER BY timestamp

注意响应以表格格式返回:

┌─user_id─┬─message────────────────────────────────────────────┬───────────timestamp─┬──metric─┐
│     102 │ 每批插入大量行                                      │ 2022-03-21 00:00:00 │ 1.41421 │
│     102 │ 根据常用查询对数据进行排序                          │ 2022-03-22 00:00:00 │   2.718 │
│     101 │ 你好,ClickHouse!                                   │ 2022-03-22 14:04:09 │      -1 │
│     101 │ 颗粒是读取的最小数据块                              │ 2022-03-22 14:04:14 │ 3.14159 │
└─────────┴────────────────────────────────────────────────────┴─────────────────────┴─────────┘

返回 4 行。耗时:0.008 秒。

插入您自己的数据

下一步是将您自己的数据导入 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 结合使用的详细信息和示例。


探索

  • 查看我们的核心概念章节,了解一些 ClickHouse 底层工作原理的基础概念。
  • 请查看 进阶教程,该教程将更深入地探讨 ClickHouse 的核心概念和功能。
  • 前往 ClickHouse Academy 参加我们的免费按需培训课程,继续学习。
  • 我们提供了一系列示例数据集,并附有插入这些数据集的具体说明。
  • 如果您的数据来自外部系统,请参阅我们的集成指南汇总,了解如何连接消息队列、数据库、数据管道等。
  • 如果您正在使用 UI/BI 可视化工具,请参阅将 UI 工具连接到 ClickHouse 的用户指南
  • 主键用户指南包含了你需要了解的所有主键信息以及如何定义主键。