Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Важно
Эта документация выведена из обращения и может не обновляться. Продукты, службы или технологии, упомянутые в этом контенте, больше не поддерживаются.
Подсказки по соединению Skew не требуются. Databricks обрабатывает отклонение по умолчанию с помощью адаптивного выполнения запросов (AQE). См. "Адаптивное выполнение запросов" .
Заметка
spark.sql.adaptive.skewJoin.enabled должен быть True, который является параметром по умолчанию в Azure Databricks.
Что такое отклонение данных?
Отклонение данных — это условие, в котором данные таблицы неравномерно распределяются между секциями в кластере. Отклонение данных может существенно снизить производительность запросов, особенно при соединениях. Соединения между большими таблицами требуют перераспределения данных, и перекос может привести к значительному дисбалансу работы в кластере. Вероятно, что перекос данных влияет на запрос, если он, кажется, застревает после завершения очень малого числа задач (например, последних 3 из 200). Чтобы убедиться, что отклонение данных влияет на запрос:
- Щелкните на шаге, который застрял, и убедитесь, что он выполняет соединение.
- После завершения запроса найдите этап соединения и проверьте распределение длительности задачи.
- Сортируйте задачи, уменьшая длительность и проверяя первые несколько задач. Если для выполнения одной задачи потребовалось гораздо больше времени, чем в других задачах, возникает отклонение.
Чтобы улучшить отклонение, Delta Lake в Azure Databricks SQL принимает подсказки в запросах. Благодаря информации из подсказки о перекосе Databricks Runtime может создать лучший план запроса, который не подвержен перекосу данных.
Настройка указания на отклонение с именем отношения
Указание на отклонение должно содержать по крайней мере имя отношения с отклонением. Отношение — это таблица, представление или вложенный запрос. Все соединения с этим отношением затем используют оптимизацию присоединения с отклонением.
-- table with skew
SELECT /*+ SKEW('orders') */
*
FROM orders, customers
WHERE c_custId = o_custId
-- subquery with skew
SELECT /*+ SKEW('C1') */
*
FROM (SELECT * FROM customers WHERE c_custId < 100) C1, orders
WHERE C1.c_custId = o_custId
Настройка указания на отклонение с именами реляционных имен и столбцов
Может быть несколько соединений с отношением, но только некоторые из них будут испытывать перекос. Оптимизация неравномерного соединения имеет некоторые издержки, поэтому лучше использовать такую оптимизацию только при необходимости. Для этой цели подсказка смещения принимает имена столбцов. Только соединения с этими столбцами используют оптимизацию скошенного соединения.
-- single column
SELECT /*+ SKEW('orders', 'o_custId') */
*
FROM orders, customers
WHERE o_custId = c_custId
-- multiple columns
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId')) */
*
FROM orders, customers
WHERE o_custId = c_custId AND o_storeRegionId = c_regionId
Настройка указания на отклонение с именем отношения, именами столбцов и значениями отклонений
Можно также указать значения отклонений в подсказке. В зависимости от запроса и данных значения отклонений могут быть известны (например, потому что они никогда не изменяются) или могут быть легко выяснить. Это снижает затраты на оптимизацию соединения с отклонением. В противном случае Delta Lake автоматически обнаруживает их.
-- single column, single skew value
SELECT /*+ SKEW('orders', 'o_custId', 0) */
*
FROM orders, customers
WHERE o_custId = c_custId
-- single column, multiple skew values
SELECT /*+ SKEW('orders', 'o_custId', (0, 1, 2)) */
*
FROM orders, customers
WHERE o_custId = c_custId
-- multiple columns, multiple skew values
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId'), ((0, 1001), (1, 1002))) */
*
FROM orders, customers
WHERE o_custId = c_custId AND o_storeRegionId = c_regionId