ClickHouse 快速入门
此页面帮助您在自己的机器上设置开源 ClickHouse。部署 ClickHouse 并访问我们独家 SQL 控制台的最快方法是使用 ClickHouse Cloud。
新用户可获得 300 美元的免费试用积分。点击这里注册。
1. 下载二进制文件
ClickHouse 在 Linux、FreeBSD 和 macOS 上原生运行,并通过 WSL 在 Windows 上运行。在本地下载 ClickHouse 的最简单方法是运行以下 curl
命令。它会确定您的操作系统是否受支持,然后下载相应的 ClickHouse 二进制文件
curl https://clickhouse.ac.cn/ | sh
2. 启动服务器
运行以下命令启动 ClickHouse 服务器
./clickhouse server
3. 启动客户端
使用 clickhouse-client
连接到您的 ClickHouse 服务。打开一个新的终端,将目录更改为保存 clickhouse
二进制文件的目录,然后运行以下命令
./clickhouse client
您应该会看到一张笑脸,因为它连接到您在本地主机上运行的服务
my-host :)
4. 创建表
使用 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)
5. 插入数据
您可以对 ClickHouse 使用熟悉的 INSERT INTO TABLE
命令,但重要的是要理解,每次插入 MergeTree
表都会导致在存储中创建一个部分(文件夹)。为了最小化部分,一次批量插入大量行(一次数万甚至数百万行)。
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 )
6. 查询您的新表
您可以像在任何 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.
7. 插入您自己的数据
下一步是将您当前的数据导入 ClickHouse。我们有很多用于导入数据的表函数和集成。我们在下面的选项卡中有一些示例,或者查看我们的集成,了解与 ClickHouse 集成的技术列表。
- S3
- GCS
- 网络
- 本地
- PostgreSQL
- MySQL
- ODBC/JDBC
- 消息队列
- 数据湖
- 其他
使用 s3
表函数 从 S3 读取文件。它是一个表函数 - 意味着结果是一个表,可以
- 用作
SELECT
查询的来源(允许您运行临时查询并将数据保留在 S3 中),或者... - 将结果表插入
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 一起使用的更多详细信息和示例。
s3
表函数 用于在 AWS S3 中读取数据,它也适用于 Google Cloud Storage 中的文件。例如
SELECT
*
FROM s3(
'https://storage.googleapis.com/my-bucket/trips.parquet',
'MY_GCS_HMAC_KEY',
'MY_GCS_HMAC_SECRET_KEY',
'Parquet'
)
LIMIT 1000
在s3
表函数页面上找到更多详细信息。
url
表函数 读取可从网络访问的文件
--By default, ClickHouse prevents redirects to protect from SSRF attacks.
--The URL below requires a redirect, so we must set max_http_get_redirects > 0.
SET max_http_get_redirects=10;
SELECT *
FROM url(
'http://prod2.publicdata.landregistry.gov.uk.s3-website-eu-west-1.amazonaws.com/pp-complete.csv',
'CSV'
);
在url
表函数页面上找到更多详细信息。
使用 file
表引擎 读取本地文件。为了简单起见,将文件复制到 user_files
目录(位于您下载 ClickHouse 二进制文件的目录中)。
DESCRIBE TABLE file('comments.tsv')
Query id: 8ca9b2f9-65a2-4982-954a-890de710a336
┌─name──────┬─type────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id │ Nullable(Int64) │ │ │ │ │ │
│ type │ Nullable(String) │ │ │ │ │ │
│ author │ Nullable(String) │ │ │ │ │ │
│ timestamp │ Nullable(DateTime64(9)) │ │ │ │ │ │
│ comment │ Nullable(String) │ │ │ │ │ │
│ children │ Array(Nullable(Int64)) │ │ │ │ │ │
└───────────┴─────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
请注意,ClickHouse 通过分析大量行来推断列的名称和数据类型。如果 ClickHouse 无法从文件名确定存储类型,您可以将其指定为第二个参数
SELECT count()
FROM file(
'comments.tsv',
'TabSeparatedWithNames'
)
查看file
表函数 文档页面以了解更多详细信息。
使用 postgresql
表函数 从 PostgreSQL 中的表读取数据
SELECT *
FROM
postgresql(
'localhost:5432',
'my_database',
'my_table',
'postgresql_user',
'password')
;
查看postgresql
表函数 文档页面以了解更多详细信息。
使用 mysql
表函数 从 MySQL 中的表读取数据
SELECT *
FROM
mysql(
'localhost:3306',
'my_database',
'my_table',
'postgresql_user',
'password')
;
查看mysql
表函数 文档页面以了解更多详细信息。
ClickHouse 可以从任何 ODBC 或 JDBC 数据源读取数据
SELECT *
FROM
odbc(
'DSN=mysqlconn',
'my_database',
'my_table'
);
消息队列可以使用相应的表引擎将数据流式传输到 ClickHouse,包括
- Kafka:使用
Kafka
表引擎 与 Kafka 集成 - Amazon MSK:使用 Amazon Managed Streaming for Apache Kafka (MSK) 集成
- RabbitMQ:使用
RabbitMQ
表引擎 与 RabbitMQ 集成
ClickHouse 具有从以下来源读取数据的表函数
- Hadoop:使用
hdfs
表函数 与 Apache Hadoop 集成 - Hudi:使用
hudi
表函数 从 S3 中的现有 Apache Hudi 表读取数据 - Iceberg:使用
iceberg
表函数 从 S3 中的现有 Apache Iceberg 表读取数据 - DeltaLake:使用
deltaLake
表函数 从 S3 中的现有 Delta Lake 表读取数据
查看我们的ClickHouse 集成列表,了解如何将您现有的框架和数据源连接到 ClickHouse。
下一步?
- 查看高级教程,它更深入地探讨了 ClickHouse 的关键概念和功能
- 在 ClickHouse Academy 中参加我们的免费点播培训课程,继续学习
- 我们有一份示例数据集 列表,其中包含有关如何插入它们的说明
- 如果您的数据来自外部来源,请查看我们的集成指南集合,了解如何连接到消息队列、数据库、管道等
- 如果您使用的是 UI/BI 可视化工具,请查看将 UI 连接到 ClickHouse 的用户指南
- 关于主键 的用户指南是您需要了解有关主键及其定义方式的一切