Tips
Gäller för: Databricks SQL Databricks Runtime
Föreslå specifika metoder för att generera en körningsplan.
Syntax
/*+ { partition_hint | join_hint | skew_hint } [, ...] */
Partitioneringstips
Med partitioneringstips kan du föreslå en partitioneringsstrategi som Azure Databricks bör följa.
COALESCE
, REPARTITION
, och REPARTITION_BY_RANGE
tips stöds och motsvarar coalesce
, repartition
och repartitionByRange
Datauppsättnings-API:er.
De här tipsen ger dig ett sätt att justera prestanda och kontrollera antalet utdatafiler.
När flera partitioneringstips anges infogas flera noder i den logiska planen, men tipset längst till vänster väljs av optimeraren.
Syntax
partition_hint
COALESCE ( part_num ) |
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } ) |
REPARTITION_BY_RANGE ( column_name [, ...] [, part_num] ) |
REBALANCE [ ( column_name [, ...] ) ]
Partitioneringstipstyper
COALESCE ( part_num )
Minska antalet partitioner till det angivna antalet partitioner. Det tar ett partitionsnummer som en parameter.
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } )
Partitionering till det angivna antalet partitioner med de angivna partitioneringsuttrycken. Det tar ett partitionsnummer, kolumnnamn eller båda som parametrar.
REPARTITION_BY_RANGE ( column_name [, ...] [, part_num]
Partitionering till det angivna antalet partitioner med de angivna partitioneringsuttrycken. Det tar kolumnnamn och ett valfritt partitionsnummer som parametrar.
REBALANCE [ ( column_name [, ...] ) ]
Tipset
REBALANCE
kan användas för att balansera om frågeresultatets utdatapartitioner, så att varje partition har en rimlig storlek (inte för liten och inte för stor). Det kan ta kolumnnamn som parametrar och göra sitt bästa för att partitionera frågeresultatet med dessa kolumner. Det här är ett bra försök: Om det finns skevhet delar Spark upp de skeva partitionerna så att partitionerna inte blir för stora. Det här tipset är användbart när du behöver skriva resultatet av den här frågan till en tabell för att undvika för små/stora filer. Det här tipset ignoreras om AQE inte är aktiverat.-
Det exponerade namnet på en kolumn eller ett alias för ompartition eller ombalansering av.
part_num
En integraltalliteral. Antalet partitioner att partitionera om till.
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;
> 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>
Kopplingstips
Med join-tips kan du föreslå den kopplingsstrategi som Databricks SQL ska använda.
När olika kopplingsstrategitips anges på båda sidor av en koppling prioriterar Databricks SQL tips i följande ordning: BROADCAST
över MERGE
över SHUFFLE_HASH
SHUFFLE_REPLICATE_NL
.
När båda sidor anges med tipset BROADCAST
eller tipset SHUFFLE_HASH
väljer Databricks SQL byggsidan baserat på kopplingstypen och storleken på relationerna.
Eftersom en viss strategi kanske inte stöder alla kopplingstyper är Databricks SQL inte garanterat att använda den kopplingsstrategi som föreslås i tipset.
Syntax
join_hint
BROADCAST ( table_name ) |
MERGE ( table_name ) |
SHUFFLE_HASH ( table_name ) |
SHUFFLE_REPLICATE_NL ( table_name )
BROADCASTJOIN
och MAPJOIN
stöds som alias för BROADCAST
.
SHUFFLE_MERGE
och MERGEJOIN
stöds som alias för MERGE
.
Kopplingstipstyper
BROADCAST ( table_name )
Använd sändningskoppling. Kopplingssidan med tipset sänds oavsett
autoBroadcastJoinThreshold
. Om båda sidor av kopplingen har sändningstipsen sänds den med den mindre storleken (baserat på statistik).MERGE ( table_name )
Använd blanda sammanfogningskoppling.
SHUFFLE_HASH ( table_name )
Använd shuffle hash join. Om båda sidor har shuffle-hashtipsen väljer Databricks SQL den mindre sidan (baserat på statistik) som byggsida.
SHUFFLE_REPLICATE_NL ( table_name )
Använd shuffle-and-replicate kapslad loopkoppling.
-
Det exponerade namnet på en tabell eller ett tabellalias som tipset gäller för.
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, 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;
Skeva tips
(Delta Lake) Mer information om tips finns i Optimering av skev koppling med hjälp av SKEW
snedställningstips.