

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Las sugerencias para los análisis de SQL proporcionan directrices de optimización que guían las estrategias de ejecución de consultas AWS Clean Rooms, lo que te permite mejorar el rendimiento de las consultas y reducir los costes de procesamiento. Las sugerencias sugieren cómo el motor de análisis de Spark debe generar su plan de ejecución.

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

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

Las sugerencias se incluyen en las consultas SQL mediante una sintaxis similar a la de un comentario y deben colocarse directamente después de la palabra clave SELECT.

## Tipos de sugerencias compatibles
<a name="supported-hint-types"></a>

AWS Clean Rooms admite dos categorías de sugerencias: sugerencias de unión y sugerencias de partición.

**Topics**
+ [Únase a las sugerencias](join-hints.md)
+ [Sugerencias de particionamiento](partitioning-hints.md)

# Únase a las sugerencias
<a name="join-hints"></a>

Los consejos de unión sugieren estrategias de unión para la ejecución de consultas. La sintaxis, los argumentos y algunos ejemplos provienen de la [referencia SQL de Apache Spark](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#join-hints) para obtener más información

### EMISIÓN
<a name="broadcast-hint"></a>

Sugiere AWS Clean Rooms utilizar broadcast join. La parte de unión con la sugerencia se emitirá independientemente del autoBroadcastJoin umbral. Si ambos lados de la unión tienen las sugerencias emitidas, se emitirá la que tenga el tamaño más pequeño (según las estadísticas).

*Alias:* BROADCASTJOIN, MAPJOIN

*Parámetros: identificadores* de tabla (opcionales)

*Ejemplos*:

```
-- 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>

Sugiere que se AWS Clean Rooms utilice la combinación, la ordenación, la combinación y la combinación.

*Alias:* SHUFFLE\$1MERGE, MERGEJOIN

*Parámetros:* identificadores de tabla (opcionales)

*Ejemplos*:

```
-- 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>

Sugiere AWS Clean Rooms usar shuffle hash join. Si ambos lados tienen las sugerencias de mezcla aleatoria, el optimizador de consultas elige el lado más pequeño (según las estadísticas) como el lado de construcción.

*Parámetros:* identificadores de tabla (opcionales)

*Ejemplos*:

```
-- 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>

Sugiere utilizar una unión de bucles anidada. AWS Clean Rooms shuffle-and-replicate

*Parámetros:* identificadores de tabla (opcionales)

*Ejemplos*:

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

### Consejos para la solución de problemas en Spark SQL
<a name="join-hint-warning-cases"></a>

La siguiente tabla muestra situaciones comunes en las que no se aplican sugerencias en SparkSQL. Para obtener información adicional, consulta [Consideraciones y limitaciones](sql-commands-hints-spark.md#hints-usage-notes).

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

# Sugerencias de particionamiento
<a name="partitioning-hints"></a>

Las sugerencias de particionamiento controlan la distribución de datos entre los nodos ejecutores. Cuando se especifican varias sugerencias de partición, se insertan varios nodos en el plan lógico, pero el optimizador selecciona la sugerencia situada más a la izquierda.

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

Reduce el número de particiones al número de particiones especificado.

*Parámetros:* valor numérico (obligatorio): debe ser un número entero positivo comprendido entre 1 y 2147483647

*Ejemplos*:

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

### REPARTICIÓN
<a name="repartition-hint"></a>

Redivide los datos en el número especificado de particiones mediante las expresiones de partición especificadas. Utiliza una distribución por turnos.

*Parámetros:*
+ Valor numérico (opcional): número de particiones; debe ser un entero positivo entre 1 y 2147483647
+ Identificadores de columna (opcionales): columnas por las que realizar la partición; estas columnas deben existir en el esquema de entrada.
+ Si se especifican ambos, el valor numérico debe ser lo primero

*Ejemplos*:

```
-- 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;
```

### REPARTICIÓN\$1POR\$1RANGO
<a name="repartition-by-range-hint"></a>

Redivide los datos en el número especificado de particiones mediante la partición por rangos en las columnas especificadas.

*Parámetros:*
+ Valor numérico (opcional): número de particiones; debe ser un entero positivo entre 1 y 2147483647
+ Identificadores de columna (opcionales): columnas por las que realizar la partición; estas columnas deben existir en el esquema de entrada.
+ Si se especifican ambos, el valor numérico debe ser lo primero

*Ejemplos*:

```
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 las particiones de salida de los resultados de la consulta para que cada partición tenga un tamaño razonable (ni demasiado pequeña ni demasiado grande). Se trata de una operación que se realiza con el máximo esfuerzo: si hay sesgos, AWS Clean Rooms dividirá las particiones asimétricas para que no sean demasiado grandes. Esta sugerencia resulta útil cuando se necesita escribir el resultado de una consulta en una tabla para evitar archivos demasiado pequeños o demasiado grandes.

*Parámetros:*
+ Valor numérico (opcional): número de particiones; debe ser un entero positivo entre 1 y 2147483647
+ Identificadores de columna (opcionales): las columnas deben aparecer en la lista de resultados SELECT
+ Si se especifican ambos, el valor numérico debe figurar primero

*Ejemplos*:

```
-- 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;
```

## Combinar varias sugerencias
<a name="combining-multiple-hints"></a>

Puede especificar varias sugerencias en una sola consulta separándolas con comas:

```
-- 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;
```

## Consideraciones y limitaciones
<a name="hints-usage-notes"></a>
+ Las sugerencias son sugerencias de optimización, no comandos. El optimizador de consultas puede ignorar las sugerencias en función de las restricciones de recursos o las condiciones de ejecución.
+ Las sugerencias se incrustan directamente en las cadenas de consulta SQL para CreateAnalysisTemplate y StartProtectedQuery APIs.
+ Las sugerencias deben colocarse directamente después de la palabra clave SELECT.
+ Los parámetros con nombre no se admiten con sugerencias y generarán una excepción.
+ Los nombres de las columnas de las sugerencias REPARTITION y REPARTITION\$1BY\$1RANGE deben existir en el esquema de entrada.
+ Los nombres de las columnas de las sugerencias de REBALANCE deben aparecer en la lista de resultados SELECT.
+ Los parámetros numéricos deben ser enteros positivos entre 1 y 2147483647. *No se admiten anotaciones científicas como 1e1*
+ Las sugerencias no se admiten en las consultas SQL de privacidad diferencial.
+ Los PySpark trabajos no admiten sugerencias para consultas SQL. Para proporcionar directrices para los planes de ejecución de un PySpark trabajo, utilice la API de marco de datos. Consulte los [documentos de la DataFrame API de Apache Spark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.hint.html) para obtener más información. 