Hints (Databricks SQL)

Stel specifieke benaderingen voor om een uitvoeringsplan te genereren.

Syntax

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

Hints voor partitioneren

Met partitioneringshints kunt u een partitioneringsstrategie voorstellen die door Databricks SQL moet worden volgt. COALESCE, REPARTITION en REPARTITION_BY_RANGE hints worden ondersteund en zijn gelijk aan coalesce respectievelijk , en repartition repartitionByRange Gegevensset-API's. Deze hints bieden u een manier om de prestaties af te stemmen en het aantal uitvoerbestanden te beheren. Wanneer er meerdere partitioneringshints worden opgegeven, worden er meerdere knooppunten ingevoegd in het logische plan, maar de meest linkse hint wordt door de optimizer opgehaald.

Hinttypen partitioneren

  • COALESCE

    Verminder het aantal partities tot het opgegeven aantal partities. Er wordt een partitienummer als parameter gebruikt.

  • VERDELING

    Partitioneren naar het opgegeven aantal partities met behulp van de opgegeven partitioneringsexpressie. Er wordt een partitienummer, kolomnamen of beide als parameters gebruikt.

  • REPARTITION_BY_RANGE

    Partitioneren naar het opgegeven aantal partities met behulp van de opgegeven partitioneringsexpressie. Kolomnamen en een optioneel partitienummer worden als parameters gebruikt.

Voorbeelden

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>

Hints voor deelnemen

Met join-hints kunt u de join-strategie voorstellen die Databricks SQL moet gebruiken. Wanneer er verschillende hints voor een joinstrategie worden opgegeven aan beide zijden van een join, geeft Databricks SQL prioriteit aan hints in de volgende volgorde: boven BROADCAST MERGE op SHUFFLE_HASH SHUFFLE_REPLICATE_NL . Wanneer beide zijden worden opgegeven met de hint of de hint, kiest BROADCAST Databricks SQL de buildzijde op basis van het jointype en de grootte van de SHUFFLE_HASH relaties. Omdat een bepaalde strategie mogelijk niet alle join-typen ondersteunt, zal Databricks SQL niet gegarandeerd gebruikmaken van de join-strategie die door de hint wordt voorgesteld.

Hinttypen voor joins

  • UITZENDING

    Gebruik broadcast join. De join-zijde met de hint wordt uitgezonden, ongeacht autoBroadcastJoinThreshold . Als beide zijden van de join de broadcast-hints hebben, wordt de ene met de kleinere grootte (op basis van statistieken) uitgezonden. De aliassen BROADCAST voor zijn BROADCASTJOIN en MAPJOIN .

  • SAMENVOEGEN

    Gebruik shuffle sort merge join. De aliassen MERGE voor zijn SHUFFLE_MERGE en MERGEJOIN .

  • SHUFFLE_HASH

    Gebruik shuffle hash join. Als beide zijden de hash-hints voor willekeurige volgorde hebben, kiest Databricks SQL de kleinere zijde (op basis van statistieken) als de buildzijde.

  • SHUFFLE_REPLICATE_NL

    Gebruik shuffle-and-replicate nested loop join.

Voorbeelden

-- 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, Databricks SQL
-- prioritizes the BROADCAST hint over the MERGE hint over the SHUFFLE_HASH hint
-- over the SHUFFLE_REPLICATE_NL hint.
-- Databricks SQL 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;

Schendheidshints

(Delta Lake) Zie Optimalisatie van schendings join voor informatie over de SKEW hint.