Sugerencias (Databricks SQL)

Sugerir enfoques específicos para generar un plan de ejecución.

Syntax

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

Sugerencias de creación de particiones

Las sugerencias de creación de particiones permiten sugerir una estrategia de creación de particiones que Databricks SQL debe seguir. COALESCESe admiten las sugerencias , y y son equivalentes a , y API de conjunto de REPARTITION REPARTITION_BY_RANGE coalesce repartition repartitionByRange datos, respectivamente. Estas sugerencias le dan una manera de optimizar el rendimiento y controlar el número de archivos de salida. Cuando se especifican varias sugerencias de partición, se insertan varios nodos en el plan lógico, pero el optimizador elige la sugerencia situada más a la izquierda.

Tipos de sugerencias de partición

  • COALESCE

    Reduzca el número de particiones al número especificado de particiones. Toma un número de partición como parámetro.

  • Reparticionar

    Volver a crear particiones en el número especificado de particiones mediante las expresiones de partición especificadas. Toma un número de partición, nombres de columna o ambos como parámetros.

  • REPARTITION_BY_RANGE

    Volver a crear particiones en el número especificado de particiones mediante las expresiones de partición especificadas. Toma nombres de columna y un número de partición opcional como parámetros.

Ejemplos

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>

Sugerencias de combinación

Las sugerencias de combinación permiten sugerir la estrategia de combinación que databricks SQL debe usar. Cuando se especifican sugerencias de estrategia de combinación diferentes en ambos lados de una combinación, SQL de Databricks da prioridad a las sugerencias en el orden siguiente: por encima BROADCAST MERGE de SHUFFLE_HASH SHUFFLE_REPLICATE_NL . Cuando ambos lados se especifican con la sugerencia o la BROADCAST sugerencia, Databricks SQL elige el lado de compilación en función del tipo de combinación y los tamaños de SHUFFLE_HASH las relaciones. Dado que una estrategia determinada puede no admitir todos los tipos de combinación, no se garantiza que Databricks SQL use la estrategia de combinación sugerida por la sugerencia.

Tipos de sugerencias de combinación

  • Difusión

    Use la combinación de difusión. El lado de combinación con la sugerencia se difunde independientemente de autoBroadcastJoinThreshold . Si ambos lados de la combinación tienen las sugerencias de difusión, se difunde el de menor tamaño (basado en estadísticas). Los alias de BROADCAST son BROADCASTJOIN y MAPJOIN .

  • MERGE

    Use la combinación de combinación de ordenación aleatoria. Los alias de MERGE son SHUFFLE_MERGE y MERGEJOIN .

  • SHUFFLE_HASH

    Use la combinación de hash aleatorio. Si ambos lados tienen las sugerencias hash de orden aleatorio, Databricks SQL elige el lado más pequeño (en función de las estadísticas) como lado de compilación.

  • SHUFFLE_REPLICATE_NL

    Use la combinación de bucle anidado de orden aleatorio y replicación.

Ejemplos

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

Sugerencias de sesgo

(Delta Lake en Azure Databricks) Consulte Skew join optimization (Optimización de combinación de sesgo) para obtener información sobre la SKEW sugerencia.