Что касается порядка объединений, Spark предоставляет функциональные возможности для поиска оптимальной конфигурации (порядка) таблиц в объединении, но это связано с некоторыми настройками конфигурации (приведенный ниже код предоставляется в PySpark API):
- CBO - должен быть включен оптимизатор на основе затрат (в версии 2.4 он отключен по умолчанию)
spark.conf.set("spark.sql.cbo.enabled", True)
joinReorder должен быть включен (по умолчанию в 2.4 он выключен)
spark.conf.set("spark.sql.cbo.joinReorder.enabled", True)
Чтобы он работал как можно лучше, лучше сначала вычислить статистику для ваших таблиц. Это можно сделать следующим образом:
spark.sql("ANALYZE TABLE table_name COMPUTE STATISTICS FRO COLUMNS col1, col2, ...")
Здесь очень важно вычислить статистику, потому что на основе этого Spark оценит размер таблиц в объединении и соответствующим образом изменит их порядок. Чтобы получить еще более точные оценки, вы также можете включить вычисление гистограммы для столбцов (это также отключено по умолчанию в 2.4):
spark.conf.set("spark.sql.statistics.histogram.enabled", True)
Максимальное количество таблиц, для которых можно использовать это joinReorder
можно управлять с помощью этой настройки
spark.sql.cbo.joinReorder.dp.threshold
, а значение по умолчанию - 12.