Delta Lake UPDATE查詢失敗,出現IllegalState異常

了解如何解決使用Python udf的Delta Lake UPDATE、DELETE或MERGE查詢的問題。

寫的亞當Pavlacka

最後發布日期:2022年5月10日

問題

當你執行Delta Lake時更新刪除,或合並如果查詢在任何轉換中使用Python udf,則會失敗,出現以下異常:

AWS

java.lang.UnsupportedOperationException: Error in SQL statement: IllegalStateException: File (s3a://xxx/table1) to be rewrite not found among candidate files: s3a://xxx/table1/part-00001-39cae1b -9406- 49r2 -99fb-8c865516fbaa- c0001 . snapby .parquet . SQL statement: //xxx/table1 . IllegalStateException: File (s3a://xxx/table1) to be rewrite not found among candidate files
刪除

Azure

java.lang.UnsupportedOperationException: Error in SQL statement: IllegalStateException: File (adl://xxx/table1) to be rewrite not found among candidate files: adl://xxx/table1/part-00001- 39cae1bbb -9406- 49r2 -99fb-8c865516fbaa- c0001 . snapby .parquet
刪除

版本

此問題發生在Databricks運行時5.5及以下版本。

導致

三角洲湖內部依賴於input_file_name ()函數用於如下操作更新刪除,合並input_file_name ()類中使用該值時,返回空值選擇求值Python UDF的語句。更新調用選擇在內部,這將無法返回文件名並導致錯誤。Scala udf不會出現此錯誤。

解決方案

你有兩個選擇:

  • 請使用Databricks Runtime 6.0或以上版本,其中包含此問題的解決方案:(火花- 28153)
  • 如果不能使用Databricks Runtime 6.0或以上版本,請使用Scala udf而不是Python udf。