更改源表中列的数据类型后,Databricks 中的视图会损坏

问题描述 投票:0回答:1

我注意到,当增量表中列的数据类型从复杂类型更改为标量类型时,所有基础视图都会损坏。

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。

apache-spark pyspark databricks azure-databricks ddl
1个回答
0
投票

视图与表一样具有列和类型,您不能只替换类型而不重新创建视图(因为您需要重新定义该视图的元数据)。我认为关系数据库或多或少也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.