聚合转换

聚合转换将聚合函数(如 Average)应用于列值,并将结果复制到转换输出。除聚合函数以外,转换还提供 GROUP BY 子句,用于指定所要聚合的组。

在转换级、输出级和列级配置聚合转换。

  • 在转换级,为了提高性能,您可以对聚合转换进行以下配置:指定要求转换处理的键数和非重复计数键数以及聚合过程中内存可扩展的百分比。还可以将聚合转换配置为在除数为零时生成警告而不是失败。
  • 在输出级,您可指定要求输出包含的键数来配置聚合转换,以便提高性能。聚合转换支持多个输出,每个输出可采用不同配置。
  • 在列级,指定列执行的聚合和聚合的比较选项。也可以通过指定每列中包含的键数和非重复计数键数,以及在列包含较大数值或高精度数值时将列标识为 IsBig,对聚合转换进行配置,以便提高性能。

聚合转换是异步过程,也就是说它并非逐行地占用和发布数据,而是占用整个行集,执行其分组和聚合操作,然后发布结果。

此转换不传递任何列,而是在数据流中为发布的数据创建新列。只有应用聚合函数的输入列或转换用于分组的输入列才复制到转换输出。例如,聚合转换输入可能有三列:CountryRegionCityPopulation。转换按 CountryRegion 列分组,并对 Population 列应用 Sum 函数。因此,输出不包含 City 列。

也可将多个输出添加到聚合转换,并将每个聚合定向到不同输出。例如,如果聚合转换应用 SumAverage 函数,则可以将每个聚合定向到不同输出。

可以对单个输入列应用多个聚合。例如,如果需要名为 Sales 的输入列的和值与平均值,则可以配置转换,使其将 SumAverage 函数都应用于 Sales 列。

聚合转换具有一个输入和一个或多个输出。它不支持错误输出。

运算

聚合转换支持下列运算。

运算 说明

Group by

将数据集划分为组。任何数据类型的列都可用于分组。有关详细信息,请参阅 GROUP BY (Transact-SQL)

Sum

对列中的值求和。只能对数值数据类型的列求和。有关详细信息,请参阅 SUM (Transact-SQL)

Average

返回列中值的平均值。只能对数值数据类型的列求平均值。有关详细信息,请参阅 AVG (Transact-SQL)

Count

返回组中项目的数量。有关详细信息,请参阅 COUNT (Transact-SQL)

Count dinstict

返回组中的唯一非空值的数量。有关详细信息,请参阅使用 DISTINCT 消除重复项

Minimum

返回组中的最小值。有关详细信息,请参阅 MIN (Transact-SQL)。与 Transact-SQL MIN 函数不同,此运算只能用于数值、日期和时间数据类型。

Maximum

返回组中的最大值。有关详细信息,请参阅 MAX (Transact-SQL)。与 Transact-SQL MAX 函数不同,此运算只能用于数值、日期和时间数据类型。

聚合转换处理空值的方式和 SQL Server 关系数据库引擎相同。此行为在 SQL-92 标准中定义。应遵循以下规则:

  • GROUP BY 子句中,空值和其他列值处理方式类似。如果分组列包含多个空值,那么这些空值将放入单独的一组中。
  • COUNT(列名称)和 COUNTDISTINCT 列名称)函数中,空值将被忽略,并且结果将排除包含指定列中的空值的行。
  • COUNT (*) 函数中,对所有行计数,包括含空值的行。

在聚合中处理大数

列可能包含因数值庞大或精度要求高而需要特别考虑的数值。聚合转换包含 IsBig 属性,您可以针对输出列设置它,以便调用对大数或高精度数字的特别处理。如果列值可能超过 40 亿,或者需要超过 float 数据类型的精度,则应将 IsBig 设置为 1。

IsBig 属性设置为 1 将以下列方式影响聚合转换的输出:

  • 使用 DT_R8 数据类型,而不用 DT_R4 数据类型。
  • 计数结果以 DT_UI8 数据类型存储。
  • 非重复计数结果以 DT_UI4 数据类型存储。
ms138031.note(zh-cn,SQL.90).gif注意:
在用于 GROUP BY、Maximum 或 Minimum 运算的列中,不能将 IsBig 设置为 1。

性能注意事项

聚合转换包含一组属性,对其进行设置可增强转换的性能。

  • 设置组件和组件输出的 KeysKeysScale 属性。使用 Keys, 可指定要求转换处理的精确键数,而使用 KeysScale, 可指定大致键数。如果为 Keys, 指定值(在包运行时转换将收到这个值),转换就会避免重新组织已缓存的总数,从而提高了性能。
  • 设置组件的 CountDistinctKeysCountDistinctScale 属性。使用 CountDistinctKeys, 可指定要求转换处理的非重复计数运算的精确键数。使用 CountDistinctScale,可指定非重复计数运算的大致键数。如果为 CountDistinctScale 指定值(在包运行时转换将收到此值),则转换还会避免重新组织已缓存的总数,从而提高了性能。

配置聚合转换

可以通过 SSIS 设计器或以编程方式来设置属性。

有关可在**“聚合转换编辑器”**对话框中设置的属性的详细信息,请单击下列主题之一:

**“高级编辑器”对话框反映了可以通过编程方式进行设置的属性。有关可以在“高级编辑器”**对话框中或以编程方式设置的属性的详细信息,请单击下列主题之一:

有关如何设置属性的详细信息,请单击下列主题之一:

请参阅

概念

创建包数据流
Integration Services 转换

帮助和信息

获取 SQL Server 2005 帮助