当前位置: 首页 > 知识库问答 >
问题:

如何从Databricks Delta表中删除列?

单昊穹
2023-03-14

我最近开始发现Databricks,并面临需要删除增量表的某个列的情况。当我使用后格雷SQL时,它就像

ALTER TABLE main.metrics_table 
DROP COLUMN metric_1;

我正在浏览有关删除的数据砖文档,但它仅涵盖与谓词匹配的行

我还找到了关于DROP数据库、DROP函数和DROP表的文档,但对于如何从delta表中删除列却一无所知。我在这里错过了什么?是否有标准的方法从delta表中删除列?

共有3个答案

宦书
2023-03-14

我想出的一种方法是首先删除表,然后使用覆盖Schema选项从数据帧重新创建表为true。您还需要使用 mode = 覆盖选项,以便它使用数据帧包含的新架构重新创建物理文件。

步骤分解:

  1. 读取数据框中的表格。
  2. 在最终表格中删除不需要的列
  3. 删除从中读取数据的实际表。
  4. 现在将列作为相同的表名删除后保存新创建的数据框。
  5. 但请确保在将数据框保存为表时使用两个选项…(. mode("overwrite"). ption("overwriteSchema","true"))

以上步骤将帮助您在删除额外列的情况下重新创建相同的表。希望它能帮助面临类似问题的人。

龚德本
2023-03-14

使用以下代码:

df = spark.sql("Select * from <DB Name>.<Table Name>")

df1 = df.drop("<Column Name>")

spark.sql("DROP TABLE if exists <DB Name>.<TableName>_OLD")

spark.sql("ALTER TABLE <DB Name>.<TableName> RENAME TO <DB Name>.<Table Name>_OLD ")

df1.write.format("delta").mode("OVERWRITE").option("overwriteSchema", "true").saveAsTable("<DB Name>.<Table Name>")
章威
2023-03-14

Databricks表上没有删除列选项:https://docs . data bricks . com/spark/latest/spark-SQL/language-manual/alter-table-or-view . html # delta-schema-constructions

请记住,与关系数据库不同,您的存储中有物理拼花文件,您的“表”只是应用于它们的模式。

在关系世界中,您可以更新表元数据以轻松删除列,在大数据世界中,您必须重写基础文件。

从技术上讲,parquet可以处理模式演化(参见parquet格式的模式演化)。但是Delta的Databricks实现却没有。可能太复杂了,不值得。

因此,这种情况下的解决方案是创建一个新表,并从旧表中插入想要保留的列。

 类似资料:
  • 问题内容: 我有一个清单,里面有空清单: 如何删除空列表,以便获得: 我尝试了list.remove(’‘),但这不起作用。 问题答案: 尝试 如果您想摆脱所有“虚假”的东西,例如空字符串,空元组,零,您也可以使用

  • 问题内容: 我有创建元素的代码。我需要单击一次删除一个元素。对于每个元素,我都有。我了解我需要一些功能来通过删除项目。如何使用此功能删除ReactJS中的元素?我的代码: 问题答案: 您正在父级组件中管理数据并在子级组件中呈现UI,因此要从子级组件中删除项目,您需要将一个函数与数据一起传递,从子级中调用该函数并在父级组件内部传递列表项的任何唯一标识符使用该唯一标识符删除项目。 步骤1: 将父组件的

  • 我使用firebase数据库和recycler视图。我使用push()向firebase添加了一个项目列表;命令使用push()时,firebase为每个添加的项目创建唯一的id。 现在,我想删除项目点击删除按钮,但当我尝试删除价值();函数到我的数据库参考,它删除所有存储库,而不仅仅是项目。 这就是我现在所拥有的: 从Firebase读取数据的片段 我的onClick按钮 适配器包com。享受应

  • 问题内容: 我已经看过这篇文章: Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用: 我这样尝试: 此函数需要一个列表和。然后,它使用列表中的n步删除第n个元素,并打印结果。 这是我的函数调用: 错误的输出: 代替 然后我从上面的链接尝试了一个变体: 再次,函数调用: 给了我同样的错误的结果: 不是 如何正确地从列表中删除/删除/删除 第n个 项目? 问题

  • 问题内容: 我做了一个模型,然后运行python manage.py syncdb。我认为在数据库中创建了一个表。然后我意识到我错误地创建了一个列,因此我更改了它,并运行了相同的命令,以为它将删除旧表并添加一个新表。 然后,我转到python manage.py shell,并尝试运行.objects.all(),但失败了,并说该列不存在。 我想清除旧表,然后再次运行syncdb,但是我不知道该怎

  • 问题内容: 我想从列表中删除重复项,但我无法正常工作: 问题答案: 如果该代码不起作用,则可能是你未在该类上正确实现。 大概有一些钥匙(我们称之为)可以唯一地标识一个客户。例如 的适当定义equals(Object)如下所示: 为了完整起见,你还应该实现hashCode两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配项为equals: 还值得注意的是,如果列表很大,