@@ -23,6 +23,7 @@ import org.apache.spark.sql.catalyst.TableIdentifier
2323import org .apache .spark .sql .catalyst .expressions .{Attribute , Expression }
2424import org .apache .spark .sql .catalyst .plans .QueryPlan
2525import org .apache .spark .sql .connector .read .streaming .SparkDataStream
26+ import org .apache .spark .sql .delta .files .TahoeRemoveFileIndex
2627import org .apache .spark .sql .execution .FileSourceScanExec
2728import org .apache .spark .sql .execution .datasources .HadoopFsRelation
2829import org .apache .spark .sql .types .StructType
@@ -57,16 +58,27 @@ case class DeltaScanTransformer(
5758
5859 override protected def doValidateInternal (): ValidationResult = {
5960 if (
60- requiredSchema.fields.exists(
61- _.name == " __delta_internal_is_row_deleted" ) || requiredSchema.fields.exists(
62- _.name == " __delta_internal_row_index" )
61+ requiredSchemaIncludesDeletionVectorColumns ||
62+ cdfRemoveFilesHaveDeletionVectors
6363 ) {
64- return ValidationResult .failed(s " Deletion vector is not supported in native. " )
64+ return ValidationResult .failed(DeltaScanTransformer . DELETION_VECTOR_UNSUPPORTED )
6565 }
6666
6767 super .doValidateInternal()
6868 }
6969
70+ private def requiredSchemaIncludesDeletionVectorColumns : Boolean = {
71+ requiredSchema.fields.exists(
72+ _.name == " __delta_internal_is_row_deleted" ) || requiredSchema.fields.exists(
73+ _.name == " __delta_internal_row_index" )
74+ }
75+
76+ private def cdfRemoveFilesHaveDeletionVectors : Boolean = relation.location match {
77+ case index : TahoeRemoveFileIndex =>
78+ index.filesByVersion.exists(_.actions.exists(_.deletionVector != null ))
79+ case _ => false
80+ }
81+
7082 override def doCanonicalize (): DeltaScanTransformer = {
7183 DeltaScanTransformer (
7284 relation,
@@ -91,6 +103,8 @@ case class DeltaScanTransformer(
91103
92104object DeltaScanTransformer {
93105
106+ val DELETION_VECTOR_UNSUPPORTED = " Deletion vector is not supported in native."
107+
94108 def apply (scanExec : FileSourceScanExec ): DeltaScanTransformer = {
95109 new DeltaScanTransformer (
96110 scanExec.relation,
0 commit comments