

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

Les astuces pour les analyses SQL fournissent des directives d'optimisation qui guident les stratégies d'exécution des requêtes AWS Clean Rooms, vous permettant ainsi d'améliorer les performances des requêtes et de réduire les coûts de calcul. Des indices suggèrent comment le moteur d'analyse Spark doit générer son plan d'exécution.

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

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

Les indices sont intégrés aux requêtes SQL à l'aide d'une syntaxe de type commentaire et doivent être placés directement après le mot clé SELECT.

## Types d'indices pris en charge
<a name="supported-hint-types"></a>

AWS Clean Rooms prend en charge deux catégories d'astuces : les astuces de jointure et les astuces de partitionnement.

**Topics**
+ [Conseils de participation](join-hints.md)
+ [Conseils de partitionnement](partitioning-hints.md)

# Conseils de participation
<a name="join-hints"></a>

Les conseils de jointure suggèrent des stratégies de jointure pour l'exécution des requêtes. La syntaxe, les arguments et quelques exemples proviennent de la [référence SQL Apache Spark](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#join-hints) pour plus d'informations

### DIFFUSER
<a name="broadcast-hint"></a>

Suggère d' AWS Clean Rooms utiliser la jointure par diffusion. La page de jointure contenant l'indice sera diffusée quel que soit le autoBroadcastJoin seuil. Si les deux côtés de la jointure ont des indices de diffusion, celui dont la taille est la plus petite (sur la base des statistiques) sera diffusé.

*Alias :* BROADCASTJOIN, MAPJOIN

*Paramètres :* identificateurs de table (facultatif)

*Exemples :*

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

Suggère d' AWS Clean Rooms utiliser le shuffle, le tri, la fusion, la jointure.

*Alias :* SHUFFLE\$1MERGE, MERGEJOIN

*Paramètres :* identificateurs de table (facultatif)

*Exemples :*

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

Suggère d' AWS Clean Rooms utiliser la jointure par hachage automatique. Si les deux côtés ont des indices de hachage combinés, l'optimiseur de requêtes choisit le côté le plus petit (basé sur les statistiques) comme côté build.

*Paramètres :* identificateurs de table (facultatif)

*Exemples :*

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

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

Suggère d' AWS Clean Rooms utiliser la jointure shuffle-and-replicate par boucle imbriquée.

*Paramètres :* identificateurs de table (facultatif)

*Exemples :*

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

### Conseils de résolution des problèmes dans Spark SQL
<a name="join-hint-warning-cases"></a>

Le tableau suivant montre les scénarios courants dans lesquels les indices ne sont pas appliqués dans SparkSQL. Pour plus d’informations, consultez [Considérations et restrictions](sql-commands-hints-spark.md#hints-usage-notes).

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

# Conseils de partitionnement
<a name="partitioning-hints"></a>

Les conseils de partitionnement contrôlent la distribution des données entre les nœuds exécuteurs. Lorsque plusieurs conseils de partitionnement sont spécifiés, plusieurs nœuds sont insérés dans le plan logique, mais l'indicateur le plus à gauche est sélectionné par l'optimiseur.

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

Réduit le nombre de partitions au nombre de partitions spécifié.

*Paramètres :* valeur numérique (obligatoire) - doit être un entier positif compris entre 1 et 2147483647

*Exemples :*

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

### RÉPARTITION
<a name="repartition-hint"></a>

Repartitionne les données sur le nombre de partitions spécifié à l'aide des expressions de partitionnement spécifiées. Utilise la distribution circulaire.

*Paramètres :*
+ Valeur numérique (facultatif) - nombre de partitions ; doit être un entier positif compris entre 1 et 2147483647
+ Identifiants de colonne (facultatif) - colonnes à partitionner ; ces colonnes doivent exister dans le schéma d'entrée.
+ Si les deux sont spécifiés, la valeur numérique doit apparaître en premier

*Exemples :*

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

### RÉPARTITION PAR PLAGE
<a name="repartition-by-range-hint"></a>

Repartitionne les données sur le nombre de partitions spécifié en utilisant le partitionnement par plage sur les colonnes spécifiées.

*Paramètres :*
+ Valeur numérique (facultatif) - nombre de partitions ; doit être un entier positif compris entre 1 et 2147483647
+ Identifiants de colonne (facultatif) - colonnes à partitionner ; ces colonnes doivent exister dans le schéma d'entrée.
+ Si les deux sont spécifiés, la valeur numérique doit apparaître en premier

*Exemples :*

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

### RÉÉQUILIBRER
<a name="rebalance-hint"></a>

Rééquilibre les partitions de sortie des résultats de la requête afin que chaque partition soit d'une taille raisonnable (ni trop petite ni trop grande). Il s'agit d'une opération très simple : s'il y a des biais, les partitions asymétriques AWS Clean Rooms seront divisées pour qu'elles ne soient pas trop grandes. Cette astuce est utile lorsque vous devez écrire le résultat d'une requête dans une table afin d'éviter des fichiers trop petits ou trop volumineux.

*Paramètres :*
+ Valeur numérique (facultatif) - nombre de partitions ; doit être un entier positif compris entre 1 et 2147483647
+ Identifiants de colonne (facultatif) : les colonnes doivent apparaître dans la liste de sortie SELECT
+ Si les deux sont spécifiés, la valeur numérique doit apparaître en premier

*Exemples :*

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

## Combiner plusieurs astuces
<a name="combining-multiple-hints"></a>

Vous pouvez spécifier plusieurs indices dans une seule requête en les séparant par des virgules :

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

## Considérations et restrictions
<a name="hints-usage-notes"></a>
+ Les indices sont des suggestions d'optimisation et non des commandes. L'optimiseur de requêtes peut ignorer les indications basées sur des contraintes de ressources ou des conditions d'exécution.
+ Les conseils sont intégrés directement dans les chaînes de requête SQL pour les deux CreateAnalysisTemplate et StartProtectedQuery APIs.
+ Les indices doivent être placés directement après le mot clé SELECT.
+ Les paramètres nommés ne sont pas pris en charge par des indices et déclencheront une exception.
+ Les noms de colonnes dans les indications REPARTITION et REPARTITION\$1BY\$1RANGE doivent figurer dans le schéma d'entrée.
+ Les noms des colonnes figurant dans les indices REBALANCE doivent apparaître dans la liste de sortie SELECT.
+ Les paramètres numériques doivent être des entiers positifs compris entre 1 et 2147483647. Les notations scientifiques telles que *1e1* ne sont pas prises en charge
+ Les indices ne sont pas pris en charge dans les requêtes SQL Differential Privacy.
+ Les astuces pour les requêtes SQL ne sont pas prises en charge dans les PySpark jobs. Pour fournir des directives pour les plans d'exécution d'une PySpark tâche, utilisez l'API de trame de données. Consultez la [documentation de DataFrame l'API Apache Spark](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.hint.html) pour plus d'informations. 