如何在Spark SQL表中更新struct schema

bprjcwpo  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(180)

我的数据湖有一个Delta的spark-sql表(Spark 3.4.0)。
这个表有一个struct列,现在我需要向该struct列添加一个新字段address
我尝试的是:

drop table if exists temp.test_struct ;
create table if not exists temp.test_struct (
  cola int,
  colb struct<name:STRING, age:int>
)

现在更改列:

ALTER TABLE temp.test_struct 
CHANGE COLUMN colb colb struct<name:STRING, age:int, address:STRING>

但是,我得到错误消息:

AnalysisException: Cannot update hive_metastore.temp.test_struct field colb type: update a struct by updating its fields

详细的错误显示在本页的末尾。
为什么会发生这种情况,如何解决这个问题?
任何帮助都是感激不尽的。
详细错误信息:

Error in SQL statement: AnalysisException: Cannot update hive_metastore.temp.test_struct field colb type: update a struct by updating its fields.; line 1 pos 0;
AlterColumn resolvedfieldname(StructField(colb,MapType(StringType,StringType,true),true)), StructType(StructField(name,StringType,true),StructField(age,IntegerType,true),StructField(address,StringType,true))
+- ResolvedTable com.databricks.sql.managedcatalog.UnityCatalogV2Proxy@36a5c0b0, temp.test_struct, DeltaTableV2(org.apache.spark.sql.SparkSession@234aab1e,s3://xxx/temp/test_struct,Some(CatalogTable(
Catalog: hive_metastore
Database: temp
Table: test_struct
Owner: root
Created Time: Tue Sep 19 07:17:23 UTC 2023
Last Access: UNKNOWN
Created By: Spark 3.4.0
Type: MANAGED
Provider: delta
Table Properties: [delta.lastCommitTimestamp=1695107842000, delta.lastUpdateVersion=0, delta.minReaderVersion=1, delta.minWriterVersion=2]
Location:.....
h7wcgrx3

h7wcgrx31#

使用ADD COLUMNS

ALTER TABLE temp.test_struct ADD COLUMNS (colb.address STRING)

更多信息请点击此处。

相关问题