让决策更智能
新一代智能数据分析平台

极速引擎(高性能查询表)使用指南

观小策发表于:2021年12月14日 14:25:42更新于:2022年04月28日 11:38:03

“高性能查询表”功能简介

        观远数据在2019年引入ClickHouse(简称CK)作为海量数据计算查询的加速组件。最开始落地的客户主要有全家、七色纺,单表数据量达12亿以上。ClickHouse相对于原有的Spark计算引擎,在实时查询与OLAP计算方面表现出了强大,甚至是彪悍的性能优势。

00161b8344d52539c8e5b9bd4a56519

        然而开始的时候,ClickHouse与观远BI平台之间是完全解耦的使用方式。我们需要通过数据开发平台,把BI平台内处理好的数据集导入到ClickHouse中,然后再通过新建ClickHouse账户、直连数据集来进行卡片端的数据查询与分析。这个过程中,我们需要额外部署一套数据开发平台,额外创建数据集,整个数据加速的过程被割裂开来,用户使用门槛也比较高。

        2.7.0版本中,观远重磅推出“高性能查询表”功能,将ClickHouse的加速能力与BI平台进行更好地融合,用户不再需要进行繁琐的数据迁移,可以一键将GuanIndex数据集、ETL数据集转换为高性能查询表,依靠ClickHouse进行分析与查询加速。

        所有GuanIndex数据集、文件数据集、ETL输出数据集都可以支持“高性能查询表”的加速功能。我们在数据集详情页,新增了“高级选项”页签,用户可以在这里将普通的数据集切换为“高性能查询表”模式,这样数据就会被导入ClickHouse内,卡片端进行数据查询计算时就会直连ClickHouse进行加速查询。

“高性能查询表”使用方式

配置“高性能查询表”

       在配置“高性能查询表”模式时,用户需要设置分区字段——分区是为了数据在ClickHouse内存储时能更好地分片。合理的分区可以大量减少数据查询时的全表扫描。我们一般建议使用日期字段来做分区,分区方式建议设置为“月”或者“年”。使用日期字段做分区,可以有效地控制分区数量,不至于把分区做得过粗或者过细。如果没有日期字段,也可以谨慎选择其他字段进行分区,这时一定要控制好分区字段的枚举数量,一定一定不要选择类似订单ID之类的流水号,或者数值类字段作为分区字段。
00161b8373f6e2772d80faea422a345


       配置完分区字段后,点击“确认”即可以开始模式切换。数据集数据量大的时候,数据导入到ClickHouse需要花费一定的时间,请耐心等候。内部测试,1000万行*20列的数据集导入ClickHouse花费2min左右。数据集更新也会触发ClickHouse内的数据重新导入,我们建议高性能查询表更新频率不超过一天一次。

       以下就是一个配置了查询加速功能的ETL输出数据集,我们看到表面看起来它似乎与一般的ETL输出数据集并无二异。但我们在使用它创建卡片时,却是利用ClickHouse来做为查询引擎,能够提供飞一般的急速体验。

00161b8375c8e9f45fa6306d272366a

使用“高性能查询表”

       使用高性能查询表创建卡片时,需要遵守ClickHouse的SQL语法。目前ClickHouse不支持窗口函数,所以请不要在基于高性能查询表创建的卡片中使用窗口函数。

       ClickHouse作为一个高性能的联机分析(OLAP)列式数据库引擎,在提供急速的终端查询体验的同时,对内存的消耗也是比较大的。因此,如果客户需要部署带“高性能查询表”功能(或实时数据引擎功能)的BI服务器,则:

  • 单节点模式下,最少需要提供16核,128G内存的硬件设施。

  • 推荐ClickHouse独立部署,用来部署ClickHouse的服务器最低配置要求为8核64G,500G SSD硬盘。同时ClickHouse也可支持分布式横向扩展,用来提升查询性能。

  • 也可使用云上ClickHouse设施(https://www.aliyun.com/product/clickhouse)。

适用场景

       “高性能查询表”适用于数据量大于等于1000万行以上的数据集,可大大加速卡片端数据查询的效率,但在功能层面会有所限制,比如不能使用窗口函数。此外,高性能查询表生成和更新需要花费更多的时间,建议更新频率不超一天一次。数据量小于1000万行的数据集,本身基于Spark计算已经能提供较好的响应体验的,一般不建议使用“高性能查询表”。

       “高性能查询表”特别适合海量数据下的OLAP查询,适合在大宽表上做任意维度的数据聚合、切片(筛选),也可以做明细数据的查询。这些查询相比直接使用Spark作为计算引擎,一般都能提供更好的即席查询性能。

       下图为ClickHouse的性能参考指标(未设置合理分区,测试数据仅作参考):

00161b8387d5f3c29e22016ba2c5dde

上图测试数据未必完全合理,但从结果中我们可以总结归纳几个“高性能查询表”使用的原则:

  • 尽量不要在细粒度的维度上去做聚合运算,如果明确知道查询的就是明细数据,那么直接使用“明细表”来查询将获得更好的性能体验。

  • 查询时带上分区字段相关的筛选条件,将能大幅提升查询效率。反过来,分区字段在设计的时候也要提前考虑常用的查询筛选有哪些。

总结

      相比于开源社区的其他几项分析型技术,如Druid、Presto、Impala、Kylin、ElasticSearch等,ClickHouse是一套更完善的解决方案,它自包含了存储和计算能力(无需额外依赖其他存储组件),完全自主实现了高可用,而且支持完整的SQL语法包括JOIN等,技术上有着明显优势。相比于hadoop体系,以数据库的方式来做大数据处理更加简单易用,学习成本低且灵活度高。

    您需要登录后才可以回复