我有一個這樣的聲明pyspark:
target_tbl.alias \(“目標”)
.merge (stage_df.hint(“廣播”).alias(“源”),merge_join_expr) \
.whenMatchedUpdateAll () \
.whenNotMatchedInsertAll () \
.whenNotMatchedBySourceDelete () \
. execute ()
不接受廣播提示。我得到如下:
加入提示忽略:這個查詢(策略=廣播)的加入暗示不與任何連接操作符,因此將被忽略。調查查詢提示是否正確放置。
在這個視頻:
https://www.youtube.com/watch?v=o2k9PICWdx0&t=797s
據說,這種方法是有效的
@Nikolay Chalkanov:
錯誤消息表明,加入提示不與任何連接操作符。這可能發生,如果提示不正確放置,或者如果沒有連接操作符的查詢可以利用提示。
在您發布的代碼,似乎你使用合並方法執行join操作。根據三角洲湖文檔,合並方法不支持廣播提示:
https://docs.delta.io/latest/delta-update.html連接
因此,預計提示被忽略。
你提到的視頻可能會使用不同的方法來執行連接操作,支持廣播提示。你可以嚐試使用連接方法而不是合並,和廣播提示是否接受:
. join (stage_df.hint target_tbl.alias \(“目標”)(“廣播”).alias(“源”),join_expr,“內部”)\ .write.format(“δ”).mode .save(“覆蓋”)(“output_delta”)
請記住,使用廣播提示可以有性能影響,它並不總是最好的選擇根據你的數據的大小和可用的資源。
@Nikolay Chalkanov:
錯誤消息表明,加入提示不與任何連接操作符。這可能發生,如果提示不正確放置,或者如果沒有連接操作符的查詢可以利用提示。
在您發布的代碼,似乎你使用合並方法執行join操作。根據三角洲湖文檔,合並方法不支持廣播提示:
https://docs.delta.io/latest/delta-update.html連接
因此,預計提示被忽略。
你提到的視頻可能會使用不同的方法來執行連接操作,支持廣播提示。你可以嚐試使用連接方法而不是合並,和廣播提示是否接受:
. join (stage_df.hint target_tbl.alias \(“目標”)(“廣播”).alias(“源”),join_expr,“內部”)\ .write.format(“δ”).mode .save(“覆蓋”)(“output_delta”)
請記住,使用廣播提示可以有性能影響,它並不總是最好的選擇根據你的數據的大小和可用的資源。