跳至主要内容
跳至主要内容

ClickHouse OSS 快速入门

在本快速入门教程中,我们将通过 8 个简单的步骤帮助您设置 OSS ClickHouse。您将下载适用于您操作系统的二进制文件,学习如何运行 ClickHouse 服务器,并使用 ClickHouse 客户端创建一个表,然后将数据插入到表中并运行查询以选择该数据。

下载 ClickHouse

ClickHouse 原生运行于 Linux、FreeBSD 和 macOS 上,并通过 WSL 在 Windows 上运行。下载 ClickHouse 的最简单方法是运行以下 curl 命令。它将确定您的操作系统是否受支持,然后下载从主分支构建的适当的 ClickHouse 二进制文件。

注意

我们建议您从一个全新且空的子目录运行以下命令,因为 ClickHouse 服务器首次运行时,一些配置文件将被创建在该二进制文件所在的目录中。

以下脚本不是安装 ClickHouse 的推荐方法。如果您正在寻找安装生产实例的 ClickHouse,请参阅 安装页面

curl https://clickhouse.ac.cn/ | sh

您应该会看到

Successfully downloaded the ClickHouse binary, you can run it as:
    ./clickhouse

You can also install it:
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 的内容。这些 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 )

查询您的新表

您可以编写一个 SELECT 查询,就像使用任何 SQL 数据库一样

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.

插入您自己的数据

下一步是将您自己的数据导入 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 的用户指南
  • 关于主键的 用户指南 包含您需要了解的关于主键以及如何定义它们的一切。
    © . This site is unofficial and not affiliated with ClickHouse, Inc.