我最近开始发现 Databricks 并面临需要删除增量表的某一列的情况。当我使用 PostgreSQL 时,它就像
ALTER TABLE main.metrics_table
DROP COLUMN metric_1;
我正在查看有关 DELETE 的 Databricks 文档,但它仅涵盖 DELETE the rows that match a predicate
。
我还找到了有关 DROP 数据库、DROP 函数和 DROP 表的文档,但绝对没有关于如何从 delta 表中删除列的内容。我在这里想念什么?是否有从增量表中删除列的标准方法?
原文由 samba 发布,翻译遵循 CC BY-SA 4.0 许可协议
Databricks 表上没有删除列选项: https ://docs.databricks.com/spark/latest/spark-sql/language-manual/alter-table-or-view.html#delta-schema-constructs
请记住,与关系数据库不同,您的存储中有物理 parquet 文件,您的“表”只是已应用于它们的模式。
在关系世界中,您可以更新表元数据以轻松删除列,在大数据世界中,您必须重新编写底层文件。
从技术上讲,parquet 可以处理模式演变(请参阅 parquet 格式的模式演变)。但是 Delta 的 Databricks 实现没有。它可能太复杂了,不值得。
因此,这种情况下的解决方案是创建一个新表并插入要从旧表中保留的列。