Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:
Databricks SQL
Databricks Runtime
Предложить конкретные подходы к созданию плана выполнения.
Синтаксис
/*+ { partition_hint | join_hint | skew_hint } [, ...] */
Указания для секционирования
Указания по секционированием позволяют предложить стратегию секционирования, которая должна соответствовать Azure Databricks.
Указания COALESCE, REPARTITION и REPARTITION_BY_RANGE поддерживаются и эквивалентны программным интерфейсам coalesce, repartition и repartitionByRange наборов данных соответственно.
Эти указания позволяют настроить производительность и контролировать количество выходных файлов.
Если дано несколько указаний для секционирования, в логический план добавляются несколько узлов, а оптимизатор начинает обработку с указания, которое расположено первым слева.
Синтаксис
partition_hint
COALESCE ( part_num ) |
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } ) |
REPARTITION_BY_RANGE ( part_num [, column_name [, ...] ] | column_name [, ...] ) |
REBALANCE [ ( column_name [, ...] ) ]
Типы указаний для секционирования
COALESCE ( part_num )Сокращение количества секций до указанного значения. Он принимает номер раздела как параметр.
REPARTITION ( { part_num | [ part_num , ] column_name [ , ...] } )Выполнение повторного секционирования до заданного количества секций с помощью указанных выражений. Он принимает номер секции, имена столбцов или оба параметра в качестве параметров.
REPARTITION_BY_RANGE ( part_num [, column_name [, ...] ] | column_name [, ...] )Выполнение повторного секционирования до заданного количества секций с помощью указанных выражений. Он принимает имена столбцов и необязательный номер секции в качестве параметров.
REBALANCE [ ( column_name [, ...] ) ]Указание
REBALANCEможно использовать для перебалансировки выходных секций результатов запроса, чтобы каждая секция была разумной (не слишком маленькой и не слишком большой). Он может принимать имена столбцов в качестве параметров и пытаться разделить результат запроса по этим столбцам. Наилучший вариант: если есть отклонения, Spark разделит ассиметричные секции, чтобы сделать эти их не слишком большими. Это указание полезно при написании результата этого запроса в таблицу, чтобы избежать слишком небольших или больших файлов. Это указание игнорируется, если AQE не включены.-
Явное имя столбца или алиас для перераспределения или перебалансировки. Если имя таблицы замещено псевдонимом, необходимо использовать имя псевдонима в подсказке.
part_numЦелочисленный литерал чисел. Количество секций для повторного разделения.
Примеры
> 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>
Указания на присоединение
Указания на присоединение позволяют предложить стратегию присоединения, которую следует использовать Databricks SQL.
Если на обеих сторонах соединения указываются различные подсказки стратегии, Databricks SQL приоритизирует подсказки в следующем порядке: BROADCAST над MERGE над SHUFFLE_HASH над SHUFFLE_REPLICATE_NL.
Если обе стороны указываются подсказкой BROADCAST или подсказкой SHUFFLE_HASH, Databricks SQL выбирает строительную сторону на основе типа соединения и размеров отношений.
Так как данная стратегия может не поддерживать все типы соединений, Databricks SQL не гарантирует использование стратегии присоединения, предлагаемой указанием.
Синтаксис
join_hint
BROADCAST ( table_name ) |
MERGE ( table_name ) |
SHUFFLE_HASH ( table_name ) |
SHUFFLE_REPLICATE_NL ( table_name )
BROADCASTJOIN и MAPJOIN поддерживаются в качестве псевдонимов для BROADCAST.
SHUFFLE_MERGE и MERGEJOIN поддерживаются в качестве псевдонимов для MERGE.
Типы подсказок присоединения
BROADCAST ( table_name )Используйте широковещательное соединение. Сторона соединения с подсказкой транслируется независимо от
autoBroadcastJoinThreshold. Если обе стороны соединения имеют подсказки для передачи, сторона с меньшим размером (на основе статистики) рассылается.MERGE ( table_name )Используйте соединение методом сортировки и слияния с перетасовкой.
SHUFFLE_HASH ( table_name )Используйте алгоритм хеш-соединения с перетасовкой. Если по обе стороны соединения даны указания о соединении с перемешанным хэшем, то сторона сборки определяется по указанию с наименьшим размером (по данными статистики).
SHUFFLE_REPLICATE_NL ( table_name )Используйте алгоритм соединения вложенных циклов с перетасовкой и репликацией.
-
Отображаемое имя таблицы или псевдонима таблицы, к которому применяется подсказка.
Примеры
-- 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;
Указания для неравномерного объединения
(Delta Lake) Сведения о см. в SKEW.