云服务器内容精选

  • Replicated*MergeTree引擎 ClickHouse中的所有MergeTree家族引擎前面加上Replicated就成了支持副本的合并树引擎。 Replicated系列引擎借助ZooKeeper实现数据的同步,创建Replicated复制表时通过注册到ZooKeeper上的信息实现同一个分片的所有副本数据进行同步。 Replicated表引擎的创建模板: ENGINE = Replicated*MergeTree('ZooKeeper存储路径','副本名称', ...) Replicated表引擎需指定两个参数: ZooKeeper存储路径:ZooKeeper中该表相关数据的存储路径,建议规范化,如:/clickhouse/tables/{shard}/数据库名/表名。 副本名称,一般用{replica}即可。
  • Distributed表引擎 Distributed表引擎本身不存储任何数据,而是作为数据分片的透明代理,能够自动路由数据到集群中的各个节点,分布式表需要和其他本地数据表一起协同工作。分布式表会将接收到的读写任务分发到各个本地表,而实际上数据的存储在各个节点的本地表中。 图1 Distributed Distributed表引擎的创建模板: ENGINE = Distributed(cluster_name, database_name, table_name, [sharding_key]) Distributed表参数解析如下: cluster_name:集群名称,在对分布式表执行读写的过程中,使用集群的配置信息查找对应的ClickHouse实例节点。 database_name:数据库名称。 table_name:数据库下对应的本地表名称,用于将分布式表映射到本地表上。 sharding_key:分片键(可选参数),分布式表会按照这个规则,将数据分发到各个本地表中。 Distributed表引擎使用示例: --先创建一个表名为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 --基于本地表test创建表名为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()) 分布式表创建规则: 创建Distributed表时需加上on cluster cluster_name,这样建表语句在某一个ClickHouse实例上执行一次即可分发到集群中所有实例上执行。 分布式表通常以本地表加“_all”命名。它与本地表形成一对多的映射关系,之后可以通过分布式表代理操作多张本地表。 分布式表的表结构尽量和本地表的结构一致。如果不一致,在建表时不会报错,但在查询或者插入时可能会发生异常。
  • ClickHouse数据类型说明 本章节介绍 MRS 的ClickHouse服务数据类型。 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 … ) 货币代码(USD, 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, …) 父主题: ClickHouse概述