Команда SparkSQL DELETE не удаляет ни одной строки в Apache Iceberg, не так ли?
Я использую Spark SQL 3.0 с scala_2.12. Я вставляю данные в таблицу айсберга и успешно читаю данные из таблицы. Когда я пытался удалить одну неправильную запись из таблицы с помощью искрового SQL, журнал показывает исключение. Проблема 1444 apache iceberg в github показывает удаление уровня строки поддержки айсберга в последней версии. почему удалил неудачно? Я использовал основную версию айсберга 0.10.0. Версия пакета org.apache.iceberg.iceberg-hive - 0.9.1. Пожалуйста помоги! Мой сегмент кода Spark SQL:
public static void deleteSingleDataWithoutCatalog3(){
// SparkSQL Configure
SparkConf sparkSQLConf = new SparkConf();
// 'hadoop_prod' is name of the catalog,which is used in accessing table
sparkSQLConf.set("spark.sql.catalog.hadoop_prod", "org.apache.iceberg.spark.SparkCatalog");
sparkSQLConf.set("spark.sql.catalog.hadoop_prod.type", "hadoop");
sparkSQLConf.set("spark.sql.catalog.hadoop_prod.warehouse", "hdfs://hadoop01:9000/warehouse_path/");
sparkSQLConf.set("spark.sql.sources.partitionOverwriteMode", "dynamic");
SparkSession spark = SparkSession.builder().config(sparkSQLConf).master("local[2]").getOrCreate();
// String selectDataSQLALL = "select * from hadoop_prod.xgfying.booksSpark3 ";
String deleteSingleDataSQL = "DELETE FROM hadoop_prod.xgfying.booksSpark3 where price=33 ";
// spark.sql(deleteSingleDataSQL);
spark.table("hadoop_prod.xgfying.booksSpark3").show();
spark.sql(deleteSingleDataSQL);
spark.table("hadoop_prod.xgfying.booksSpark3").show();
}
когда код запускается, сообщение об исключении:
......
Exception in thread "main" java.lang.IllegalArgumentException: Failed to cleanly delete data files matching: ref(name="price") == 33
at org.apache.iceberg.spark.source.SparkTable.deleteWhere(SparkTable.java:168)
......
Caused by: org.apache.iceberg.exceptions.ValidationException: Cannot delete file where some, but not all, rows match filter ref(name="price") == 33: hdfs://hadoop01:9000/warehouse_path/xgfying/booksSpark3/data/title=Gone/00000-1-9070110f-35f8-4ee5-8047-cca2a1caba1f-00001.parquet
......
1 ответ
Я знаю, что это довольно старый вопрос, недавно я столкнулся с аналогичной проблемой, я смог исправить ее, добавив spark.sql.extension в конфигурацию spark
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions