

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Regra de análise de agregação
<a name="analysis-rules-aggregation"></a>

Em AWS Clean Rooms, uma *regra de análise de agregação* gera estatísticas agregadas usando as funções COUNT, SUM e and/or AVG junto com dimensões opcionais. Quando a regra de análise de agregação é adicionada a uma tabela configurada, ela permite que o membro que pode consultar execute consultas na tabela configurada.

A regra de análise de agregação oferece suporte a casos de uso como planejamento de campanhas, alcance de mídia, medição de frequência e atribuição. 

A estrutura e a sintaxe de consulta suportadas são definidas em [Estrutura e sintaxe da consulta de agregação](#agg-query-structure-syntax).

Os parâmetros da regra de análise, definidos em [Regra de análise de agregação - controles de consulta](#agg-query-controls), incluem controles de consulta e controles de resultados de consulta. Seus controles de consulta incluem a capacidade de exigir que uma tabela configurada seja unida a pelo menos uma tabela configurada de propriedade do membro que pode consultar, direta ou transitivamente. Esse requisito permite garantir que a consulta seja executada na interseção (INNER JOIN) da sua tabela com a deles.

## Estrutura e sintaxe da consulta de agregação
<a name="agg-query-structure-syntax"></a>

As consultas em tabelas que têm uma regra de análise de agregação devem seguir a sintaxe a seguir.

```
--select_aggregate_function_expression
SELECT 
aggregation_function(column_name) [[AS] column_alias ] [, ...]

 --select_grouping_column_expression                        
  [, {column_name|scalar_function(arguments)} [[AS] column_alias ]][, ...]   

--table_expression
FROM table_name [[AS] table_alias ]
  [[INNER] JOIN table_name [[AS] table_alias] ON join_condition] [...]

--where_expression
[WHERE where_condition]          

--group_by_expression                          
[GROUP BY {column_name|scalar_function(arguments)}, ...]]                  

--having_expression
[HAVING having_condition]                               

--order_by_expression    
[ORDER BY {column_name|scalar_function(arguments)} [{ASC|DESC}]] [,...]]
```

A tabela a seguir explica cada expressão listada na sintaxe anterior.


| Expressão | Definição | Exemplos | 
| --- | --- | --- | 
| select\$1aggregate\$1function\$1expression |  Uma lista separada por vírgulas contendo as seguintes expressões: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  Deve haver pelo menos um `select_aggregation_function_expression` no `select_aggregate_expression`.    |  `SELECT SUM(PRICE), user_segment`  | 
| select\$1aggregation\$1function\$1expression |  Uma ou mais funções de agregação suportadas aplicadas a uma ou mais colunas. Somente colunas são permitidas como argumentos das funções de agregação.  Deve haver pelo menos um `select_aggregation_function_expression` no `select_aggregate_expression`.    |  `AVG(PRICE)` `COUNT(DISTINCT user_id)`  | 
| select\$1grouping\$1column\$1expression |  Uma expressão que pode conter qualquer expressão usando o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  `select_aggregate_expression` pode criar um alias para colunas com ou sem o parâmetro `AS`. Para obter mais informações, consulte a [Referência SQL do AWS Clean Rooms](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).   |  `TRUNC(timestampColumn)`  `UPPER(campaignName)`   | 
| table\$1expression |  Uma tabela, ou junção de tabelas, conectando expressões condicionais de junção com `join_condition`. `join_condition` retorna um Booleano.  O `table_expression` oferece suporte a: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/clean-rooms/latest/userguide/analysis-rules-aggregation.html)  |  <pre>FROM consumer_table <br />INNER JOIN provider_table<br />ON<br />consumer_table.identifier1 = provider_table.identifier1<br />AND<br />consumer_table.identifier2 = provider_table.identifier2</pre>  | 
| where\$1expression |  Uma expressão condicional que retorna um booliano. Pode ser composto do seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/clean-rooms/latest/userguide/analysis-rules-aggregation.html) As condições de comparação suportadas são (`=, >, <, <=, >=, <>, !=, NOT, IN, NOT IN, LIKE, IS NULL, IS NOT NULL`).  Os operadores lógicos suportados são (`AND, OR`). `where_expression` é opcional.  |  `WHERE where_condition` `WHERE price > 100`  `WHERE TRUNC(timestampColumn) = '1/1/2022'`  `WHERE timestampColumn = timestampColumn2 - 14`   | 
| group\$1by\$1expression |  Uma lista separada por vírgulas de expressões que atendem aos requisitos do `select_grouping_column_expression`.   |  `GROUP BY TRUNC(timestampColumn), UPPER(campaignName), segment`  | 
| having\$1expression |  Uma expressão condicional que retorna um booleano. Eles têm uma função de agregação compatível aplicada a uma única coluna (por exemplo, `SUM(price)`) e são comparados a um literal numérico. As condições suportadas são (`=, >, <, <=, >=, <>, !=`).  Os operadores lógicos suportados são (`AND, OR`). `having_expression` é opcional.  |  `HAVING SUM(SALES) > 500`  | 
| order\$1by\$1expression |  Uma lista de expressões separadas por vírgulas que é compatível com os mesmos requisitos `select_aggregate_expression` definidos anteriormente.  `order_by_expression` é opcional.  `order_by_expression` permite os parâmetros `ASC` e `DESC`. Para obter mais informações, consulte Parâmetros ASC DESC na [Referência SQL do AWS Clean Rooms](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).   |  `ORDER BY SUM(SALES), UPPER(campaignName)`  | 

Para a estrutura e a sintaxe da consulta de agregação, lembre-se de que:
+ Comandos SQL diferentes de SELECT não são suportados.
+ Não há suporte para subconsultas e expressões de tabela comuns (por exemplo, WITH).
+ Operadores que combinam várias consultas (por exemplo, UNION) não são compatíveis. 
+ Os parâmetros TOP, LIMIT e OFFSET não têm suporte.

## Regra de análise de agregação - controles de consulta
<a name="agg-query-controls"></a>

Com os controles de consulta de agregação, você pode controlar como as colunas em sua tabela são usadas para consultar a tabela. Por exemplo, você pode controlar qual coluna é usada para unir, qual coluna pode ser contada ou qual coluna pode ser usada em declarações WHERE.

As seções a seguir explicam cada controle.

**Topics**
+ [Controles de agregação](#agg-functions)
+ [Controles de junção](#join-controls)
+ [Controles de dimensão](#dimension-controls)
+ [Funções escalares](#scalar-functions)

### Controles de agregação
<a name="agg-functions"></a>

Ao usar *controles de agregação*, você pode definir quais funções de agregação permitir e em quais colunas elas devem ser aplicadas. As funções de agregação podem ser usadas nas expressões SELECT, HAVING, ORDER e BY.


| Controle | Definição | Usage | 
| --- | --- | --- | 
| aggregateColumns | Colunas de tabela configuradas que você permite usar nas funções de agregação. |  `aggregateColumns` pode ser usado dentro de uma função de agregação nas expressões SELECT, HAVING, ORDER e BY. Alguns `aggregateColumns` também podem ser categorizados como `joinColumn` (definidos posteriormente). Considerando que `aggregateColumn` também não pode ser categorizado como um `dimensionColumn` (definido posteriormente).  | 
| function | As funções COUNT, SUM e AVG que você permite usar em cima do aggregateColumns. |  `function` pode ser aplicado a um `aggregateColumns` que esteja associado a ele.   | 

### Controles de junção
<a name="join-controls"></a>

Uma cláusula `JOIN` é usada para combinar linhas de duas ou mais tabelas, com base em uma coluna relacionada entre elas.

Você pode usar *os controles de união* para controlar como sua tabela pode ser unida a outras tabelas no`table_expression`. AWS Clean Rooms só suporta INNERJOIN. INNERJOINas instruções só podem usar colunas que tenham sido explicitamente categorizadas como `joinColumn` em sua regra de análise, sujeitas aos controles que você define. 

INNER JOIN devem operar em uma `joinColumn` da sua tabela configurada e em outra `joinColumn` tabela configurada na colaboração. Você decide quais colunas da sua tabela podem ser usadas como `joinColumn`.

Cada condição de correspondência dentro da cláusula ON deve usar a condição de comparação de igualdade (`=`) entre duas colunas. 

Várias condições de correspondência dentro de qualquer ON cláusula podem ser: 
+ Combinado usando o operador lógico `AND`
+ Separado usando o operador lógico `OR`

**nota**  
Todas as condições de correspondência JOIN devem corresponder a uma linha de cada lado do JOIN. Todas as condicionais conectadas por um operador lógico `OR` ou `AND` também devem atender a este requisito.

Veja a seguir um exemplo de uma consulta com um operador lógico `AND`.

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id AND table1.name = table2.name
```

Veja a seguir um exemplo de uma consulta com um operador lógico `OR`.

```
SELECT some_col, other_col 
FROM table1 
    JOIN table2 
    ON table1.id = table2.id OR table1.name = table2.name
```


| Controle | Definição | Usage | 
| --- | --- | --- | 
| joinColumns | As colunas (se houver) que você deseja permitir que o membro que pode consultar use na instrução INNER JOIN. |  Um `joinColumn` específico também pode ser classificado como `aggregateColumn` (consulte [Controles de agregação](#agg-functions)). A mesma coluna não pode ser usada como `joinColumn` e `dimensionColumns` (confira mais adiante). A menos que também tenha sido categorizado como um `aggregateColumn`, um `joinColumn` não pode ser usado em nenhuma outra parte da consulta além de INNER JOIN.  | 
| joinRequired | Controle se você precisa de um INNER JOIN com uma tabela configurada do membro que pode consultar.  |  Se você ativar esse parâmetro, será necessário um INNER JOIN. Se você não habilitar esse parâmetro, an INNER JOIN é opcional. Supondo que você habilite esse parâmetro, o membro que pode consultar deverá incluir uma tabela de sua propriedade no INNER JOIN. Eles devem unir JOIN sua mesa à deles, direta ou transitivamente (ou seja, unir sua mesa a outra mesa, que por sua vez está unida à sua mesa).  | 

A seguir está um exemplo de transitividade.

```
ON 
my_table.identifer = third_party_table.identifier
....
ON
third_party_table.identifier = member_who_can_query_table.id
```

**nota**  
O membro que pode consultar também pode usar o parâmetro `joinRequired`. Nesse caso, a consulta deve unir sua tabela a pelo menos uma outra tabela. 

### Controles de dimensão
<a name="dimension-controls"></a>

Os *controles de dimensão* controlam a coluna na qual as colunas de agregação podem ser filtradas, agrupadas ou agregadas.


| Controle | Definição | Usage | 
| --- | --- | --- | 
| dimensionColumns |  As colunas (se houver) que você permite que o membro que pode consultar use em SELECT, WHERE, GROUP BY e ORDER BY.  |  A `dimensionColumn` pode ser usado em SELECT (`select_grouping_column_expression`), WHERE, GROUP BY e ORDER BY. A mesma coluna não pode ser ao mesmo tempo a`dimensionColumn`, a`joinColumn`, and/or an`aggregateColumn`.  | 

### Funções escalares
<a name="scalar-functions"></a>

As *funções escalares* controlam quais funções escalares podem ser usadas em colunas de dimensão.


| Controle | Definição | Usage | 
| --- | --- | --- | 
| scalarFunctions |  As funções escalares que podem ser usadas em `dimensionColumns` na consulta.  |  Especifica as funções escalares (se houver) nas quais você permite (por exemplo, CAST) que sejam aplicadas a `dimensionColumns`.  As funções escalares não podem ser usadas em cima de outras funções ou dentro de outras funções. Os argumentos das funções escalares podem ser colunas, literais de string ou literais numéricos.  | 

As seguintes funções escalares são suportadas:
+ Funções matemáticas: ABS, CEILING, FLOOR, LOG, LN, ROUND, SQRT
+ Funções de formatação de tipo de dados – CAST, CONVERT, TO\$1CHAR, TO\$1DATE, TO\$1NUMBER, TO\$1TIMESTAMP
+ Funções de string: LOWER, UPPER, TRIM, RTRIM, SUBSTRING
  + Para RTRIM, conjuntos de caracteres personalizados para cortar não são permitidos. 
+ Expressões condicionais – COALESCE
+ Funções de data: EXTRACT, GETDATE, CURRENT\$1DATE, DATEADD
+ Outras funções – TRUNC

Para obter mais detalhes, consulte a [Referência SQL do AWS Clean Rooms](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/sql-reference.html).

## Regra de análise de agregação - controles de resultados de consulta
<a name="agg-query-results-controls"></a>

Com os controles de resultados de consulta de agregação, você pode controlar quais resultados são retornados especificando uma ou mais condições que cada linha de saída deve atender para que seja retornada. O AWS Clean Rooms suporta restrições de agregação na forma de `COUNT (DISTINCT column) >= X`. Esse formulário exige que cada linha agregue pelo menos X valores distintos de uma escolha da tabela configurada (por exemplo, um número mínimo de `user_id` valores distintos). Esse limite mínimo é aplicado automaticamente, mesmo que a consulta enviada em si não use a coluna especificada. Elas são aplicadas coletivamente em cada tabela configurada na consulta a partir das tabelas configuradas de cada membro na colaboração. 

Cada tabela configurada deve ter pelo menos uma restrição de agregação em sua regra de análise. Os proprietários de tabelas configuradas podem adicionar várias `columnName` e associadas `minimum` e elas são aplicadas coletivamente. 

### Restrições de agregação
<a name="agg-constraints"></a>

As *restrições de agregação* controlam quais linhas nos resultados de consulta são retornadas. Para ser retornada, uma linha deve atender ao número mínimo especificado de valores distintos em cada coluna especificada na restrição de agregação. Esse requisito se aplica mesmo que a coluna não seja mencionada explicitamente na consulta ou em outras partes da regra de análise.


| Controle | Definição | Usage | 
| --- | --- | --- | 
| columnName |  O `aggregateColumn` que é usado na condição que cada linha de saída deve atender.  |  Pode ser qualquer coluna na tabela configurada.  | 
| minimum |  O número mínimo de valores distintos associados `aggregateColumn` que a linha de saída deve ter (por exemplo, COUNT DISTINCT) para que ela seja retornada nos resultados de consulta.   |  O `minimum` deve ter pelo menos um valor de 2.  | 

## Estrutura de regras de análise de agregação
<a name="agg-analysis-rule-template"></a>

O exemplo a seguir mostra uma estrutura predefinida para uma regra de análise de agregação. 

No exemplo a seguir, *`MyTable`* refere-se à sua tabela de dados. Você pode substituir cada um *user input placeholder* por suas próprias informações. 

```
{
  "aggregateColumns": [
    {
      "columnNames": [MyTable column names], "function": [Allowed Agg Functions]
    },
  ],
  "joinRequired": ["QUERY_RUNNER"],  
  "joinColumns": [MyTable column names],
  "dimensionColumns": [MyTable column names],
  "scalarFunctions": [Allowed Scalar functions],
  "outputConstraints": [
    {
      "columnName": [MyTable column names], "minimum": [Numeric value] 
    },
  ]
}
```

## Regra de análise de agregação - exemplo
<a name="agg-analysis-rule-example"></a>

O exemplo a seguir demonstra como duas empresas podem colaborar no AWS Clean Rooms uso da análise de agregação.

A empresa A tem dados de clientes e vendas. A empresa A está interessada em entender a atividade de devolução de produtos. A empresa B é uma das varejistas da empresa A e tem dados de devoluções. A empresa B também tem atributos de segmento de clientes que são úteis para a empresa A (por exemplo, comprou produtos relacionados, usa o atendimento ao cliente do varejista). A empresa B não quer fornecer dados de retorno de clientes em nível de linha e informações de atributos. A empresa B deseja apenas habilitar um conjunto de consultas para que a empresa A obtenha estatísticas agregadas sobre clientes sobrepostos em um limite mínimo de agregação. 

A empresa A e a empresa B decidem colaborar para que a empresa A possa entender a atividade de devolução de produtos e oferecer produtos melhores na empresa B e em outros canais. 

Para criar a colaboração e executar uma análise de agregação, as empresas fazem o seguinte: 

1. A empresa A cria uma colaboração e cria uma associação. A colaboração tem a Empresa B como outro membro da colaboração. A empresa A permite o registro de consultas na colaboração e permite o registro de consultas em sua conta. 

1. A empresa B cria uma associação na colaboração. Ele permite o registro de consultas em sua conta. 

1. A empresa A cria uma tabela configurada de vendas.

1. A empresa A adiciona a seguinte regra de análise de agregação à tabela configurada de vendas.

   ```
   {
     "aggregateColumns": [
       {
         "columnNames": [
           "identifier"
         ],
         "function": "COUNT_DISTINCT"
       },
       {
         "columnNames": [
           "purchases"
         ],
         "function": "AVG"
       },
       {
         "columnNames": [
           "purchases"
         ],
         "function": "SUM"
       }
     ],
     "joinColumns": [
       "hashedemail"
     ],
     "dimensionColumns": [
       "demoseg",
       "purchasedate",
       "productline"
     ],
     "scalarFunctions": [
       "CAST",
       "COALESCE",
       "TRUNC"
     ],
     "outputConstraints": [
       {
         "columnName": "hashedemail",
         "minimum": 2,
         "type": "COUNT_DISTINCT"
       },
     ]
   }
   ```

   `aggregateColumns` – A empresa A quer contar o número de clientes únicos na sobreposição entre dados de vendas e dados de devoluções. A empresa A também deseja somar o número de `purchases` feitos para comparar com o número de `returns`.

   `joinColumns` – A empresa A deseja usar para combinar clientes `identifier` a partir de dados de vendas com clientes a partir de dados de devoluções. Isso ajudará a empresa A Match a retornar às compras certas. Também ajuda a Empresa A a segmentar clientes sobrepostos.

   `dimensionColumns` – A empresa A usa `dimensionColumns` para filtrar por produto específico, comparar compras e devoluções em um determinado período de tempo, garantir que a data de devolução seja posterior à data do produto e ajudar a segmentar clientes sobrepostos. 

   `scalarFunctions` – A empresa A seleciona a função escalar `CAST` para ajudar a atualizar os formatos do tipo de dados, se necessário, com base na tabela configurada que a empresa A associa à colaboração. Ele também adiciona funções escalares para ajudar a formatar colunas, se necessário. 

   `outputConstraints` – A empresa A define restrições mínimas de produção. Não é necessário restringir os resultados porque o analista pode ver dados em nível de linha em sua tabela de vendas 
**nota**  
A empresa A não inclui `joinRequired` na regra de análise. Ele fornece flexibilidade para o analista consultar a tabela de vendas sozinho.

1. A empresa B cria uma tabela configurada de devoluções.

1. A empresa B adiciona a seguinte regra de análise de agregação à tabela configurada de devoluções.

   ```
   {
     "aggregateColumns": [
       {
         "columnNames": [
           "identifier"
         ],
         "function": "COUNT_DISTINCT"
       },
       {
         "columnNames": [
           "returns"
         ],
         "function": "AVG"
       },
       {
         "columnNames": [
           "returns"
         ],
         "function": "SUM"
       }
     ],
     "joinColumns": [
       "hashedemail"
     ],
     "joinRequired": [
       "QUERY_RUNNER"
     ],
     "dimensionColumns": [
       "state",
       "popularpurchases",
       "customerserviceuser",
       "productline",
       "returndate"
     ],
     "scalarFunctions": [
       "CAST",
       "LOWER",
       "UPPER",
       "TRUNC"
     ],
     "outputConstraints": [
       {
         "columnName": "hashedemail",
         "minimum": 100,
         "type": "COUNT_DISTINCT"
       },
       {
         "columnName": "producttype",
         "minimum": 2,
         "type": "COUNT_DISTINCT"
       }
     ]
   }
   ```

   `aggregateColumns` – A empresa B permite que a empresa A faça uma soma `returns` para comparar com o número de compras. Eles têm pelo menos uma coluna agregada porque estão habilitando uma consulta agregada. 

   `joinColumns` – A empresa B permite que a empresa A se junte `identifier` para combinar clientes a partir dos dados de devolução com os clientes a partir dos dados de vendas. Os dados `identifier` são particularmente confidenciais e tê-los como garantia `joinColumn` de que os dados nunca serão gerados em uma consulta. 

   `joinRequired` – A empresa B exige que as consultas sobre os dados de devolução sejam sobrepostas aos dados de vendas. Eles não querem permitir que a Empresa A consulte todas as pessoas em seu conjunto de dados. Eles também concordaram com essa restrição em seu acordo de colaboração. 

   `dimensionColumns` – A empresa B permite que a empresa A filtre e agrupe por `state`, `popularpurchases` e `customerserviceuser` que são atributos exclusivos que podem ajudar a fazer a análise para a empresa A. A empresa B permite que a empresa A use `returndate` para filtrar a saída `returndate` que ocorre depois de `purchasedate`. Com essa filtragem, a saída é mais precisa para avaliar o impacto da alteração do produto. 

   `scalarFunctions` – A empresa B permite o seguinte: 
   + TRUNC para datas
   + LOWER e UPPER, caso o `producttype` seja inserido em um formato diferente em seus dados
   + CAST se a empresa A precisar converter os tipos de dados em vendas para serem iguais aos tipos de dados em devoluções

   A empresa A não habilita outras funções escalares porque não acredita que sejam necessárias para consultas.

   `outputConstraints` – A empresa B define restrições mínimas de produção em `hashedemail` para ajudar a reduzir a capacidade de reidentificar clientes. Também adiciona uma restrição mínima de produção em `producttype` para reduzir a capacidade de reidentificar produtos específicos que foram devolvidos. Certos tipos de produtos podem ser mais dominantes com base nas dimensões da produção (por exemplo, `state`). Suas restrições de saída sempre serão aplicadas, independentemente das restrições de saída adicionadas pela Empresa A aos seus dados. 

1. A empresa A cria uma associação de tabela de vendas à colaboração.

1. A empresa B cria uma associação de tabela de devoluções à colaboração.

1. A empresa A executa consultas, como o exemplo a seguir, para entender melhor a quantidade de devoluções na empresa B em comparação com o total de compras por local em 2022.

   ```
   SELECT
     companyB.state,
     SUM(companyB.returns),
     COUNT(DISTINCT companyA.hashedemail)
   FROM
     sales companyA
     INNER JOIN returns companyB ON companyA.identifier = companyB.identifier
   WHERE
     companyA.purchasedate BETWEEN '2022-01-01' AND '2022-12-31' AND
     TRUNC(companyB.returndate) > companyA.purchasedate
   GROUP BY
     companyB.state;
   ```

1. A empresa A e a empresa B revisam os logs de consulta. A empresa B verifica se a consulta está alinhada com o que foi acordado no contrato de colaboração. 

## Solução de problemas de regras de análise de agregação
<a name="troubleshooting-agg-analysis-rule"></a>

Use as informações aqui para ajudá-lo a diagnosticar e corrigir problemas comuns ao trabalhar com regras de análise de agregação. 

**Topics**
+ [Minha consulta não retornou nenhum resultado](#query-no-results)

### Minha consulta não retornou nenhum resultado
<a name="query-no-results"></a>

Isso pode acontecer quando não há resultados correspondentes ou quando os resultados correspondentes não atendem a um ou mais limites mínimos de agregação. 

Para obter mais informações sobre limites mínimos de agregação, consulte [Regra de análise de agregação - exemplo](#agg-analysis-rule-example).