我注意到,当增量表中列的数据类型从复杂类型更改为标量类型时,所有基础视图都会损坏。
from pyspark.sql.functions import col
spark.sql("create table test.t1(col1 struct<member0: int, member1: string>)")
spark.sql("insert into test.t1 select struct(1, 'some text')")
spark.sql("create view test.v1 as select * from test.t1")
spark.sql("select * from test.v1") # <- works fine
# changing column data type to string
spark.read.table("test.t1").withColumn("col1", col("col1").cast("string")).write.mode("overwrite").option("overwriteSchema", "true").saveAsTable("test.t1")
spark.sql("select * from test.v1") # <- fails with an error
错误是:[CANNOT_UP_CAST_DATATYPE] 无法将spark_catalog.test.t1.col1从“STRING”向上转换为“STRUCT
遇到这种情况怎么办?我的目标是能够在需要时更改列数据类型而不破坏底层视图。 目前我只看到带有 drop+recreate 视图的选项。
Databricks 版本是 13.2,Spark 是 3.4.0。
视图与表一样具有列和类型,您不能只替换类型而不重新创建视图(因为您需要重新定义该视图的元数据)。我认为关系数据库或多或少也是如此。