如何重命名 Databricks 中的列

Dav*_*dox 6 databricks delta-lake

如何重命名 Databricks 中的列?

以下不起作用:

ALTER TABLE mySchema.myTable change COLUMN old_name new_name int
Run Code Online (Sandbox Code Playgroud)

它返回错误:

不支持 ALTER TABLE CHANGE COLUMN 将类型为 'IntegerType >(nullable = true)' 的列 'old_name' 更改为类型为 'IntegerType (nullable = true)' 的'new_name';

如果它有所不同,则该表使用的是 Delta Lake,并且它没有按此“old_name”列进行分区或按 z 排序。

小智 13

您不能在 Databricks 中重命名或更改列数据类型,只能添加新列、重新排序或添加列注释。为此,您必须使用该overwriteSchema选项重写该表。

本文档中获取以下示例:

spark.read.table(...)
  .withColumnRenamed("date", "date_created")
  .write
  .mode("overwrite")
  .option("overwriteSchema", "true")
  .table(...)
Run Code Online (Sandbox Code Playgroud)

  • 语法已经改变,所以现在你应该看看下面 Enayat 的答案。 (4认同)

Cri*_*pan 10

最近发布了一些修改,允许重命名 Databricks 中 DELTA TABLES 上的列。

需要在表上设置此属性:

ALTER TABLE <table_name> SET TBLPROPERTIES (
  'delta.minReaderVersion' = '2',
  'delta.minWriterVersion' = '5',
  'delta.columnMapping.mode' = 'name'
)
Run Code Online (Sandbox Code Playgroud)

之后,您可以像往常一样重命名该列。

ALTER TABLE <table_name> RENAME COLUMN old_col_name TO new_col_name 
Run Code Online (Sandbox Code Playgroud)

检查这个:https: //docs.databricks.com/delta/delta-column-mapping.html

其他有用的链接:

https://docs.databricks.com/delta/delta-batch.html#rename-columns-1

https://docs.databricks.com/delta/delta-batch.html#change-column-type-or-name


Ena*_*yat 8

为了能够重命名列,应使用overwriteSchemasaveAsTable :

spark.read.table(Table_Name)
  .withColumnRenamed("currentName", "newName")
  .write
  .format("delta")
  .mode("overwrite")
  .option("overwriteSchema", "true")
  .saveAsTable("Table_Name")
Run Code Online (Sandbox Code Playgroud)

  • 只需确保将 Table_Name 放在引号中即可。对于 Spark 来说是个新手,由于某种原因,第一次没有点击。 (2认同)