Indicateurs (SQL Analytics)Hints (SQL Analytics)

Suggérer des approches spécifiques pour générer un plan d’exécution.Suggest specific approaches to generate an execution plan.

SyntaxeSyntax

/*+ hint [ , ... ] */

Indicateurs de partitionnementPartitioning hints

Les indicateurs de partitionnement vous permettent de suggérer une stratégie de partitionnement que SQL Analytics doit suivre.Partitioning hints allow you to suggest a partitioning strategy that SQL Analytics should follow. COALESCEles REPARTITION indicateurs, et REPARTITION_BY_RANGE sont pris en charge et sont équivalents, coalesce repartition , et les API de repartitionByRange DataSet, respectivement.COALESCE, REPARTITION, and REPARTITION_BY_RANGE hints are supported and are equivalent to coalesce, repartition, and repartitionByRange Dataset APIs, respectively. Ces indicateurs vous permettent de régler les performances et de contrôler le nombre de fichiers de sortie.These hints give you a way to tune performance and control the number of output files. Lorsque plusieurs indicateurs de partitionnement sont spécifiés, plusieurs nœuds sont insérés dans le plan logique, mais l’indicateur le plus à gauche est choisi par l’optimiseur.When multiple partitioning hints are specified, multiple nodes are inserted into the logical plan, but the leftmost hint is picked by the optimizer.

Types d’indicateurs de partitionnementPartitioning hint types

  • COALESCECOALESCE

    Réduire le nombre de partitions sur le nombre spécifié de partitions.Reduce the number of partitions to the specified number of partitions. Il accepte un numéro de partition en tant que paramètre.It takes a partition number as a parameter.

  • REPARTITIONNERREPARTITION

    Repartitionner le nombre spécifié de partitions à l’aide des expressions de partitionnement spécifiées.Repartition to the specified number of partitions using the specified partitioning expressions. Il prend un numéro de partition, des noms de colonnes, ou les deux en tant que paramètres.It takes a partition number, column names, or both as parameters.

  • REPARTITION_BY_RANGEREPARTITION_BY_RANGE

    Repartitionner le nombre spécifié de partitions à l’aide des expressions de partitionnement spécifiées.Repartition to the specified number of partitions using the specified partitioning expressions. Elle prend les noms de colonnes et un numéro de partition facultatif en tant que paramètres.It takes column names and an optional partition number as parameters.

ExemplesExamples

SELECT /*+ COALESCE(3) */ * FROM t;

SELECT /*+ REPARTITION(3) */ * FROM t;

SELECT /*+ REPARTITION(c) */ * FROM t;

SELECT /*+ REPARTITION(3, c) */ * FROM t;

SELECT /*+ REPARTITION_BY_RANGE(c) */ * FROM t;

SELECT /*+ REPARTITION_BY_RANGE(3, c) */ * FROM t;

-- multiple partitioning hints
EXPLAIN EXTENDED SELECT /*+ REPARTITION(100), COALESCE(500), REPARTITION_BY_RANGE(3, c) */ * FROM t;
== Parsed Logical Plan ==
'UnresolvedHint REPARTITION, [100]
+- 'UnresolvedHint COALESCE, [500]
   +- 'UnresolvedHint REPARTITION_BY_RANGE, [3, 'c]
      +- 'Project [*]
         +- 'UnresolvedRelation [t]

== Analyzed Logical Plan ==
name: string, c: int
Repartition 100, true
+- Repartition 500, false
   +- RepartitionByExpression [c#30 ASC NULLS FIRST], 3
      +- Project [name#29, c#30]
         +- SubqueryAlias spark_catalog.default.t
            +- Relation[name#29,c#30] parquet

== Optimized Logical Plan ==
Repartition 100, true
+- Relation[name#29,c#30] parquet

== Physical Plan ==
Exchange RoundRobinPartitioning(100), false, [id=#121]
+- *(1) ColumnarToRow
   +- FileScan parquet default.t[name#29,c#30] Batched: true, DataFilters: [], Format: Parquet,
      Location: CatalogFileIndex[file:/spark/spark-warehouse/t], PartitionFilters: [],
      PushedFilters: [], ReadSchema: struct<name:string>

Indicateurs de jointureJoin hints

Les indicateurs de jointure vous permettent de suggérer la stratégie de jointure que SQL Analytics doit utiliser.Join hints allow you to suggest the join strategy that SQL Analytics should use. Lorsque différents indicateurs de stratégie de jointure sont spécifiés des deux côtés d’une jointure, SQL Analytics hiérarchise les indicateurs dans l’ordre suivant : plus de BROADCAST MERGE SHUFFLE_HASH SHUFFLE_REPLICATE_NL .When different join strategy hints are specified on both sides of a join, SQL Analytics prioritizes hints in the following order: BROADCAST over MERGE over SHUFFLE_HASH over SHUFFLE_REPLICATE_NL. Lorsque les deux côtés sont spécifiés avec l' BROADCAST indicateur ou l' SHUFFLE_HASH indicateur, SQL Analytics choisit le côté Build en fonction du type de jointure et de la taille des relations.When both sides are specified with the BROADCAST hint or the SHUFFLE_HASH hint, SQL Analytics picks the build side based on the join type and the sizes of the relations. Comme une stratégie donnée peut ne pas prendre en charge tous les types de jointure, il n’est pas garanti que SQL Analytics utilise la stratégie de jointure suggérée par l’indicateur.Since a given strategy may not support all join types, SQL Analytics is not guaranteed to use the join strategy suggested by the hint.

Types d’indicateurs de jointureJoin hint types

  • DIFFUSIONBROADCAST

    Utilisez la jonction de diffusion.Use broadcast join. Le côté de la jointure avec l’indicateur est Broadcast, indépendamment de autoBroadcastJoinThreshold .The join side with the hint is broadcast regardless of autoBroadcastJoinThreshold. Si les deux côtés de la jointure ont les indicateurs de diffusion, celui dont la taille est inférieure (selon les statistiques) est Broadcast.If both sides of the join have the broadcast hints, the one with the smaller size (based on stats) is broadcast. Les alias de BROADCAST sont BROADCASTJOIN et MAPJOIN .The aliases for BROADCAST are BROADCASTJOIN and MAPJOIN.

  • MERGEMERGE

    Utilisez la jointure de fusion de tri aléatoire.Use shuffle sort merge join. Les alias de MERGE sont SHUFFLE_MERGE et MERGEJOIN .The aliases for MERGE are SHUFFLE_MERGE and MERGEJOIN.

  • SHUFFLE_HASHSHUFFLE_HASH

    Utilisez la jointure de hachage aléatoire.Use shuffle hash join. Si les deux côtés possèdent les indicateurs de hachage aléatoires, SQL Analytics choisit le côté le plus petit (en fonction des statistiques) comme côté de la Build.If both sides have the shuffle hash hints, SQL Analytics chooses the smaller side (based on stats) as the build side.

  • SHUFFLE_REPLICATE_NLSHUFFLE_REPLICATE_NL

    Utilisez la jointure de boucle imbriquée de lecture aléatoire et de réplication.Use shuffle-and-replicate nested loop join.

ExemplesExamples

-- Join Hints for broadcast join
SELECT /*+ BROADCAST(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;
SELECT /*+ BROADCASTJOIN (t1) */ * FROM t1 left JOIN t2 ON t1.key = t2.key;
SELECT /*+ MAPJOIN(t2) */ * FROM t1 right JOIN t2 ON t1.key = t2.key;

-- Join Hints for shuffle sort merge join
SELECT /*+ SHUFFLE_MERGE(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;
SELECT /*+ MERGEJOIN(t2) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;
SELECT /*+ MERGE(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- Join Hints for shuffle hash join
SELECT /*+ SHUFFLE_HASH(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- Join Hints for shuffle-and-replicate nested loop join
SELECT /*+ SHUFFLE_REPLICATE_NL(t1) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

-- When different join strategy hints are specified on both sides of a join, SQL Analytics
-- prioritizes the BROADCAST hint over the MERGE hint over the SHUFFLE_HASH hint
-- over the SHUFFLE_REPLICATE_NL hint.
-- SQL Analytics will issue Warning in the following example
-- org.apache.spark.sql.catalyst.analysis.HintErrorLogger: Hint (strategy=merge)
-- is overridden by another hint and will not take effect.
SELECT /*+ BROADCAST(t1), MERGE(t1, t2) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;

Incliner les indicateursSkew hints

(Delta Lake sur Azure Databricks) Pour plus d’informations sur l’indicateur, consultez optimisation de la jointure skew SKEW .(Delta Lake on Azure Databricks) See Skew join optimization for information about the SKEW hint.