

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á.

# Dicas
<a name="sql-commands-hints-spark"></a>

As dicas para análises de SQL fornecem diretivas de otimização que orientam as estratégias de execução de consultas AWS Clean Rooms, permitindo que você melhore o desempenho da consulta e reduza os custos de computação. As dicas sugerem como o mecanismo de análise do Spark deve gerar seu plano de execução.

## Sintaxe
<a name="hints-syntax"></a>

```
SELECT /*+ hint_name(parameters), hint_name(parameters) */ column_list
FROM table_name;
```

As dicas são incorporadas às consultas SQL usando a sintaxe de estilo de comentário e devem ser colocadas diretamente após a palavra-chave SELECT.

## Tipos de dicas compatíveis
<a name="supported-hint-types"></a>

AWS Clean Rooms suporta duas categorias de dicas: dicas de junção e dicas de particionamento.

**Topics**
+ [Junte dicas](join-hints.md)
+ [Dicas de particionamento](partitioning-hints.md)

# Junte dicas
<a name="join-hints"></a>

As dicas de junção sugerem estratégias de junção para execução de consultas. A sintaxe, os argumentos e alguns exemplos vêm da [Referência SQL do Apache Spark](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#join-hints) para obter mais informações

### TRANSMISSÃO
<a name="broadcast-hint"></a>

Sugere que AWS Clean Rooms use broadcast join. O lado de junção com a dica será transmitido independentemente do autoBroadcastJoin limite. Se os dois lados da junção tiverem as dicas de transmissão, aquele com o tamanho menor (com base nas estatísticas) será transmitido.

*Pseudônimos:* BROADCASTJOIN, MAPJOIN

*Parâmetros:* identificadores de tabela (opcional)

*Exemplos:*

```
-- Broadcast a specific table
SELECT /*+ BROADCAST(students) */ e.name, s.course
FROM employees e JOIN students s ON e.id = s.id;

-- Broadcast multiple tables
SELECT /*+ BROADCASTJOIN(s, d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;
```

### MERGE
<a name="merge-hint"></a>

Sugere que AWS Clean Rooms use shuffle sort merge join.

*Pseudônimos:* SHUFFLE\$1MERGE, MERGEJOIN

*Parâmetros:* identificadores de tabela (opcional)

*Exemplos:*

```
-- Use merge join for a specific table
SELECT /*+ MERGE(employees) */ *
FROM employees e JOIN students s ON e.id = s.id;

-- Use merge join for multiple tables
SELECT /*+ MERGEJOIN(e, s, d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;
```

### SHUFFLE\$1HASH
<a name="shuffle-hash-hint"></a>

Sugere que AWS Clean Rooms use shuffle hash join. Se os dois lados tiverem dicas de hash aleatórias, o otimizador de consultas escolherá o lado menor (com base nas estatísticas) como o lado da construção.

*Parâmetros:* identificadores de tabela (opcional)

*Exemplos:*

```
-- Use shuffle hash join
SELECT /*+ SHUFFLE_HASH(students) */ *
FROM employees e JOIN students s ON e.id = s.id;
```

### SHUFFLE\$1REPLICATE\$1NL
<a name="shuffle-replicate-nl-hint"></a>

Sugere o AWS Clean Rooms uso de junção de loop shuffle-and-replicate aninhado.

*Parâmetros:* identificadores de tabela (opcional)

*Exemplos:*

```
-- Use shuffle-replicate nested loop join
SELECT /*+ SHUFFLE_REPLICATE_NL(students) */ *
FROM employees e JOIN students s ON e.id = s.id;
```

### Dicas de solução de problemas no Spark SQL
<a name="join-hint-warning-cases"></a>

A tabela a seguir mostra cenários comuns em que as dicas não são aplicadas no SparkSQL. Para obter informações adicionais, consulte [Considerações e limitações](sql-commands-hints-spark.md#hints-usage-notes).

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/clean-rooms/latest/sql-reference/join-hints.html)

# Dicas de particionamento
<a name="partitioning-hints"></a>

As dicas de particionamento controlam a distribuição de dados entre os nós do executor. Quando várias dicas de particionamento são especificadas, vários nós são inseridos no plano lógico, mas a dica mais à esquerda é selecionada pelo otimizador.

### AGLUTINAR
<a name="coalesce-hint"></a>

Reduz o número de partições para o número especificado de partições.

*Parâmetros:* valor numérico (obrigatório) - deve ser um número inteiro positivo entre 1 e 2147483647

*Exemplos:*

```
-- Reduce to 5 partitions
SELECT /*+ COALESCE(5) */ employee_id, salary
FROM employees;
```

### DISTRIBUIÇÃO
<a name="repartition-hint"></a>

Reparticiona os dados para o número especificado de partições usando as expressões de particionamento especificadas. Usa distribuição round-robin.

*Parâmetros:*
+ Valor numérico (opcional) - número de partições; deve ser um número inteiro positivo entre 1 e 2147483647
+ Identificadores de coluna (opcional) - colunas pelas quais particionar; Essas colunas devem existir no esquema de entrada.
+ Se ambos forem especificados, o valor numérico deverá vir primeiro

*Exemplos:*

```
-- Repartition to 10 partitions
SELECT /*+ REPARTITION(10) */ *
FROM employees;

-- Repartition by column
SELECT /*+ REPARTITION(department) */ *
FROM employees;

-- Repartition to 8 partitions by department
SELECT /*+ REPARTITION(8, department) */ *
FROM employees;

-- Repartition by multiple columns
SELECT /*+ REPARTITION(8, department, location) */ *
FROM employees;
```

### REPARTIÇÃO\$1POR\$1INTERVALO
<a name="repartition-by-range-hint"></a>

Reparticiona os dados para o número especificado de partições usando o particionamento de intervalo nas colunas especificadas.

*Parâmetros:*
+ Valor numérico (opcional) - número de partições; deve ser um número inteiro positivo entre 1 e 2147483647
+ Identificadores de coluna (opcional) - colunas pelas quais particionar; Essas colunas devem existir no esquema de entrada.
+ Se ambos forem especificados, o valor numérico deverá vir primeiro

*Exemplos:*

```
SELECT /*+ REPARTITION_BY_RANGE(10) */ *
FROM employees;

-- Repartition by range on age column
SELECT /*+ REPARTITION_BY_RANGE(age) */ *
FROM employees;

-- Repartition to 5 partitions by range on age
SELECT /*+ REPARTITION_BY_RANGE(5, age) */ *
FROM employees;

-- Repartition by range on multiple columns
SELECT /*+ REPARTITION_BY_RANGE(5, age, salary) */ *
FROM employees;
```

### REEQUILIBRAR
<a name="rebalance-hint"></a>

Reequilibra as partições de saída do resultado da consulta para que cada partição tenha um tamanho razoável (nem muito pequena nem muito grande). Esta é uma operação de melhor esforço: se houver inclinações, AWS Clean Rooms dividirá as partições inclinadas para que não sejam muito grandes. Essa dica é útil quando você precisa gravar o resultado de uma consulta em uma tabela para evitar arquivos muito pequenos ou muito grandes.

*Parâmetros:*
+ Valor numérico (opcional) - número de partições; deve ser um número inteiro positivo entre 1 e 2147483647
+ Identificadores de coluna (opcional) - as colunas devem aparecer na lista de saída SELECT
+ Se ambos forem especificados, o valor numérico deverá vir primeiro

*Exemplos:*

```
-- Rebalance to 10 partitions
SELECT /*+ REBALANCE(10) */ employee_id, name
FROM employees;

-- Rebalance by specific columns in output
SELECT /*+ REBALANCE(employee_id, name) */ employee_id, name
FROM employees;

-- Rebalance to 8 partitions by specific columns
SELECT /*+ REBALANCE(8, employee_id, name) */ employee_id, name, department
FROM employees;
```

## Combinando várias dicas
<a name="combining-multiple-hints"></a>

Você pode especificar várias dicas em uma única consulta separando-as com vírgulas:

```
-- Combine join and partitioning hints
SELECT /*+ BROADCAST(d), REPARTITION(8) */ e.name, d.dept_name
FROM employees e JOIN departments d ON e.dept_id = d.id;

-- Multiple join hints
SELECT /*+ BROADCAST(s), MERGE(d) */ *
FROM employees e
JOIN students s ON e.id = s.id
JOIN departments d ON e.dept_id = d.id;

-- Hints within separate hint blocks within the same query
SELECT /*+ REPARTITION(100) */ /*+ COALESCE(500) */ /*+ REPARTITION_BY_RANGE(3, c) */ * FROM t;
```

## Considerações e limitações
<a name="hints-usage-notes"></a>
+ As dicas são sugestões de otimização, não comandos. O otimizador de consultas pode ignorar dicas com base nas restrições de recursos ou nas condições de execução.
+ As dicas são incorporadas diretamente nas cadeias de caracteres de consulta SQL para e. CreateAnalysisTemplate StartProtectedQuery APIs
+ As dicas devem ser colocadas diretamente após a palavra-chave SELECT.
+ Os parâmetros nomeados não são compatíveis com dicas e gerarão uma exceção.
+ Os nomes das colunas nas dicas REPARTITION e REPARTITION\$1BY\$1RANGE devem existir no esquema de entrada.
+ Os nomes das colunas nas dicas de REBALANCE devem aparecer na lista de saída SELECT.
+ Os parâmetros numéricos devem ser números inteiros positivos entre 1 e 2147483647. Não há suporte para notações científicas como *1e1*
+ As dicas não são suportadas em consultas SQL de privacidade diferencial.
+ As dicas para consultas SQL não são suportadas em PySpark trabalhos. Para fornecer diretrizes para planos de execução em um PySpark trabalho, use a API de data frame. Consulte a [documentação da DataFrame API Apache Spark para obter mais informações.](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.hint.html) 