相似表的连接时间差异很大

问题描述 投票:0回答:1

我有下面描述的两张表。我通常将此表与另一个较小的表连接(内部连接)。但从执行时间来看,表2大约需要9分钟,而表1大约需要2小时。此外,我注意到表 1 连接的执行摘要中没有 ColumnarToRow 节点和第二个 WholeStageCodegen 节点。我使用广播连接两者。

表1: 大小8TB 列数 151

表2: 大小 5.5TB 列数 90

连接列相同,两个表的液体都聚集在同一列上。两者都经过优化。

与Table1执行总结连接

Completed in 6292595ms
Node(row)
*WholeStageCodegen(1)
-*(5):ColumnarToRow(253,461)
-*(6):Filter(253,461)
(1):Scan parquet **table1** (10,305,644,145)
(2):Filter(9,622,877,502)
(3):Project
(4):Scan parquet **smaller_table** (253,461)
(7):Exchange
(9):BroadcastHashJoin(28,206,425)
(10):Project
(11):WriteFiles
(12):ExecuteWriteIntoDeltaCommand
(13):ResultQueryStage
(23):AdaptiveSparkPlan

与Table2执行总结连接

Completed in 567963 ms
Node (row)
*WholeStageCodegen(1)
-*(6):ColumnarToRow (253,461)
-*(7):Filter (253,461)
*WholeStageCodegen(2)
-*(2):ColumnarToRow (19,364,719,597)
-*(3):Filter (17,548,253,303)
-*(4):Project
-*(10):BroadcastHashJoin (65,712,508)
-*(11):Project
(1):Scan parquet **table2** (19,364,719,597)
(5):Scan parquet **smaller_table**  (253,461)
(8):Exchange
(12):WriteFiles
(13):ExecuteWriteIntoDeltaCommand
(14):ResultQueryStage
(24):AdaptiveSparkPlan

谢谢

apache-spark pyspark databricks
1个回答
0
投票

我在文档或其他资源中找不到它,但 Spark 似乎考虑了列计数来触发 ColumnarToRow 和 WholeStageCodegen 优化。当我在表 1 中仅选择 ~90 列时,它的运行速度与表 2 一样快。感谢您的评论。

© www.soinside.com 2019 - 2024. All rights reserved.