Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
Databricks Runtime
Stel specifieke benaderingen voor het genereren van een uitvoeringsplan voor.
Syntaxis
/*+ { partition_hint | join_hint | skew_hint } [, ...] */
Hints voor partitioneren
Met partitioneringshints kunt u een partitioneringsstrategie voorstellen die Azure Databricks moet volgen.
COALESCE, REPARTITIONen REPARTITION_BY_RANGE hints worden ondersteund en zijn respectievelijk gelijk aan coalesce, repartitionen repartitionByRange gegevensset-API's.
Deze hints geven u een manier om de prestaties af te stemmen en het aantal uitvoerbestanden te beheren.
Wanneer er meerdere partitioneringshints worden opgegeven, worden meerdere knooppunten ingevoegd in het logische plan, maar wordt de meest linkse hint gekozen door de optimizer.
Syntaxis
partition_hint
COALESCE ( part_num ) |
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } ) |
REPARTITION_BY_RANGE ( part_num [, column_name [, ...] ] | column_name [, ...] ) |
REBALANCE [ ( column_name [, ...] ) ]
Partitioneren van hinttypen
COALESCE ( part_num )Verminder het aantal partities tot het opgegeven aantal partities. Er wordt een partitienummer als parameter gebruikt.
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } )Opnieuw partitioneren naar het opgegeven aantal partities met behulp van de opgegeven partitioneringsexpressies. Er wordt een partitienummer, kolomnamen of beide als parameters gebruikt.
REPARTITION_BY_RANGE ( part_num [, column_name [, ...] ] | column_name [, ...] )Opnieuw partitioneren naar het opgegeven aantal partities met behulp van de opgegeven partitioneringsexpressies. Hierbij worden kolomnamen en een optioneel partitienummer als parameters gebruikt.
REBALANCE [ ( column_name [, ...] ) ]De
REBALANCEhint kan worden gebruikt om de uitvoerpartities van het queryresultaat opnieuw te verdelen, zodat elke partitie een redelijke grootte heeft (niet te klein en niet te groot). Het kan kolomnamen als parameters gebruiken en het beste proberen om het queryresultaat te partitioneren door deze kolommen. Dit is een inspanning op best-effort-basis: als er scheeftrekken zijn, splitst Spark de scheve partities om deze partities niet te groot te maken. Deze hint is handig wanneer u het resultaat van deze query naar een tabel moet schrijven om te voorkomen dat er te weinig/grote bestanden zijn. Deze hint wordt genegeerd als AQE niet is ingeschakeld.-
De zichtbare naam van een kolom of alias om te herpartitioneren of opnieuw te balanceren.
part_numEen letterlijke waarde van een integraal getal. Het aantal partities waarnaar moet worden gepartitioneerd.
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;
> SELECT /*+ REBALANCE */ * FROM t;
> SELECT /*+ REBALANCE(c) */ * FROM t;
-- When a column name has been occluded by an alias you must refere to it by the alias name.
> SELECT /*+ REBALANCE(d) */ * FROM t AS s(d);
-- 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 toetreding
Met joinhints kunt u de joinstrategie voorstellen die Databricks SQL moet gebruiken.
Wanneer verschillende joinstrategiehints aan beide zijden van een join worden opgegeven, geeft Databricks SQL prioriteit aan hints in de volgende volgorde: BROADCAST over MERGE over SHUFFLE_HASH over SHUFFLE_REPLICATE_NL.
Wanneer beide zijden worden opgegeven met de BROADCAST hint of de SHUFFLE_HASH hint, kiest Databricks SQL de build-zijde op basis van het jointype en de grootte van de relaties.
Omdat een bepaalde strategie mogelijk niet alle jointypen ondersteunt, kan Databricks SQL niet gegarandeerd de joinstrategie gebruiken die wordt voorgesteld door de hint.
Syntaxis
join_hint
BROADCAST ( table_name ) |
MERGE ( table_name ) |
SHUFFLE_HASH ( table_name ) |
SHUFFLE_REPLICATE_NL ( table_name )
BROADCASTJOIN en MAPJOIN worden ondersteund als aliassen voor BROADCAST.
SHUFFLE_MERGE en MERGEJOIN worden ondersteund als aliassen voor MERGE.
Hinttypen voor joins
BROADCAST ( table_name )Gebruik een broadcast join. De kant die samengevoegd moet worden met de hint wordt doorgestuurd, ongeacht
autoBroadcastJoinThreshold. Als beide zijden van de join de broadcast-hints hebben, wordt degene met de kleinere omvang (op basis van statistieken) uitgezonden.MERGE ( table_name )Gebruik samenvoegen in willekeurige volgorde.
SHUFFLE_HASH ( table_name )Gebruik shuffle-hash-join. Als beide zijden de hash-hints voor willekeurige volgorde hebben, kiest Databricks SQL de kleinere kant (op basis van statistieken) als build-zijde.
SHUFFLE_REPLICATE_NL ( table_name )Gebruik geneste lus-samenvoeging met shuffle-en-repliceren.
-
De weergegeven naam van een tabel of tabelalias waarop de hint van toepassing is.
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;
-- When a table name is occluded by an alias you must use the alias name in the hint
> SELECT /*+ BROADCAST(t1), MERGE(s1, s2) */ * FROM t1 AS s1 INNER JOIN t2 AS s2 ON s1.key = s2.key;
Scheefheidsaanwijzingen
(Deltameer) Zie Optimalisatie van scheve join met behulp van schevehints voor informatie over de SKEW hint.