当前位置: 首页 > 网络应用技术

在SQL聚合功能的 - 深度解释中

时间:2023-03-06 23:52:24 网络应用技术

  本文分享了华为云社区的“ GaussDB(DWS)SQL操作函数”,“ GaussDB(DWS)SQL Advanced SQL操作”,作者:两杯咖啡。

  收集操作是SQL语言中另一种常用的基本操作,除了扫描,投影和连接。它主要用于分组质量数据,然后在小组中执行统计计算。在AP方案中,通常面临大规模数据处理的情况,最终用户希望通过大量数据获得摘要信息,并使用聚会的使用。操作将被更广泛地使用。本文从基本的收集操作开始,介绍常用的SQL语法和一些扩展的收集功能。同时,它将讨论在GaussDB(DWS)中聚集的一些相关优化想法。

  SQL收集操作的典型语法是:

  基本要素和概念如下:

  在SQL中,通过组通过组实现了聚合操作条款,然后遵循收集后续组,这可以是列名称,也可以是该层中输出列的顺序编号,从1开始。

  收集数据包表明,此聚集操作的值是包装在哪个列中的,并且具有相等的聚集数据包值的金属组将分为同一组。收集数据包可以是一个或多个。

  填充聚合函数后,将每个组的统计计算功能分为简单且复杂的浓缩函数。常用的简单收集功能包括以下五种类型:

  笔记:

  聚合操作后,这种情况是分组进行过滤。收集组过滤条件有条件,聚集后过滤以及我们通常使用的地方需要在分组之前过滤。

  语法要求:

  由于收集操作是集合列的组计算,并且执行聚合函数的分组,因为收集操作的输出列和过滤器条件只能包括聚集列,集聚功能和常数,以及出现非收集列时,查询将报告错误。

  在Special中,GaussDB(DWS)支持在主钥匙列或独特限制列上收集的操作(尽管操作是冗余),此时,它可以在输出列中包含任何列和过滤条件。

  TPC-H测试集的LINEITEM表显示,订单中每种类型的订单的表记录,归属的订单号,零件的供应商,订单中的序列号以及价格,价格,交付和其他信息。

  表定义如下:

  在GaussDB(DWS)中,由于它是一个分布式系统,因此应在每个DN上计算数据计算以获得最佳性能。因此,支持以下附加机操作计算方法:

  例如:LineItem表被用作带有L_ORDERKEY的发行键,并且在执行每个DN后,可以汇总聚会列。

  示例语句(TPC-H Q1,输出的输出列部分):

  <1>在每个DN上进行聚会,将结果总结为CN进行二次聚会。

  LINEITEM行的总数为59亿行。在此方法中,DN收集后,每个DN输出4行数据(全局96行)。这些数据总结为CN,第二次聚集了来自CN的96行数据,最后输出了6行数据。(估计数据信息)

  <2>选择列的群集以重新分配。返回(1)后,每个DN分别收集并总结结果。

  首先,在这种方法中,两列分布,数据量分布在59亿,然后累积了DN,结果将其返回给CN。

  <3>收集每个DN,然后选择用于解决的聚集柱的浓度,并在每个DN上第二个集聚后总结结果。

  在此方法中,每个DN一次累积,行的数量从59亿列减少到4行,然后根据聚集的两列进行分配,并第二次收集每个DN。

  可以看出查询合适<1>和<3>该方法是执行的,因为聚集后的行数相对较小,因此在CN上执行或分布的数据量不大,因此费用很小。<2>59亿个数据行的方法应重新分布,并且网络占据很大。您可以总结三种方法的适用方案:

  <1>此方法适用于较少行和聚集后DN较少的场景,因此到CN的行数较少,这不会导致CN成为计算的瓶颈。<2>相比<3>方法,此方法适用于DN聚合后减少行数减少的场景。目前,所有数据分布的成本可以省略它,以省略DN的聚集操作。<3>和<2>取而代之的是,此方法适用于DN收集后的重要场景,例如上述示例。

  在GaussDB(DWS)中,从成本中选择上述三种方法的选择,也可以通过参数BEES_AGG_PLAN.BEST_AGG_PLAN = 1、2、3分别对应于上述三种方法,0是默认值,,这意味着产品会自动选择最佳计划。

  在单个DN上执行时,GaussDB(DWS)支持以下三种算法:

  <1>普通AGG:最后,只有一条数据线输出,适用于不受欢迎的情况。<2>Hashagg:使用哈希表达到元组的成本。首先,计算聚集列的哈希值,然后比较相同的哈希值的列值,以避免与所有数据进行比较。当我们沉重时,计算集聚函数。适合减少聚集后的行数。<3>Sort + GroupAgg:首先,数据按照聚会列进行排序,因此等效元组相互相邻。通过在分类后遍历数据,可以将组的深化和收敛函数的计算完成。<2>它适用于收集后行减少行数的场景。

  多于<2>和<3>该方法可以由参数enable_sort和enable_hashagg控制(默认为ON)。<2>;当enable_sort = on and enable_hashagg = off时,首选<3>Essencebig数据数量方案通常可以获得更好的性能,因此GaussDB(DWS)已加深了Hashagg以优化。<3>可以通过关闭enable_sort来调整性能方法。

  在收集函数中,可以通过关键字来计算关键字,例如:计数(不同的颜色)指示组中不同值的数量。

  在分布式环境中,为了避免在不同DNS上的L_partkey值相同的值,GaussDB(DWS)转换为分布的分布。以上陈述等同于:

  通过这种方式,在GaussDB(DWS)中,实际表达式的值实际上用于计算两次不同表达式的值。该计划如下:

  可以从计划中可以看出,第8-9层由LineItem底表扫描,其中有两个AGG处理数(不同)运算符。6-7行为的第一个agg是:l_returnflag,l_linestatus,l_partkey,l_partkey,select hashagg方法ii;3-5行为的第二个杂物,即聚会列:l_returnflag,l_linestatus和Select Hashagg方法三。

  注意:目前,SQL标准仅支持收集功能中的列。对于计数的多列(不同),例如:countin(不同的l_partkey,l_suppkey),您实际上可以使用上面提到的重写方法来解决:

  在SQL 1999标准中,将聚合函数扩展,并且OLAP函数汇总(),cube(),组集()添加到更灵活的多维数据包统计函数中。实际上,这三个函数可以是使用一个简单的小组(联合所有)实施。在本文中,联合所有(x组)用于替换,例如:::::

  在B的表达中,B,全部B,B,X包括:(a),(b)。下面的讨论本文侧重于x。

  在汇总(a,b,c)中,x包括:(a,b,c),(a,b),(a),()。语义)。对于N聚集列,X包含N+1集合组合。

  crolup()中的元素可以是列的集合,例如:

  汇总(((a,b),(b,c)),x包括:(a,b,b,c)(相当于(a,b,c)),(a,b),()。

  在Cube(A,B,C)中,X包括:(A,B,C),(A,B),(A,C),(B,C),(A),(B),(B),(C),(),对于n种收集列,x包含2^n收集的组合。

  在组集(a,b,c,d)中,x包括:(a),(b),(c),(d),对于n种收集列,x包含n聚集组合。

  因为在OLAP函数中,没有收集列出现在每个聚会结果中,因此请添加组函数以识别参数列的操作以参与每行聚集结果的操作,例如:Cube(a,b,b,,a,b,,c),其中x包含x包括:(a,b,c),(a,b),(a,c),(b,c),(a),(b),(b),(c),(),(),(),(),()()为(a,b,b),c),(a,b),(a,c),(a,a),累积结果线,组(a)的值为0,而其他则为0是1。

  对于以下包含OLAP函数的陈述:

  GaussDB(DWS)的计划如下:

  目前,在GaussDB(DWS)中使用Sort+GroupAgg来实现OLAP函数。随后的版本将支持Hashagg执行并提高性能。

  收集操作是SQL语言中的基本操作。只有通过对语法,语义和支持范围的语法理解,我们才能更灵活地控制灵活的SQL语言,以开发开发,并为学习更高级别的SQL语言奠定了良好的基础。

  单击以关注,并首次了解华为云新技术?

  原始:https://juejin.cn/post/7100811809665318943