Tips

Tipsen ger dig ett sätt att föreslå hur Spark SQL använder olika metoder för att generera sin körnings plan.

Syntax

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

Partitionerings tips

Med partitionerings tips kan du föreslå en partitionerings strategi som Spark ska följa. COALESCE, REPARTITION -och- REPARTITION_BY_RANGE tipsen stöds och motsvarar API: coalesce repartition erna för repartitionByRange data uppsättningen. De här tipsen ger dig ett sätt att justera prestanda och kontrol lera antalet utdatafiler i Spark SQL. När flera partitionerings tips anges infogas flera noder i den logiska planen, men tipset till vänster plockas av optimeringen.

Typer av partitionerings tips

  • COALESCE

    COALESCETipset kan användas för att minska antalet partitioner till det angivna antalet partitioner. Det tar ett partitionsnummer som en parameter.

  • PARTITIONERA om

    REPARTITIONTipset kan användas för att partitionera om till det angivna antalet partitioner med de angivna partitionerings uttrycken. Det tar ett partitionsnummer, kolumn namn eller båda som parametrar.

  • REPARTITION_BY_RANGE

    REPARTITION_BY_RANGETipset kan användas för att partitionera om till det angivna antalet partitioner med de angivna partitionerings uttrycken. Det tar kolumn namn och ett valfritt partitions nummer som parametrar.

Exempel

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>

Delta i tips

Med kopplings tips kan du föreslå den kopplings strategi som Spark ska använda. Före Spark 3,0 BROADCAST stöddes endast Join-tipset. MERGE``SHUFFLE_HASHoch SHUFFLE_REPLICATE_NL stöd för gemensamma tips lades till i 3,0. När olika strategi tips för koppling anges på båda sidor av en koppling prioriterar Spark tips i följande ordning: BROADCAST över över MERGE SHUFFLE_HASH SHUFFLE_REPLICATE_NL . När båda sidor anges med BROADCAST tipset eller SHUFFLE_HASH tipset väljer Spark Bygg sidan baserat på kopplings typen och storlekarna för relationerna. Eftersom en specifik strategi inte har stöd för alla kopplings typer garanterar inte Spark att använda den kopplings strategi som föreslås av tipset.

Kopplings tips

  • SÄNDNINGAR

    Föreslår att Spark använder broadcast-anslutning. Kopplings sidan med tipset är sändning oavsett autoBroadcastJoinThreshold . Om båda sidor av kopplingen har sändnings tipsen, är den med den mindre storleken (baserat på statistik) sändningen. Alias för BROADCAST är BROADCASTJOIN och MAPJOIN .

  • Katalog

    Föreslår att Spark använder blandad koppling av sortering. Alias för MERGE är SHUFFLE_MERGE och MERGEJOIN .

  • SHUFFLE_HASH

    Föreslår att Spark använder blandad hash-anslutning. Om båda sidorna har blandade hash-tips väljer Spark den mindre sidan (baserat på statistik) som bygg sidan.

  • SHUFFLE_REPLICATE_NL

    Föreslår att Spark använder blanda och replikera kapslad loop-koppling.

Exempel

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

Skeva tips

(Delta Lake på Azure Databricks) Se skeva kopplings optimering för information om SKEW tipset.