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ção | SQL | Exemplo |
|---|---|---|
-countField 'ROW_COUNT' | COUNT(*) AS ROW_COUNT | Contagem de linhas por grupo |
-sumField 'AMOUNT' 'TOTAL' | SUM(AMOUNT) AS TOTAL | Soma da coluna AMOUNT |
-avgField 'AMOUNT' 'AVG_AMT' | AVG(AMOUNT) AS AVG_AMT | Média de AMOUNT |
-maxField 'VALUE' 'MAX_VAL' | MAX(VALUE) AS MAX_VAL | Valor máximo de VALUE |
-minField 'VALUE' 'MIN_VAL' | MIN(VALUE) AS MIN_VAL | Valor 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
Transformadores relacionados
- 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