我有一個正在使用廣播連接的Spark SQL查詢,因爲我的表b小於spark.sql.autoBroadcastJoinThreshold
。爲什麼Spark 1.6.1中的Spark SQL不使用CTAS中的廣播連接?
但是,如果我將完全相同的select查詢放入CTAS查詢中,那麼由於某種原因它不使用廣播連接。
的選擇查詢看起來是這樣的:
select id,name from a join b on a.name = b.bname;
而且解釋這看起來這樣的:
== Physical Plan ==
Project [id#1,name#2]
+- BroadcastHashJoin [name#2], [bname#3], BuildRight
:- Scan ParquetRelation: default.a[id#1,name#2] InputPaths: ...
+- ConvertToUnsafe
+- HiveTableScan [bname#3], MetastoreRelation default, b, Some(b)
然後我CTAS看起來是這樣的:
create table c as select id,name from a join b on a.name = b.bname;
而且解釋爲此返回:
== Physical Plan ==
ExecutedCommand CreateTableAsSelect [Database:default}, TableName: c, InsertIntoHiveTable]
+- Project [id#1,name#2]
+- Join Inner, Some((name#2 = bname#3))
:- Relation[id#1,name#2] ParquetRelation: default.a
+- MetastoreRelation default, b, Some(b)
是否期望不使用廣播連接作爲屬於CTAS查詢一部分的選擇查詢?如果沒有,是否有辦法強制CTAS使用廣播連接?