ClickHouse快速开始
本页面将帮助您在自己的机器上设置开源ClickHouse。部署ClickHouse并访问我们的独家SQL控制台的最快方式是使用ClickHouse Cloud。
新用户可以获得300美元的免费试用信用额度。点击这里注册。
1: 下载二进制文件
ClickHouse可以在Linux、FreeBSD和macOS上本地运行,并且可以通过WSL在Windows上运行。
在本地下载ClickHouse的最简单方法是运行以下curl
命令。它会确定您的操作系统是否受支持,然后下载适当的ClickHouse二进制文件:
curl https://clickhouse.com/ | sh
2: 启动服务器
运行以下命令启动ClickHouse服务器:
./clickhouse server
3: 启动客户端
使用clickhouse-client
连接到您的ClickHouse服务。打开一个新的终端,切换到您保存clickhouse
二进制文件的目录,并运行以下命令:
./clickhouse client
您应该会看到一个笑脸,表示它正在连接到您在localhost上运行的服务:
my-host :)
4: 创建表
使用CREATE TABLE
定义一个新表。典型的SQL DDL命令在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. 插入数据
您可以使用熟悉的INSERT INTO TABLE
命令与ClickHouse一起使用,但重要的是要理解,对MergeTree
表的每次插入都会导致存储中创建一个part(文件夹)。为了最小化part,一次性批量插入大量行(一次插入数万甚至数百万行)。
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
- Web
- Local
- PostgreSQL
- MySQL
- ODBC/JDBC
- Message Queues
- Data Lakes
- Other
使用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的详细信息和示例。
用于在AWS S3中读取数据的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
'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学院
- 我们有一些示例数据集,并提供了如何插入它们的说明
- 如果您的数据来自外部来源,请查看我们的集成指南集合,了解如何连接到消息队列、数据库、管道等
- 如果您使用UI/BI可视化工具,请查看连接UI到ClickHouse的用户指南
- 主键用户指南是您需要了解的关于主键以及如何定义它们的一切