首页 > 解决方案 > 从 Apache Druid 删除列

问题描述

我们如何从 druid 数据源中删除列?

我从数据源规范中删除了它,但我仍然可以在数据源中看到它。

如果有人对此熟悉,请提供帮助。

标签: apachedruid

解决方案


Druid 不像您定义结构的传统数据库,并且该结构适用于所有数据。

数据存储在段中。每个段都包含放入该段中的数据,以及该段的“结构”。

因此,在您的 dataSource 规范中对其进行更改将确保新创建的段不会包含该新列。但是,现有段仍将包含该列。

要删除此列,您需要重新索引旧段。在此重新索引任务期间,您可以从现有段中读取数据并将新的 dataSource 规范应用于它。然后,您可以将其写入您从中读取它的同一段。

请参阅此链接以从现有数据源中读取数据: https ://druid.apache.org/docs/latest/ingestion/native-batch.html#druid-input-source

在最新版本的 druid (0.17.0) 中,这已更改。它以前是由 IngestSegmentFirehose 完成的。

请确保您处理整个段。如果您只覆盖该段的一部分,则所有其他数据都将丢失(至少,在您的数据的新版本中)。

另请注意:应用重写后,druid 会将您的新数据放入较新的版本中。但是,您的“旧”版本仍然存在。如果您没有意识到这一点,您的数据存储可能会增长得非常快。

如果您对结果感到满意,您应该执行 KILL 任务。这将删除不再是“活动”版本的所有数据(来自旧版本)。

如果你是 PH​​P 用户,可以看看这个包:https ://github.com/level23/druid-client

我们已经在一个类中实现了这些重新索引任务以及简单的查询。也许它有帮助。


推荐阅读