Closed lordk911 closed 2 years ago
@bowenliang123
Thanks for reporting. Let me have a check.
in our qa env, similar update explain like this:
EXPLAIN EXTENDED UPDATE spkui05_1_s3a_mig SET field_one = 'one' WHERE field_three = 'two';
== Parsed Logical Plan ==
'UpdateIcebergTable [assignment('field_one, one)], ('field_three = two)
+- 'UnresolvedRelation [spkui05_1_s3a_mig], [], false
== Analyzed Logical Plan ==
UpdateIcebergTable [assignment(banana_id#779, banana_id#779), assignment(field_one#780, one), assignment(field_two#781, field_two#781), assignment(field_three#782, field_three#782), assignment(date_created#783, date_created#783)], (field_three#782 = two)
:- RelationV2[banana_id#779, field_one#780, field_two#781, field_three#782, date_created#783] spark_catalog.spkui01.spkui05_1_s3a_mig
+- ReplaceData RelationV2[banana_id#779, field_one#780, field_two#781, field_three#782, date_created#783] spark_catalog.spkui01.spkui05_1_s3a_mig
+- Project [if ((field_three#782 = two)) banana_id#779 else banana_id#779 AS banana_id#788, if ((field_three#782 = two)) one else field_one#780 AS field_one#789, if ((field_three#782 = two)) field_two#781 else field_two#781 AS field_two#790, if ((field_three#782 = two)) field_three#782 else field_three#7...
maybe RowFilterAndDataMaskingMarker
replaces UpdateIcebergTable
is the problem.
@lordk911 can you share your explain statement?
@minyk explain the udpate sql will causes failure. And the exception comes from org.apache.spark.sql.catalyst.analysis.RewriteUpdateTable
from Iceberg's extension. RewriteUpdateTable failed to recognize RowFilterAndDataMaskingMarker as instance of DataSourceV2Relation since in UpdateIcebergTable
method the execution plan is rewritten.
case class UpdateIcebergTable(
table: LogicalPlan,
assignments: Seq[Assignment],
condition: Option[Expression],
rewritePlan: Option[LogicalPlan] = None) extends RowLevelCommand {
lazy val aligned: Boolean = AssignmentUtils.aligned(table, assignments)
override def children: Seq[LogicalPlan] = if (rewritePlan.isDefined) {
table :: rewritePlan.get :: Nil
} else {
table :: Nil
}
The spark's v2 command would not have the table filed as a child, so we will not apply our marker on it and it's fine. but the iceberg custom command adds it to the children function, so we apply our marker upon it and it fails.
It should be fixed now on the master branch. Please have a check if you have some time. @lordk911
Code of Conduct
Search before asking
Describe the bug
env: spark:3.2.1 \ authz:master
1、complie authz from master branch clean package -pl :kyuubi-spark-authz_2.12 -DskipTests -Dspark.version=3.2.1 -Dranger.version=1.2.0 2、put kyuubi-spark-authz_2.12-1.7.0-SNAPSHOT.jar to $SPARK_HOME/jars 3、config spark spark.sql.extensions org.apache.kyuubi.plugin.spark.authz.ranger.RangerSparkExtension,org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,org.apache.kyuubi.sql.KyuubiSparkSQLExtension
spark.sql.catalog.iceberg_catalog org.apache.iceberg.spark.SparkCatalog spark.sql.catalog.iceberg_catalog.type hive
spark.sql.catalog.spark_catalog org.apache.iceberg.spark.SparkSessionCatalog spark.sql.catalog.spark_catalog.type hive
4、use spark-shell 5、spark.sql("create table test.iceberg919(id bigint, name string) USING iceberg") 6、spark.sql("INSERT INTO test.iceberg919 VALUES (1, 'a'), (2, 'b'), (3, 'c')") 7、spark.sql("select * from test.iceberg919").show
8、
all got error with :
is not an Iceberg table
Affects Version(s)
master
Kyuubi Server Log Output
Kyuubi Engine Log Output
No response
Kyuubi Server Configurations
No response
Kyuubi Engine Configurations
No response
Additional context
No response
Are you willing to submit PR?