Pular para o conteúdo principal

AggregatorStageTransformer

Visão geral​

Converte estágios AGGREGATOR do DataStage em instruções SQL GROUP BY. Realiza operações de agrupamento e agregação (COUNT, SUM, AVG, MAX, MIN).

Tipo de estágio: AGGREGATOR (operador group) Saída: SQL SELECT com GROUP BY

Recursos​

  • Chaves de agrupamento simples e múltiplas
  • Agregação COUNT(*)
  • Agregações SUM, AVG, MAX, MIN
  • Geração automática do esquema de saída
  • Suporte a cláusulas GROUP BY compostas

Exemplo de estágio DataStage​

Entrada (formato .dsx)​

#### STAGE: AggregateData
## Operator
group
## Operator options
-hash
-key 'CUSTOMER_ID'
-key 'PRODUCT_ID'
-countField 'SALES_COUNT'
-sumField 'SALE_AMOUNT' 'TOTAL_SALES'
-avgField 'SALE_AMOUNT' 'AVG_SALES'
## General options
[ident('AggregateData'); jobmon_ident('AggregateData')]
## Inputs
0< [] 'SalesData:input.v'
## Outputs
0> [] 'AggregateData:Output.v'

Esquema de entrada​

[
{"name": "CUSTOMER_ID", "type": "string"},
{"name": "PRODUCT_ID", "type": "string"},
{"name": "SALE_AMOUNT", "type": "number"},
{"name": "SALE_DATE", "type": "date"}
]

SQL gerado​

SELECT
CUSTOMER_ID,
PRODUCT_ID,
COUNT(*) AS SALES_COUNT,
SUM(SALE_AMOUNT) AS TOTAL_SALES,
AVG(SALE_AMOUNT) AS AVG_SALES
FROM salesdata_V0S8
GROUP BY CUSTOMER_ID, PRODUCT_ID

Esquema de saída​

[
{"name": "CUSTOMER_ID", "type": "string"},
{"name": "PRODUCT_ID", "type": "string"},
{"name": "SALES_COUNT", "type": "number"},
{"name": "TOTAL_SALES", "type": "number"},
{"name": "AVG_SALES", "type": "number"}
]

Como funciona​

1. Identificar as chaves de agrupamento​

Analisa as opções -key para identificar as colunas do GROUP BY:

-key 'CUSTOMER_ID'
-key 'PRODUCT_ID'

Gera:

GROUP BY CUSTOMER_ID, PRODUCT_ID

2. Extrair as funções de agregação​

Analisa as opções de agregação:

OpçãoSQLExemplo
-countField 'ROW_COUNT'COUNT(*) AS ROW_COUNTContagem de linhas por grupo
-sumField 'AMOUNT' 'TOTAL'SUM(AMOUNT) AS TOTALSoma da coluna AMOUNT
-avgField 'AMOUNT' 'AVG_AMT'AVG(AMOUNT) AS AVG_AMTMédia de AMOUNT
-maxField 'VALUE' 'MAX_VAL'MAX(VALUE) AS MAX_VALValor máximo de VALUE
-minField 'VALUE' 'MIN_VAL'MIN(VALUE) AS MIN_VALValor mínimo de VALUE

3. Construir a cláusula SELECT​

Combina as chaves de agrupamento e as agregações:

SELECT
<grouping_key_1>,
<grouping_key_2>,
COUNT(*) AS <count_field>,
SUM(<input_col>) AS <sum_field>,
...
FROM input_table
GROUP BY <grouping_key_1>, <grouping_key_2>

4. Inferir o esquema de saída​

  • Chaves de agrupamento herdam os tipos do esquema de entrada
  • Campos COUNT recebem o tipo INTEGER
  • Campos SUM/AVG recebem o tipo DECIMAL
  • Campos MAX/MIN herdam o tipo da coluna de entrada

Funções de agregação​

COUNT​

-countField 'ROW_COUNT'

Gera:

COUNT(*) AS ROW_COUNT

Conta as linhas por grupo.

SUM​

-sumField 'SALE_AMOUNT' 'TOTAL_SALES'

Gera:

SUM(SALE_AMOUNT) AS TOTAL_SALES

Soma os valores da coluna SALE_AMOUNT por grupo.

AVG​

-avgField 'SALE_AMOUNT' 'AVG_SALES'

Gera:

AVG(SALE_AMOUNT) AS AVG_SALES

Calcula a média de SALE_AMOUNT por grupo.

MAX​

-maxField 'SALE_DATE' 'LATEST_DATE'

Gera:

MAX(SALE_DATE) AS LATEST_DATE

Encontra o valor máximo por grupo.

MIN​

-minField 'SALE_DATE' 'EARLIEST_DATE'

Gera:

MIN(SALE_DATE) AS EARLIEST_DATE

Encontra o valor mínimo por grupo.

Exemplo com chave simples​

Entrada​

-key 'REGION_CODE'
-countField 'REGION_COUNT'

SQL gerado​

SELECT
REGION_CODE,
COUNT(*) AS REGION_COUNT
FROM input_table
GROUP BY REGION_CODE

Exemplo com chave composta​

Entrada​

-key 'REGION_CODE'
-key 'CATEGORY_CODE'
-key 'PERIOD_CODE'
-countField 'ROW_COUNT'

SQL gerado​

SELECT
REGION_CODE,
CATEGORY_CODE,
PERIOD_CODE,
COUNT(*) AS ROW_COUNT
FROM input_table
GROUP BY REGION_CODE, CATEGORY_CODE, PERIOD_CODE

Múltiplas agregações​

Você pode combinar várias funções de agregação:

Entrada​

-key 'CUSTOMER_ID'
-countField 'ORDER_COUNT'
-sumField 'ORDER_VALUE' 'TOTAL_VALUE'
-avgField 'ORDER_VALUE' 'AVG_VALUE'
-maxField 'ORDER_DATE' 'LAST_ORDER_DATE'
-minField 'ORDER_DATE' 'FIRST_ORDER_DATE'

SQL gerado​

SELECT
CUSTOMER_ID,
COUNT(*) AS ORDER_COUNT,
SUM(ORDER_VALUE) AS TOTAL_VALUE,
AVG(ORDER_VALUE) AS AVG_VALUE,
MAX(ORDER_DATE) AS LAST_ORDER_DATE,
MIN(ORDER_DATE) AS FIRST_ORDER_DATE
FROM input_table
GROUP BY CUSTOMER_ID

Limitações​

  • ⚠️ Sem cláusula HAVING - Filtros após a agregação não são suportados (use um estágio FILTER posterior)
  • ⚠️ Sem expressões complexas - As agregações funcionam apenas com referências simples a colunas, não com expressões
  • ⚠️ Sem agregações DISTINCT - COUNT(DISTINCT col) não é suportado
  • ⚠️ Particionamento hash ignorado - A opção -hash é específica do DataStage e não é convertida em SQL
  • ⚠️ Sem ROLLUP/CUBE - Conjuntos de agrupamento avançados não são suportados
  • TransformerStageTransformer - Para derivações de colunas após a agregação
  • ModifyStageTransformer - Para filtragem de colunas após a agregação
  • RemoveDuplicatesTransformer - Para deduplicação simples sem agregação