-
查看步骤 创建Catalog。 CREATE CATA
LOG jdbc_mysql PROPERTIES (
"type"="jdbc",
"user"="root",
"password"="******",
"jdbc_url" = "JDBC连接串",
"driver_url" = "mysql-connector-java-8.0.25.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver"
); 查看Catalog。 show catalogs; 图1 查看Catalog 切换到创建的Catalog:switch Catalog名称。 图2 切换到创建的Catalog 查看映射过来的数据库。 show databases; 图3 查看数据库 使用数据库。 use 数据库名; 图4 使用数据库 查看数据库表。 show tables; 图5 查看数据库表
-
语法 CREATE CATALOG [IF NOT EXISTS] catalog_name
PROPERTIES ("key"="value", ...); 表1 参数说明 参数 必须 默认值 说明 user 是 - 对应数据库的用户名。 password 是 - 对应数据库的密码。 jdbc_url 是 - JDBC连接串。 driver_url 是 - JDBC Driver Jar包名称。 driver_class 是 - JDBC Driver Class名称。 lower_case_table_names 否 "false" 是否以小写的形式同步jdbc外部数据源的库名和表名。 only_specified_database 否 "false" 指定是否只同步指定的database。 include_database_list 否 "" 当only_specified_database=true时,指定同步多个database,以‘,’分隔。db名称是大小写敏感的。 exclude_database_list 否 "" 当only_specified_database=true时,指定不需要同步的多个database,以‘,’分隔。db名称是大小写敏感的。 driver_url可以通过以下三种方式指定: 文件名。如mysql-connector-java-5.1.47.jar。需将Jar包预先存放在FE和BE部署目录的jdbc_drivers/目录下。系统会自动在这个目录下寻找。 本地绝对路径。如file:///path/to/mysql-connector-java-5.1.47.jar。需将Jar包预先存放在所有FE/BE节点指定的路径下。 Http地址。如:https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/jdbc_driver/mysql-connector-java-5.1.47.jar。系统会从这个http地址下载Driver文件。仅支持无认证的http服务。 only_specified_database: 在jdbc连接时可以指定连接到哪个database/schema,如:mysql中jdbc_url中可以指定database, pg的jdbc_url中可以指定currentSchema。 include_database_list:仅在only_specified_database=true时生效,指定需要同步的database,以‘,’分隔,db名称是大小写敏感的。 exclude_database_list:仅在only_specified_database=true时生效,指定不需要同步的多个database,以‘,’分隔,db名称是大小写敏感的。 当include_database_list和exclude_database_list有重合的database配置时,exclude_database_list会优先生效。 如果使用该参数时连接oracle数据库,要求使用jdbc8.jar以上版本jar包。
-
CloudTable集群能够提供什么服务?
表格存储服务 (CloudTable Service,简称CloudTable)为用户提供专属集群,即开即用,适合业务吞吐量大,时延要求低的用户。 CloudTable提供基于HBase全托管的NoSQL服务,提供毫秒级随机读写能力,适用于海量(半)结构化、时空、时序数据存储,可被广泛应用于物联网、车联网、金融、智慧城市、气象等行业。 CloudTable提供基于Doris全托管的实时数仓服务,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也可以支持高吞吐的复杂分析场景。因此,Doris能够较好的满足报表分析、即席查询、统一数仓构建、
数据湖 联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB实验平台、日志检索分析、用户画像分析、订单分析等应用。 ClickHouse是一款开源的面向联机分析处理的列式数据库,其独立于Hadoop大数据体系,最核心的特点是压缩率和极速查询性能。同时,ClickHouse支持SQL查询,且查询性能好,特别是基于大宽表的聚合分析查询性能非常优异,比其他分析型数据库速度快一个数量级。 CloudTable提供基于StarRocks全托管分析型
数据仓库 ,可以灵活创建和管理集群以及数据。使用向量化、MPP架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。 父主题: 产品咨询类
-
处理办法 使用ssh工具连接Doris集群,请参考连接Doris集群。 执行以下命令查看指定业务用户的最大连接数配置,以用户“test”为例。 SHOW PROPERTY FOR 'test' LIKE '%max_user_connections%'; 执行如下命令调大指定业务用户的最大连接数配置,例如,将用户“test”的最大连接数从100调整为200。 SET PROPERTY FOR 'test' 'max_user_connections' = '200'; 如果修改用户连接数还是报错,请联系服务技术人员。
-
处理办法 Doris建表是按照Partition粒度依次创建的。当一个Partition创建失败时,可能会报这个错误。即使不使用Partition,当建表出现问题时,也会报Failed to create partition,因为如前文所述,Doris会为没有指定Partition的表创建一个不可更改的默认的Partition。 当遇到这个错误时,通常是BE在创建数据分片时遇到了问题。可以参照以下步骤排查: 在fe.log中,查找对应时间点的Failed to create partition日志。在该日志中,会出现一系列类似{10001-10010}字样的数字对。数字对的第一个数字表示Backend ID,第二个数字表示Tablet ID。如上这个数字对,表示ID为10001的Backend上,创建ID为10010的Tablet失败了。 前往对应Backend的be.INFO日志,查找对应时间段内,tablet id相关的日志,可以找到错误信息。 以下罗列一些常见的tablet创建失败错误,包括但不限于: BE没有收到相关task,此时无法在be.INFO中找到tablet id相关日志或者BE创建成功,但汇报失败。 预分配内存失败。可能是表中一行的字节长度超过了 100KB。 Too many open files。打开的文件句柄数超过了Linux系统限制。需修改Linux系统的句柄数限制。 如果创建数据分片时超时,也可以通过在fe.conf中设置tablet_create_timeout_second=xxx以及max_create_table_timeout_second=xxx来延长超时时间。其中tablet_create_timeout_second默认是1秒,max_create_table_timeout_second默认是60秒,总体的超时时间为min(tablet_create_timeout_second * replication_num, max_create_table_timeout_second)。
-
步骤 登录
表格存储 服务控制台。 左上角选择区域。 单击右上角的购买集群按钮,进入“购买集群”页面。 参考下面表格配置集群的基本信息。 表1 区域 参数 参数说明 区域 集群的工作区域。 选择集群节点实际工作区域。 有关区域的详细信息,请参见地区和终端节点。 可用区域 选择集群工作区域下关联的可用区。目前ClickHouse支持的可用区请参见区域和可用区。 计费模式 计费模式有按需付费和包年/包月。 订购周期 当计费模式选择包年/包月时,才会出现此选项。客户根据需求选择订购时间。 自动续费 在购买页面勾选此选项,集群到期后会自动续费,不勾选集群到期需要手动续费。 表2 集群和网络配置 参数 参数说明 名称 集群的名称。 集群名称在4位到32位之间,必须以字母开头,可以包含字母、数字或者中划线,不能包含其他的特殊字符,不区分大小写。 虚拟私有云 VPC即虚拟私有云,是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。创建集群时不支持使用共享VPC。 默认即可。如果没有虚拟私有云,请单击“查看虚拟私有云”进入虚拟私有云,创建一个新的虚拟私有云。 子网 指定虚拟私有云的一个子网。 集群使用子网实现与其他网络的隔离,并独享所有网络资源,以提高网络安全。 安全组 安全组用来实现安全组内和安全组间弹性云服务器的访问控制,加强弹性云服务器的安全保护。用户可以在安全组中定义各种访问规则,这些规则可以限定弹性云服务器的哪些端口或者协议可以访问,这些访问规则可以作用在进出虚拟机的网络访问上。当弹性云服务器加入该安全组后,即受到这些访问规则的保护。不属于该安全组的弹性云服务器,是无法同安全组内的弹性云服务器通信的。 您可以选择使用已有的安全组,或者单击“查看安全组”创建新的安全组。 关于安全组的更多信息,请参见《虚拟私有云用户指南》中的安全组。 说明: CloudTable集群支持多安全组和修改安全组。安全组规则如下: 允许外部使用ping命令验证安全组内实例的网络连通性。 允许安全组内实例通过内网网络相互通信。 允许安全组内实例通过内网网络通信。 集群更换安全组过程中有短暂的业务中断,请谨慎操作。为了更好的网络性能,选择安全组时不要多于5个。 数据引擎 选择需要创建的数据组件类型。 集群存储模式 集群存储模式为存算一体。 ClickHouse内核版本 默认即可。 集群高可用 开启集群高可用:在单个分片提供2个副本,默认3个ZooKeeper节点。 关闭集群高可用:提供单节点clickhouse,仅用于测试,单节点clickhouse提供一个副本、一个分片,不支持节点扩容,该模式不可用于生产环境。 说明: 单节点不支持扩容,不支持数据迁移。 单节点用于非生产环境。 单节点用户需要建立非Replicate表。 建表示例: CREATE TABLE test_p (`EventDate` DateTime,`CounterID` UInt32,`UserID` UInt32,`ver` UInt16)ENGINE = ReplacingMergeTree()PARTITION BY sipHash64(CounterID) ORDER BY (CounterID, EventDate, intHash32(UserID))SAMPLE BY intHash32(UserID)SETTINGS index_granularity = 8192; 表3 计算节点参数说明 参数 参数说明
云存储 计算规格 请根据业务需求合理选择计算规格。在计算规格列表中展示了每一种计算规格单个节点的CPU、内存和建议使用场景。 说明: 支持的计算规格: 8U32G。 8U64G。 16U64G。 16U128G。 32U128G。 32U256G。 64U256G。 64U512G。 128U512G。 存储规格 选ClickHouse计算节点的磁盘规格、容量。 支持的存储规格: 高IO。 通用型SSD。 超高IO。 极速型SSD。 容量范围为500~10000GB/节点之间。 节点数量 多节点:选择集群中的节点个数,支持的节点范围为2~20之间。 单节点个数默认为1。 本地SSD(不支持扩容) 计算规格 8U32G(本地盘容量:1.6T)。 8U64G(本地盘容量:1.6T)。 16U64G(本地盘容量:3.2T)。 16U128G(本地盘容量:3.2T)。 32U128G(本地盘容量:6.4T)。 32U256G(本地盘容量:6.4T)。 存储规格 默认支持本地SSD盘。 节点数量 多节点:选择集群中的节点个数,支持的节点范围为2~20之间。 单节点个数默认为1。 表4 ZooKeeper节点参数说明 参数 参数说明 计算规格 请根据业务需求合理选择计算规格。在计算规格列表中展示了每一种计算规格单个节点的CPU、内存和建议使用场景。 说明: 支持的计算规格: 4U8G(此规格不能用于生产环境)。 4U16G。 8U32G。 16U64G。 32U128G。 ZooKeeper小规格只包含4U8G、4U16G,生产环境建议选择8U32G及以上规格。 存储规格 默认超高IO数据盘,容量100GB/节点。 节点数量 集群中的节点数量,默认为3。 表5 用户名密码参数 参数 参数说明 用户名 管理用户,用于连接集群,默认为admin,不可修改。 密码 设置admin用户密码。 密码复杂度要求如下: 8~16个字符。 至少包含以下字符中的4种:大写字母,小写字母、数字、特殊字符($@!%*?&)。 不能与用户名或倒序用户名相同。 强弱密码检查。 说明: 请妥善保管并定期更新密码,避免安全风险。 确认密码 设置admin用户密码。 是否开启通道加密 通过https端口和安全tcp端口访问clickhouse,保证客户数据通信加密。 创建集群开启安全通道加密选项,后续无法关闭。 创建集群选择ZooKeeper节点未开启安全通道加密选项,后续可在集群详情页面开启。 是否开启冷热分离 打开开关,集群支持冷热分离特性,将数据分类存储在不同介质上,有效降低存储成本。关闭开关,集群不支持冷热分离特性。 企业项目 企业项目管理帮助您将相关的资源(如具有相同使用用途的资源)集中在一起,按企业项目的方式来管理云资源。 说明: 当企业业务发生变化,原用户不再拥有企业项目的使用权限时,可将这些用户与该企业项目的关联关系删除。 可进行单个删除和批量删除。 当用户与企业项目的关联关系被删除后,该用户将无法管理该企业项目,如需再次使用,需要重新给该用户关联企业项目。 配置好参数,单击“立即购买”。 进“规格详情”页面,确认集群规格订单信息,单击“提交”,成功提交集群创建任务。 单击“返回集群管理列表”,可以查看到集群创建的状态。 集群创建需要时间,请您耐心等待。所创集群的初始状态为“创建中”,创建成功后状态更新为“服务中”。 如果创建的集群计费模式为包年/包月,单击提交,成功提交集群创建任务。 单击“去支付”,跳转到购买页面,确认信息后,选择合适的支付方式,确认付款。 返回控制台,查看集群状态,集群创建需要时间,请您耐心等待。所创集群的初始状态为“创建中”,创建成功后状态更新为“服务中”。
-
基础概念 Internal Catalog Doris原有的Database和Table都将归属于Internal Catalog。Internal Catalog是内置的默认Catalog,用户不可修改或删除。 External Catalog 可以通过CREATE CATALOG命令创建一个External Catalog。创建后,可以通过SHOW CATALOGS命令查看已创建的Catalog。 切换Catalog 用户登录Doris后,默认进入Internal Catalog,因此默认的使用和之前版本并无差别,可以直接使用SHOW DATABASES,USE DB等命令查看和切换数据库。 用户可以通过SWITCH命令切换Catalog。如: SWITCH internal;
SWITCH hive_catalog; 切换后,可以直接通过SHOW DATABASES,USE DB等命令查看和切换对应Catalog中的Database。Doris会自动通过Catalog中的Database和Table。用户可以像使用Internal Catalog一样,对External Catalog中的数据进行查看和访问。 当前,Doris只支持对External Catalog中的数据进行只读访问。 删除Catalog External Catalog中的Database和Table都是只读的。但是可以删除Catalog(Internal Catalog无法删除)。可以通过DROP CATALOG命令删除一个External Catalog。 该操作仅会删除Doris中该Catalog的映射信息,并不会修改或变更任何外部数据目录的内容。 Resource Resource是一组配置的集合。用户可以通过CREATE RESOURCE命令创建一个Resource。之后可以在创建Catalog时使用这个Resource。 一个Resource可以被多个Catalog使用,以复用其中的配置。
-
Kerberos介绍 Hadoop社区版本提供两种认证方式Kerberos认证(安全模式)和Simple认证(普通模式),在创建集群时,
MRS 支持配置是否启用Kerberos认证。 在安全模式下MRS集群统一使用Kerberos认证协议进行安全认证。 功能 使用Kerberos的系统在设计上采用“客户端/服务器”结构与AES等加密技术,并且能够进行相互认证(即客户端和服务器端均可对对方进行身份认证)。可以用于防止窃听、防止replay攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。 使用前提 需要Kerberos客户端、keytab路径、Kerberos认证用户名称、客户端配置krb5.conf文件。 原理结构图 Kerberos原理架构图如下图所示,详细介绍请参见MRS服务的安全认证原理以及认证机制章节。 图1 原理架构图 表1 参数说明 参数 说明 Application Client 应用客户端,通常是需要提交任务(或者作业)的应用程序。 Application Server 应用服务端,通常是应用客户端需要访问的应用程序。 Kerberos 提供安全认证的服务。 KerberosAdmin 提供认证用户管理的进程。 KerberosServer 提供认证票据分发的进程。
-
数据类型表 表1 数据类型表 分类 关键字 数据类型 描述 整数类型 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地址(IPv6使用FixedString(16)) 语言代码 货币代码(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地址的值。它提供了更为紧凑的二进制存储的同时支持识别可读性更加友好的输入输出格式。 IPv6是与FixedString(16)类型保持二进制兼容的Domain类型,用于存储IPv6地址的值。它提供了更为紧凑的二进制存储的同时支持识别可读性更加友好的输入输出格式。 枚举类型 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, …)
-
Distributed表引擎 Distributed表引擎本身不存储任何数据,而是作为数据分片的透明代理,能够自动路由数据到集群中的各个节点,分布式表需要和其他本地数据表一起协同工作。分布式表会将接收到的读写任务分发到各个本地表,而实际上数据的存储在各个节点的本地表中。 图2 Distributed Distributed表引擎创建模板: ENGINE = Distributed(cluster_name, database_name, table_name, [sharding_key]) 表6 Distributed表参数说明 参数 说明 cluster_name 集群名称,在对分布式表执行读写的过程中,使用集群的配置信息查找对应的ClickHouse实例节点。 database_name 数据库名称。 table_name 数据库下对应的本地表名称,用于将分布式表映射到本地表上。 sharding_key 分片键(可选参数),分布式表会按照这个规则,将数据分发到各个本地表中。 使用示例。 先创建一个表名为demo的ReplicatedMergeTree本地表。 CREATE TABLE default.demo ON CLUSTER default_cluster( `EventDate` DateTime, `id` UInt64)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/demo', '{replica}') PARTITION BY toYYYYMM(EventDate) ORDER BY id; 基于本地表demo创建表名为demo_all的Distributed表。 CREATE TABLE default.demo_all ON CLUSTER default_cluster( `EventDate` DateTime, `id` UInt64)ENGINE = Distributed(default_cluster, default, demo, rand()); 分布式表创建规则。 创建Distributed表时需加上on cluster cluster_name,这样建表语句在某一个ClickHouse实例上执行一次即可分发到集群中所有实例上执行。 分布式表通常以本地表加“_all”命名。它与本地表形成一对多的映射关系,之后可以通过分布式表代理操作多张本地表。 分布式表的表结构尽量和本地表的结构一致。如果不一致,在建表时不会报错,但在查询或者插入时可能会抛出异常。
-
MergeTree 建表语法。 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER ClickHouse集群名]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...] 使用示例。 CREATE TABLE default.test (name1 DateTime,name2 String,name3 String,name4 String,name5 Date) ENGINE = MergeTree() PARTITION BY toYYYYMM(name5) ORDER BY (name1, name2) SETTINGS index_granularity = 8192; 示例参数说明: 表2 参数说明 参数 说明 ENGINE = MergeTree() MergeTree表引擎。 PARTITION BY toYYYYMM(name5) 分区,示例数据将以月份为分区,每个月份一个文件夹。 ORDER BY 排序字段,支持多字段的索引排序,第一个相同的时候按照第二个排序依次类推。 index_granularity = 8192 排序索引的颗粒度,每8192条数据记录一个排序索引值。 如果被查询的数据存在于分区或排序字段中,能极大降低数据查找时间。
-
SummingMergeTree SummingMergeTree表引擎用于对主键列进行预先聚合,将所有相同主键的行合并为一行,从而大幅度降低存储空间占用,提升聚合计算性能。 建表语句。 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER ClickHouse集群名]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = SummingMergeTree([columns])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...] 使用示例。 创建一个SummingMergeTree表testTable。 CREATE TABLE testTable(id UInt32,value UInt32)ENGINE = SummingMergeTree() ORDER BY id; testTable表中插入数据。 INSERT INTO testTable Values(5,9),(5,3),(4,6),(1,2),(2,5),(1,4),(3,8);
INSERT INTO testTable Values(88,5),(5,5),(3,7),(3,5),(1,6),(2,6),(4,7),(4,6),(43,5),(5,9),(3,6); 在未合并parts查询所有数据。 SELECT * FROM testTable; 查询结果。 ┌─id─┬─value─┐
│ 1 │ 6 │
│ 2 │ 5 │
│ 3 │ 8 │
│ 4 │ 6 │
│ 5 │ 12 │
└────┴───────┘
┌─id─┬─value─┐
│ 1 │ 6 │
│ 2 │ 6 │
│ 3 │ 18 │
│ 4 │ 13 │
│ 5 │ 14 │
│ 43 │ 5 │
│ 88 │ 5 │
└────┴───────┘ ClickHouse还没有汇总所有行,需要通过ID进行汇总聚合,需要用到sum和GROUP BY子句。 SELECT id, sum(value) FROM testTable GROUP BY id; 查询结果。 ┌─id─┬─sum(value)─┐
│ 4 │ 19 │
│ 3 │ 26 │
│ 88 │ 5 │
│ 2 │ 11 │
│ 5 │ 26 │
│ 1 │ 12 │
│ 43 │ 5 │
└────┴────────────┘ 手工执行合并操作。 OPTIMIZE TABLE testTable; 查询表数据。 SELECT * FROM testTable; 查询结果。 ┌─id─┬─value─┐
│ 1 │ 12 │
│ 2 │ 11 │
│ 3 │ 26 │
│ 4 │ 19 │
│ 5 │ 26 │
│ 43 │ 5 │
│ 88 │ 5 │
└────┴───────┘ SummingMergeTree根据ORDER BY排序键作为聚合数据的条件Key。即如果排序key是相同的,则会合并成一条数据,并对指定的合并字段进行聚合。 后台执行合并操作时才会进行数据的预先聚合,而合并操作的执行时机无法预测,所以可能存在部分数据已经被预先聚合、部分数据尚未被聚合的情况。因此,在执行聚合计算时,SQL中仍需要使用GROUP BY子句。
-
Replicated*MergeTree引擎 ClickHouse中的所有MergeTree家族引擎前面加上Replicated就成了支持副本的合并树引擎。 图1 合并树引擎图 Replicated表引擎的创建模板: ENGINE = Replicated*MergeTree('ZooKeeper存储路径','副本名称', ...) 表5 参数表 参数 说明 ZooKeeper存储路径 ZooKeeper中该表相关数据的存储路径,建议规范化,如:/clickhouse/tables/{shard}/数据库名/表名。 副本名称 一般用{replica}即可。
-
CollapsingMergeTree CollapsingMergeTree表引擎用于消除ReplacingMergeTree表引擎的功能限制。该表引擎要求在建表语句中指定一个标记列Sign,按照Sign的值将行分为两类:Sign=1的行称为状态行,用于新增状态。Sign=-1的行称为取消行,用于删除状态。 建表语句。 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER ClickHouse集群名]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = CollapsingMergeTree(sign)
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
-
VersionedCollapsingMergeTree 为了解决CollapsingMergeTree表引擎乱序写入导致无法正常折叠(删除)问题,云数据库ClickHouse提供了VersionedCollapsingMergeTree表引擎,在建表语句中新增一列Version,用于在乱序情况下记录状态行与取消行的对应关系。后台Compaction时会将主键相同、Version相同、Sign相反的行折叠(删除)。 建表语句。 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER ClickHouse集群名]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = VersionedCollapsingMergeTree(sign, version)
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]