Módosítók

A következőkre vonatkozik:check marked yes Databricks SQL check marked yes Databricks Runtime

Konkrét módszereket javasolhat végrehajtási terv létrehozásához.

Syntax

/*+ { partition_hint | join_hint | skew_hint } [, ...] */

Particionálási tippek

A particionálási tippek segítségével olyan particionálási stratégiát javasolhat, amelyet az Azure Databricksnek követnie kell. COALESCE, REPARTITIONés REPARTITION_BY_RANGE a tippek támogatottak, és egyenértékűek coalesceaz , repartitionés repartitionByRange az Adathalmaz API-kkal. Ezek a tippek lehetővé teszik a teljesítmény finomhangolását és a kimeneti fájlok számának szabályozását. Ha több particionálási tipp van megadva, a rendszer több csomópontot szúr be a logikai tervbe, de a bal szélső tippet az optimalizáló választja ki.

Syntax

partition_hint
  COALESCE ( part_num ) |
  REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } ) |
  REPARTITION_BY_RANGE ( column_name [, ...] [, part_num] ) |
  REBALANCE [ ( column_name [, ...] ) ]

Particionálási tipptípusok

  • COALESCE ( part_num )

    Csökkentse a partíciók számát a megadott számú partícióra. Paraméterként egy partíciószámot vesz igénybe.

  • REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } )

    A megadott számú partícióhoz való újraparticionálás a megadott particionálási kifejezések használatával. Paraméterként partíciószámot, oszlopneveket vagy mindkettőt használ.

  • REPARTITION_BY_RANGE ( column_name [, ...] [, part_num]

    A megadott számú partícióhoz való újraparticionálás a megadott particionálási kifejezések használatával. Paraméterként oszlopneveket és opcionális partíciószámot használ.

  • REBALANCE [ ( column_name [, ...] ) ]

    A REBALANCE tipp a lekérdezés eredménykimeneti partícióinak újraegyensúlyozására használható, így minden partíció mérete ésszerű (nem túl kicsi és nem túl nagy). Az oszlopneveket paraméterként használhatja, és megpróbálhatja a lehető legjobban particionelni a lekérdezés eredményét ezekkel az oszlopokkal. Ez a legjobb megoldás: ha van ferdeség, a Spark felosztja a ferde partíciókat, hogy ezek a partíciók ne legyenek túl nagyok. Ez a tipp akkor hasznos, ha a lekérdezés eredményét egy táblába kell írnia, hogy elkerülje a túl kicsi/nagy fájlokat. A rendszer figyelmen kívül hagyja ezt a tippet, ha az AQE nincs engedélyezve.

  • column_name

    Egy oszlop vagy alias közzétett neve az újraparticionáláshoz vagy kiegyensúlyozáshoz.

  • part_num

    Egy integrál számkonstans. Az újraparticionálásra kijelölt partíciók száma.

Példák

> 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>

Csatlakozási tippek

Az illesztési tippek lehetővé teszik, hogy javaslatot tegyen a Databricks SQL által javasolt illesztési stratégiára. Ha az illesztés mindkét oldalán különböző illesztési stratégia-tippek vannak megadva, a Databricks SQL a következő sorrendben rangsorolja a tippeket: BROADCAST over MERGE over over SHUFFLE_HASHSHUFFLE_REPLICATE_NLover . Ha a tipp vagy a BROADCAST tipp mindkét oldalt megadja, a SHUFFLE_HASH Databricks SQL az illesztés típusa és a kapcsolatok mérete alapján választja ki a buildoldalt. Mivel egy adott stratégia nem minden illesztési típust támogat, a Databricks SQL nem biztos, hogy a tipp által javasolt illesztési stratégiát használja.

Syntax

join_hint
  BROADCAST ( table_name ) |
  MERGE ( table_name ) |
  SHUFFLE_HASH ( table_name ) |
  SHUFFLE_REPLICATE_NL ( table_name )

BROADCASTJOIN és MAPJOIN aliasként támogatottak a következőhöz BROADCAST: .

SHUFFLE_MERGE és MERGEJOIN aliasként támogatottak a következőhöz MERGE: .

Illesztés tipptípusai

  • BROADCAST ( table_name )

    Szórásos illesztés használata. A tipp illesztőoldala a következőtől függetlenül adásba autoBroadcastJoinThresholdkerül: . Ha az illesztés mindkét oldalán vannak a szórási tippek, a kisebb méretű (a statisztikák alapján) adásba kerül.

  • MERGE ( table_name )

    Az egyesítési sorrend összekapcsolásának használata.

  • SHUFFLE_HASH ( table_name )

    Shuffle hash join használata. Ha mindkét oldal rendelkezik a shuffle hash tippekkel, a Databricks SQL a kisebb (statisztikákon alapuló) oldalt választja buildoldalként.

  • SHUFFLE_REPLICATE_NL ( table_name )

    Használjon shuffle-and-replikált beágyazott hurokcsatlakozásokat.

  • table_name

    Egy tábla vagy tábla aliasának közzétett neve, amelyre a tipp vonatkozik.

Példák

-- 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;

Ferde tippek

(Delta Lake) A tippre SKEW vonatkozó információkért tekintse meg a ferde illesztés optimalizálását ferde tippek használatával.