ClickHouse 是一个开源的、面向列的分析数据库,由 Yandex 创建,用于 OLAP 和大数据用例。 ClickHouse 对实时查询处理的支持使其适用于需要亚秒级分析结果的应用程序。 ClickHouse 的查询语言是 SQL 的一种方言,它支持强大的声明式查询功能,同时为最终用户提供熟悉度和更小的学习曲线。
面向列的数据库将记录存储在按列而不是行分组的块中。通过不为查询中不存在的列加载数据,面向列的数据库在完成查询时读取数据的时间更少。因此,对于某些工作负载(例如 OLAP),这些数据库可以比传统的基于行的系统更快地计算和返回结果。
在线分析处理 (OLAP) 系统允许组织大量数据并执行复杂查询。它们能够管理 PB 级数据并快速返回查询结果。通过这种方式,OLAP 可用于数据科学和业务分析等领域的工作。
在本教程中,您将在您的机器上安装 ClickHouse 数据库服务器和客户端。您将使用 DBMS 执行典型任务,并可选择从另一台服务器启用远程访问,以便您能够从另一台机器连接到数据库。然后,您将通过建模和查询示例网站访问数据来测试 ClickHouse。
sudo
的非 root 用户和防火墙设置的 Ubuntu 18.04 服务器。您可以按照初始服务器设置教程创建用户并设置防火墙。sudo
启用非 root 用户和防火墙设置的辅助 Ubuntu 18.04 服务器。您可以按照初始服务器设置教程进行操作。在本节中,您将使用 apt-get
安装 ClickHouse 服务器和客户端程序。
首先,运行以下命令通过 SSH 连接到您的服务器:
ssh sammy@your_server_ip
Yandex 维护一个 APT 存储库,其中包含最新版本的 ClickHouse。添加存储库的 GPG 密钥,以便您能够安全地下载经过验证的 ClickHouse 包:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4
您将看到类似于以下内容的输出:
Output
Executing: /tmp/apt-key-gpghome.JkkcKnBAFY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv E0C56BD4
gpg: key C8F1E19FE0C56BD4: public key "ClickHouse Repository Key <milovidov@yandex-team.ru>" imported
gpg: Total number processed: 1
gpg: imported: 1
输出确认它已成功验证并添加了密钥。
通过执行以下命令将存储库添加到您的 APT 存储库列表中:
echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
在这里,您已将 echo
的输出通过管道传输到 sudo tee
,以便此输出可以打印到根拥有的文件。
现在,运行 apt-get update
来更新你的包:
sudo apt-get update
clickhouse-server
和 clickhouse-client
软件包现在可供安装。安装它们:
sudo apt-get install -y clickhouse-server clickhouse-client
您已成功安装 ClickHouse 服务器和客户端。您现在已准备好启动数据库服务并确保它正确运行。
您在上一节中安装的 clickhouse-server
包创建了一个 systemd
服务,该服务执行启动、停止和重新启动数据库服务器等操作。 systemd
是 Linux 用于初始化和管理服务的 init 系统。在本节中,您将启动服务并验证它是否成功运行。
通过运行以下命令启动 clickhouse-server
服务:
sudo service clickhouse-server start
上一个命令不会显示任何输出。要验证服务是否成功运行,请执行:
sudo service clickhouse-server status
您将看到类似于以下内容的输出:
Output
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-12-22 07:23:20 UTC; 1h 9min ago
Main PID: 27101 (ClickHouse-serv)
Tasks: 34 (limit: 1152)
CGroup: /system.slice/ClickHouse-server.service
└─27101 /usr/bin/ClickHouse-server --config=/etc/ClickHouse-server/config.xml
输出表示服务器正在运行。
您已成功启动 ClickHouse 服务器,现在可以使用 clickhouse-client
CLI 程序连接到服务器。
在 ClickHouse 中,您可以通过直接在交互式数据库提示中执行 SQL 语句来创建和删除数据库。语句由遵循特定语法的命令组成,这些命令告诉数据库服务器执行请求的操作以及所需的任何数据。您可以使用 CREATE DATABASE table_name
语法创建数据库。要创建数据库,首先通过运行以下命令启动客户端会话:
clickhouse-client
此命令将使您登录到客户端提示符,您可以在其中运行 ClickHouse SQL 语句来执行以下操作:
创建、更新和删除数据库、表、索引、分区和视图。
*
执行查询以检索使用各种条件进行可选过滤和分组的数据。
在这一步中,随着 ClickHouse 客户端准备好插入数据,您将创建一个数据库和表。出于本教程的目的,您将创建一个名为 test
的数据库,并在其中创建一个名为 visits
的表,用于跟踪网站访问持续时间。
现在您已进入 ClickHouse 命令提示符,请通过执行以下命令创建 test
数据库:
CREATE DATABASE test;
您将看到以下输出,表明您已创建数据库:
Output
CREATE DATABASE test
Ok.
0 rows in set. Elapsed: 0.003 sec.
ClickHouse 表类似于其他关系数据库中的表;它拥有一组相关数据n 结构化格式。您可以指定列及其类型、添加数据行以及对表执行不同类型的查询。
在 ClickHouse 中创建表的语法遵循以下示例结构:
CREATE TABLE table_name
(
column_name1 column_type [options],
column_name2 column_type [options],
...
) ENGINE = engine
table_name
和 column_name
值可以是任何有效的 ASCII 标识符。 ClickHouse 支持多种列类型;一些最受欢迎的是:
UInt64
:用于存储 0 到 18446744073709551615 范围内的整数值。
*Float64
:用于存储2039.23、10.5等浮点数。
*String
:用于存储变长字符。它不需要最大长度属性,因为它可以存储任意长度。
*Date
:用于存储遵循 YYYY-MM-DD
格式的日期。
*DateTime
:用于存储日期和时间,遵循YYYY-MM-DD HH:MM:SS
格式。
在列定义之后,指定用于表的引擎。在 ClickHouse 中,Engines 决定底层数据的物理结构、表的查询能力、并发访问模式以及对索引的支持。不同的发动机类型适用于不同的应用要求。最常用和广泛适用的引擎类型是 MergeTree
。
现在您对表创建有了一个概述,您将创建一个表。首先确认您要修改的数据库:
USE test;
您将看到以下输出,表明您已从 default
数据库切换到 test
数据库:
Output
USE test
Ok.
0 rows in set. Elapsed: 0.001 sec.
本指南的其余部分将假设您正在此数据库的上下文中执行语句。
通过运行以下命令创建 visits
表:
CREATE TABLE visits ( id UInt64, duration Float64, url String, created DateTime ) ENGINE = MergeTree() PRIMARY KEY id ORDER BY id;
这是该命令的作用的细分。您创建一个名为 visits
的表,它有四列:
id
:主键列。与其他 RDBMS 系统类似,ClickHouse 中的主键列唯一标识一行;该列的每一行都应该有一个唯一的值。
*duration
:一个浮动列,用于以秒为单位存储每次访问的持续时间。 float
列可以存储十进制值,例如 12.50。
*url
:存储访问过的URL的字符串列,如http://example.com
。
*created
:跟踪访问发生时间的日期和时间列。
在列定义之后,指定 MergeTree
作为表的存储引擎。引擎的 MergeTree family 推荐用于生产数据库,因为它优化了对大型实时插入的支持、整体健壮性和查询支持。此外,MergeTree 引擎支持按主键对行进行排序、行分区以及复制和采样数据。
如果您打算使用 ClickHouse 来归档不经常查询的数据或存储临时数据,您可以使用引擎的 Log family 来针对该用例进行优化。
在列定义之后,您将定义其他表级选项。 PRIMARY KEY
子句将 id
设置为主键列,而 ORDER BY
子句将存储按 id
列排序的值。主键唯一标识一行,用于高效访问单行和高效的行托管。
在执行 create 语句时,您将看到以下输出:
OutputCREATE TABLE visits
(
id UInt64,
duration Float64,
url String,
created DateTime
)
ENGINE = MergeTree()
PRIMARY KEY id
ORDER BY id
Ok.
0 rows in set. Elapsed: 0.010 sec.
在本节中,您创建了一个数据库和一个表来跟踪网站访问数据。在下一步中,您将向表中插入数据、更新现有数据并删除该数据。
在这一步中,您将使用 visits
表来插入、更新和删除数据。以下命令是将行插入 ClickHouse 表的语法示例:
INSERT INTO table_name VALUES (column_1_value, column_2_value, ....);
现在,通过运行以下每个语句,将几行示例网站访问数据插入到 visits
表中:
INSERT INTO visits VALUES (1, 10.5, 'http://example.com', '2019-01-01 00:01:01');
INSERT INTO visits VALUES (2, 40.2, 'http://example1.com', '2019-01-03 10:01:01');
INSERT INTO visits VALUES (3, 13, 'http://example2.com', '2019-01-03 12:01:01');
INSERT INTO visits VALUES (4, 2, 'http://example3.com', '2019-01-04 02:01:01');
您将看到针对每个插入语句重复的以下输出。
Output
INSERT INTO visits VALUES
Ok.
1 rows in set. Elapsed: 0.004 sec.
每行的输出表明您已成功将其插入到 visits
表中。
现在,您将向 visits
表中添加一个额外的列。在现有表中添加或删除列时,ClickHouse 支持 ALTER
语法。
例如,向表中添加列的基本语法如下:
ALTER TABLE table_name ADD COLUMN column_name column_type;
添加一个名为 location
的列,该列将通过运行以下语句来存储访问网站的位置:
ALTER TABLE visits ADD COLUMN location String;
您将看到类似于以下内容的输出:
OutputALTER TABLE visits
ADD COLUMN
location String
Ok.
0 rows in set. Elapsed: 0.014 sec.
输出显示您已成功添加 location
列。
从版本 19.3.6 开始,由于实施限制,ClickHouse 不支持更新和删除单个数据行。但是,ClickHouse 支持批量更新和删除,并且为这些操作提供了独特的 SQL 语法以突出它们的非标准用法。
以下语法是批量更新行的示例:
ALTER TABLE table_name UPDATE column_1 = value_1, column_2 = value_2 ... WHERE filter_conditions;
您将运行以下语句来更新 duration
小于 15 的所有行的 url
列。将其输入到数据库提示符中以执行:
ALTER TABLE visits UPDATE url = 'http://example2.com' WHERE duration < 15;
输出批量更新语句的内容如下:
Output
ALTER TABLE visits
UPDATE url = 'http://example2.com' WHERE duration < 15
Ok.
0 rows in set. Elapsed: 0.003 sec.
输出显示您的更新查询成功完成。输出中的 0 rows in set
表示查询没有返回任何行;这将适用于任何更新和删除查询。
批量删除行的示例语法与更新行类似,具有以下结构:
ALTER TABLE table_name DELETE WHERE filter_conditions;
要测试删除数据,请运行以下语句以删除所有 duration
小于 5 的行:
ALTER TABLE visits DELETE WHERE duration < 5;
批量删除语句的输出类似于:
Output
ALTER TABLE visits
DELETE WHERE duration < 5
Ok.
0 rows in set. Elapsed: 0.003 sec.
输出确认您已删除持续时间少于五秒的行。
要从表中删除列,语法将遵循以下示例结构:
ALTER TABLE table_name DROP COLUMN column_name;
通过运行以下命令删除您之前添加的 location
列:
ALTER TABLE visits DROP COLUMN location;
确认您已删除该列的 DROP COLUMN
输出将如下所示:
OutputALTER TABLE visits
DROP COLUMN
location String
Ok.
0 rows in set. Elapsed: 0.010 sec.
现在您已成功插入、更新和删除 visits
表中的行和列,您将在下一步中继续查询数据。
ClickHouse 的查询语言是 SQL 的自定义方言,具有适用于分析工作负载的扩展和函数。在此步骤中,您将运行选择和聚合查询以从 visits
表中检索数据和结果。
选择查询允许您检索按您指定的条件过滤的数据行和列,以及要返回的行数等选项。您可以使用 SELECT
语法选择数据的行和列。 SELECT
查询的基本语法是:
SELECT func_1(column_1), func_2(column_2) FROM table_name WHERE filter_conditions row_options;
执行以下语句以检索 url
为 http://example.com
的行的 url
和 duration
值。
SELECT url, duration FROM visits WHERE url = 'http://example2.com' LIMIT 2;
您将看到以下输出:
OutputSELECT
url,
duration
FROM visits
WHERE url = 'http://example2.com'
LIMIT 2
┌─url─────────────────┬─duration─┐
│ http://example2.com │ 10.5 │
└─────────────────────┴──────────┘
┌─url─────────────────┬─duration─┐
│ http://example2.com │ 13 │
└─────────────────────┴──────────┘
2 rows in set. Elapsed: 0.013 sec.
输出已返回与您指定的条件匹配的两行。现在您已经选择了值,您可以开始执行聚合查询。
聚合查询是对一组值进行操作并返回单个输出值的查询。在分析数据库中,这些查询经常运行,并且由数据库进行了很好的优化。 ClickHouse 支持的一些聚合函数是:
count
:返回符合指定条件的行数。
*sum
:返回选定列值的总和。
*avg
:返回所选列值的平均值。
一些 ClickHouse 特定的聚合函数包括:
uniq
:返回匹配的不同行的近似数量。
*topK
:使用近似算法返回特定列的最频繁值的数组。
为了演示聚合查询的执行,您将通过运行 sum
查询来计算访问的总持续时间:
SELECT SUM(duration) FROM visits;
您将看到类似于以下内容的输出:
Output
SELECT SUM(duration)
FROM visits
┌─SUM(duration)─┐
│ 63.7 │
└───────────────┘
1 rows in set. Elapsed: 0.010 sec.
现在,通过执行计算前两个 URL:
SELECT topK(2)(url) FROM visits;
您将看到类似于以下内容的输出:
OutputSELECT topK(2)(url)
FROM visits
┌─topK(2)(url)──────────────────────────────────┐
│ ['http://example2.com','http://example1.com'] │
└───────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.010 sec.
现在您已成功查询 visits
表,您将在下一步中删除表和数据库。
在本节中,您将删除 visits
表和 test
数据库。
删除表的语法遵循以下示例:
DROP TABLE table_name;
要删除 visits
表,请运行以下语句:
DROP TABLE visits;
您将看到以下输出,表明您已成功删除表:
outputDROP TABLE visits
Ok.
0 rows in set. Elapsed: 0.005 sec.
您可以使用 DROP database table_name
语法删除数据库。要删除 test
数据库,请执行以下语句:
DROP DATABASE test;
结果输出显示您已成功删除数据库。
Output
DROP DATABASE test
Ok.
0 rows in set. Elapsed: 0.003 sec.
您已在此步骤中删除表和数据库。现在您已经在 ClickHouse 实例中创建、更新和删除了数据库、表和数据,您将在下一节中启用对数据库服务器的远程访问。
如果您打算仅在本地将 ClickHouse 与在同一服务器上运行的应用程序一起使用,或者您的服务器上没有启用防火墙,则无需完成此部分。如果相反,您将远程连接到 ClickHouse 数据库服务器,则应执行此步骤。
目前,您的服务器启用了防火墙,禁止您的公共 IP 地址访问所有端口。您将完成以下两个步骤以允许远程访问:
修改 ClickHouse 的配置并允许它侦听所有接口。
*
添加防火墙规则,允许传入连接到端口 8123
,这是 ClickHouse 服务器运行的 HTTP 端口。
如果您在数据库提示符中,请键入 CTRL+D
退出它。
通过执行以下命令编辑配置文件:
sudo nano /etc/clickhouse-server/config.xml
然后取消注释包含 <!-- <listen_host>0.0.0.0</listen_host> -->
的行,如以下文件:
/etc/clickhouse-server/config.xml
...
<interserver_http_host>example.yandex.ru</interserver_http_host>
-->
<!-- Listen specified host. use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere. -->
<!-- <listen_host>::</listen_host> -->
<!-- Same for hosts with disabled ipv6: -->
<listen_host>0.0.0.0</listen_host>
<!-- Default values - try listen localhost on ipv4 and ipv6: -->
<!--
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
-->
...
保存文件并退出 nano
。对于要应用的新配置,通过运行以下命令重新启动服务:
sudo service clickhouse-server restart
您不会看到此命令的任何输出。 ClickHouse 的服务器在端口 8123
上侦听 HTTP 连接和端口 9000
用于来自 clickhouse-client
的连接。使用以下命令允许访问第二台服务器 IP 地址的两个端口:
sudo ufw allow from second_server_ip/32 to any port 8123
sudo ufw allow from second_server_ip/32 to any port 9000
您将看到两个命令的以下输出,表明您已启用对两个端口的访问:
OutputRule added
现在可以从您添加的 IP 访问 ClickHouse。如果需要,可以随意添加其他 IP,例如本地计算机的地址。
要验证您是否可以从远程计算机连接到 ClickHouse 服务器,请首先在第二台服务器上执行本教程第 1 步中的步骤,并确保在其上安装了 clickhouse-client
。
现在您已经登录到第二台服务器,通过执行以下命令启动客户端会话:
clickhouse-client --host your_server_ip
您将看到以下输出,表明您已成功连接到服务器:
OutputClickHouse client version 19.3.6.
Connecting to your_server_ip:9000 as user default.
Connected to ClickHouse server version 19.3.6 revision 54415.
hostname :)
在此步骤中,您已通过调整防火墙规则启用了对 ClickHouse 数据库服务器的远程访问。
您已在服务器上成功设置了 ClickHouse 数据库实例,并创建了数据库和表、添加了数据、执行了查询并删除了数据库。在 ClickHouse 的文档中,您可以阅读他们针对其他开源和商业分析数据库的 benchmarks 以及一般参考 documents。此外,features ClickHouse 产品包括跨多个服务器的分布式查询处理,通过将数据存储在不同的分片上来提高性能并防止数据丢失。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.digitalocean.com/community/tutorials/how-to-install-and-use-clickhouse-on-ubuntu-18-04
内容来源于网络,如有侵权,请联系作者删除!