云服务器内容精选
-
ClickHouse使用流程 ClickHouse是面向联机分析处理的列式数据库,其独立于Hadoop大数据体系,最核心的特点是压缩率和极速查询性能。同时支持SQL查询,且查询性能好,特别是基于大宽表的聚合分析查询性能非常优异,比其他分析型数据库速度快一个数量级。CloudTable ClickHouse集群管理还有以下功能: ClickHouse集群管理下,用户申请专属集群,按需使用,专属集群是物理隔离且不受其他业务影响,方便用户管理。 ClickHouse集群创建成功后,使用客户端访问集群,请参见以下章节。 准备弹性云服务。 使用客户端访问集群。 ClickHouse命令简介。 图1 ClickHouse使用流程 表1 ClickHouse使用流程 流程 子任务 说明 详细指导 准备工作 创建用户并授权使用CloudTable 使用CloudTable ClickHouse之前,您需要注册华为云账号并进行实名认证,给新账号授权。 将策略授予用户组,并将用户添加至用户组中从而使用户拥有对应的服务权限。 创建用户并授权使用CloudTable 创建集群 创建ClickHouse集群 使用ClickHouse执行任务前,需要创建一个ClickHouse集群。 创建ClickHouse集群 下载客户端 下载ClickHouse客户端 创建集群后,需要下载客户端并安装客户端,安装客户端后,用户才可以借助SSH工具连接集群。 ClickHouse手动安装客户端 准备弹性云服务 - 如果客户端工具的运行环境为Linux环境,您需要准备一台和ClickHouse集群在相同虚拟私有云的Linux弹性云服务器作为客户端主机。 如果客户端工具的运行环境为Windows环境,您需要准备一台和ClickHouse集群在相同虚拟私有云的Windows弹性云服务器作为客户端主机。 准备弹性云服务器 安装客户端 - 将下载的客户端放入E CS ,解压安装客户端。 4.4.3-使用客户端连接ClickHouse普通集群 连接集群 - 在ECS安装好MySQL客户端后,可用命令连接集群并进行业务操作。 ClickHouse手动安装客户端 父主题: 使用ClickHouse
-
创建本地复制表和分布式表 使用ReplicatedMergeTree引擎创建复制表。 详细的语法说明请参考:https://clickhouse.tech/docs/zh/engines/table-engines/mergetree-family/replication/#creating-replicated-tables。 例如,在default_cluster_1集群节点上和default数据库下创建表名为test的ReplicatedMergeTree表: CREATE TABLE default.test ON CLUSTER default_cluster_1 ( `EventDate` DateTime, `id` UInt64 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id; 表2 参数解释 参数 参数说明 ON CLUSTER 表示分布式DDL,即执行一次就可在集群所有实例上创建同样的本地表。 default_cluster_1 ClickHouse服务cluster等环境参数信息中查询到的cluster集群标识符。 ReplicatedMergeTree引擎族接收两个参数: ZooKeeper中该表相关数据的存储路径。 该路径必须在/clickhouse目录下,否则后续可能因为ZooKeeper配额不够导致数据插入失败。 为了避免不同表在ZooKeeper上数据冲突,目录格式必须按照如下规范填写: /clickhouse/tables/{shard}/default/test,其中/clickhouse/tables/{shard}为固定值,default为数据库名,test为创建的表名。 副本名称,一般用{replica}即可。 CREATE TABLE default.test ON CLUSTER default_cluster_1 ( `EventDate` DateTime, `id` UInt64 ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id ┌─host─────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐ │ node-group-1tXED0002 │ 9000 │ 0 │ │ 5 │ 3 │ │ node-group-1tXED0003 │ 9000 │ 0 │ │ 4 │ 3 │ │ node-master1dOnG │ 9000 │ 0 │ │ 3 │ 3 │ └────────────────────┴────┴─────┴──── ┴─────────── ┴──────────┘ ┌─host─────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐ │ node-master3QsRI │ 9000 │ 0 │ │ 2 │ 0 │ │ node-group-1tXED0001 │ 9000 │ 0 │ │ 1 │ 0 │ │ node-master2OXQS │ 9000 │ 0 │ │ 0 │ 0 │ └────────────────────┴────┴─────┴──── ┴─────────── ┴──────────┘ 6 rows in set. Elapsed: 0.189 sec. 使用Distributed引擎创建分布式表。 例如,以下将在default_cluster_1集群节点上和default数据库下创建名为test_all的Distributed表: CREATE TABLE default.test_all ON CLUSTER default_cluster_1 ( `EventDate` DateTime, `id` UInt64 ) ENGINE = Distributed(default_cluster_1, default, test, rand()); 表3 Distributed引擎参数解释 参数 参数说明 default_cluster_1 ClickHouse服务cluster等环境参数信息中查询到的cluster集群标识符。 default 本地表所在的数据库名称。 test 本地表名称。 rand (可选)分片键(sharding key)。 该键与config.xml中配置的分片权重(weight)一同决定写入分布式表时的路由,即数据最终落到哪个物理表上。它可以是表中一列的原始数据(如site_id),也可以是函数调用的结果,如上面的SQL语句采用了随机值rand()。注意该键要尽量保证数据均匀分布,另外一个常用的操作是采用区分度较高的列的哈希值,如intHash64(user_id)。 结果如下: ┌─host─────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐ │ node-group-1tXED0002 │ 9000 │ 0 │ │ 5 │ 0 │ │ node-master3QsRI │ 9000 │ 0 │ │ 4 │ 0 │ │ node-group-1tXED0003 │ 9000 │ 0 │ │ 3 │ 0 │ │ node-group-1tXED0001 │ 9000 │ 0 │ │ 2 │ 0 │ │ node-master1dOnG │ 9000 │ 0 │ │ 1 │ 0 │ │ node-master2OXQS │ 9000 │ 0 │ │ 0 │ 0 │ └────────────────────┴────┴─────┴──── ┴─────────── ┴──────────┘ 6 rows in set. Elapsed: 0.115 sec.
-
ClickHouse表数据操作 创建表后,可以插入数据到本地表。 例如插入数据到本地表test。 insert into test values(toDateTime(now()), rand()); 查询本地表信息。 例如查询表test数据信息: select * from test; 结果如下: SELECT * FROM test ┌───────────EventDate─┬─────────id─┐ │ 2020-11-05 21:10:42 │ 1596238076 │ └──────────────── ┴───────────┘ 1 rows in set. Elapsed: 0.002 sec. 查询Distributed分布式表。 例如分布式表test_all基于test创建,所以test_all表也能查询到和test相同的数据。 select * from test_all; 结果如下: SELECT * FROM test_all ┌───────────EventDate─┬─────────id─┐ │ 2020-11-05 21:10:42 │ 1596238076 │ └──────────────── ┴───────────┘ 1 rows in set. Elapsed: 0.004 sec. 切换登录节点为相同shard_num的shard节点,并且查询当前表信息,能查询到相同的表数据。 例如,退出原有登录节点:exit; 切换到节点node-group-1tXED0003: clickhouse client --host node-group-1tXED0003 --multiline --port 9440 --secure; 查询当前表信息: show tables; 结果如下: SHOW TABLES ┌─name─────┐ │ test │ │ test_all │ └────────┘ 查询本地表数据。例如在节点node-group-1tXED0003查询test表数据。 select * from test; 结果如下: SELECT * FROM test ┌───────────EventDate─┬─────────id─┐ │ 2020-11-05 21:10:42 │ 1596238076 │ └──────────────── ┴───────────┘ 1 rows in set. Elapsed: 0.005 sec. 切换到不同shard_num的shard节点,并且查询之前创建的表数据信息。 例如退出之前的登录节点node-group-1tXED0003: exit; 切换到node-group-1tXED0001节点。 clickhouse client --host node-group-1tXED0001 --multiline --port 9440 --secure; 查询test本地表数据,因为test是本地表所以在不同分片节点上查询不到数据。 select * from test; 结果如下: SELECT * FROM test Ok. 查询test_all分布式表数据,能正常查询到数据信息。 select * from test_all; 结果如下: SELECT * FROM test ┌───────────EventDate─┬─────────id─┐ │ 2020-11-05 21:12:19 │ 3686805070 │ └──────────────── ┴───────────┘ 1 rows in set. Elapsed: 0.002 sec.
-
常见问题 执行连接ClickHouse组件客户端命令后,登录报错“Connection refused”。 请检查当前集群是否为定制端口(在创建集群时将“组件端口”参数选择为“定制”),如果为定制端口,则需要将连接ClickHouse组件客户端命令中所使用的端口替换为下表中的“定制默认端口”。 配置参数 开源默认端口 定制默认端口 端口说明 interserver_http_port 9009 9009 用于在ClickHouse server间通信的http端口。 interserver_https_port 9010 9010 用于在ClickHouse server间通信的https端口。 http_port 8123 8123 用于通过http连接到ClickHouse server的端口。 https_port 8443 8443 用于通过https连接到ClickHouse server的端口。 tcp_port 9000 9000 用于客户端通过TCP连接到ClickHouse server的端口。 tcp_port_secure 9440 9440 用于客户端通过TCP SSL连接到ClickHouse server的端口。 lb_tcp_port 21424 21424 ClickHouseBalancer的TCP通信端口号。 lb_http_port 21425 21425 ClickHouseBalancer的Http通信端口号。 lb_https_port 21426 21426 ClickHouseBalancer的Https通信端口号。 lb_tcp_secure_port 21428 21428 ClickHouseBalancer的TCP SSL通信端口号。
-
查看ClickHouse服务cluster等环境参数信息 使用ClickHouse客户端连接到ClickHouse服务端。 查询集群标识符cluster等其他环境参数信息。 select cluster,shard_num,replica_num,host_name from system.clusters; 结果如下: SELECT cluster, shard_num, replica_num, host_name FROM system.clusters ┌─cluster───────────┬─shard_num─┬─replica_num─┬─host_name──────── ┐ │ default_cluster_1 │ 1 │ 1 │ node-master1dOnG │ │ default_cluster_1 │ 1 │ 2 │ node-group-1tXED0001 │ │ default_cluster_1 │ 2 │ 1 │ node-master2OXQS │ │ default_cluster_1 │ 2 │ 2 │ node-group-1tXED0002 │ │ default_cluster_1 │ 3 │ 1 │ node-master3QsRI │ │ default_cluster_1 │ 3 │ 2 │ node-group-1tXED0003 │ └─────────────── ┴────── ┴─────── ┴──────────────┘ 6 rows in set. Elapsed: 0.001 sec. 查询分片标识符shard和副本标识符replica。 select * from system.macros; 结果如下: SELECT * FROM system.macros ┌─macro───┬─substitution─────┐ │ id │ 76 │ │ replica │ 2 │ │ shard │ 3 │ └────── ┴────────────┘ 3 rows in set. Elapsed: 0.001 sec.
-
ClickHouse数据类型说明 MRS 的ClickHouse服务数据类型如表1所示。 ClickHouse完整数据类型介绍,请参考开源官方数据类型介绍。 表1 ClickHouse数据类型 分类 关键字 数据类型 描述 数据类型 Int8 Int8 取值范围:【-128,127】 Int16 Int16 取值范围:【-32768,32767】 Int32 Int32 取值范围:【-2147483648,2147483647】 Int64 Int64 取值范围:【-9223372036854775808,9223372036854775807】 浮点类型 Float32 单精度浮点数 同C语言Float类型,单精度浮点数在机内占4个字节,用32位二进制描述。 Float64 双精度浮点数 同C语言Double类型,双精度浮点数在机内占8个字节,用64位二进制描述。 Decimal类型 Decimal Decimal 有符号的定点数,可在加、减和乘法运算过程中保持精度。支持几种写法: Decimal(P, S) Decimal32(S) Decimal64(S) Decimal128(S) 说明: P:精度,有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。 S:规模,有效范围:[0:P],决定数字的小数部分中包含的小数位数。 字符串类型 String 字符串 字符串可以是任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他 DBMSs 中的VARCHAR、BLOB、CLOB 等类型。 FixedString 固定字符串 当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率。可以有效存储在FixedString类型的列中的值的示例: 二进制表示的IP地址 语言代码(ru_RU, en_US … ) 货币代码(RUB … ) 二进制表示的哈希值(MD5使用FixedString(16),SHA256使用FixedString(32)) 时间日期类型 Date 日期 用两个字节存储,表示从 1970-01-01(无符号)到当前的日期值。日期中没有存储时区信息。 DateTime 时间戳 用四个字节(无符号的)存储 Unix 时间戳。允许存储与日期类型相同的范围内的值。最小值为 1970-01-01 00:00:00。时间戳类型值精确到秒(没有闰秒)。时区使用启动客户端或服务器时的系统时区。 DateTime64 DateTime64 此类型允许以日期(date)加时间(time)的形式来存储一个时刻的时间值。 布尔型 Boolean Boolean ClickHouse没有单独的类型来存储布尔值。可以使用UInt8 类型,取值限制为0或1。 数组类型 Array Array Array(T),由 T 类型元素组成的数组。T 可以是任意类型,包含数组类型。但不推荐使用多维数组,ClickHouse对多维数组的支持有限。例如,不能在MergeTree表中存储多维数组。 元组类型 Tuple Tuple Tuple(T1, T2, ...),元组,其中每个元素都有单独的类型,不能在表中存储元组(除了内存表)。它们可以用于临时列分组。在查询中,IN表达式和带特定参数的 lambda 函数可以来对临时列进行分组。 Domains数据类型 Domains Domains Domains类型是特定实现的类型: IPv4是与UInt32类型保持二进制兼容的Domains类型,用于存储IPv4地址的值。它提供了更为紧凑的二进制存储的同时支持识别可读性更加友好的输入输出格式。 枚举类型 Enum8 Enum8 取值范围:【-128,127】 Enum 保存 'string'= integer 的对应关系,例如:Enum8('hello' = 1, 'world' = 2) Enum16 Enum16 取值范围:【-32768,32767】 可为空 Nullable Nullable 除非在ClickHouse服务器配置中另有说明,否则NULL是任何Nullable类型的默认值。Nullable类型字段不能包含在表索引中。 可以与TypeName的正常值存放一起。例如,Nullable(Int8) 类型的列可以存储 Int8 类型值,而没有值的行将存储 NULL。 嵌套类型 nested nested 嵌套的数据结构就像单元格内的表格。嵌套数据结构的参数(列名和类型)的指定方式与CREATE TABLE查询中的指定方式相同。每个表行都可以对应于嵌套数据结构中的任意数量的行。 示例:Nested(Name1 Type1, Name2 Type2, …)