apache - 从 Apache Druid 删除列
问题描述
我们如何从 druid 数据源中删除列?
我从数据源规范中删除了它,但我仍然可以在数据源中看到它。
如果有人对此熟悉,请提供帮助。
解决方案
Druid 不像您定义结构的传统数据库,并且该结构适用于所有数据。
数据存储在段中。每个段都包含放入该段中的数据,以及该段的“结构”。
因此,在您的 dataSource 规范中对其进行更改将确保新创建的段不会包含该新列。但是,现有段仍将包含该列。
要删除此列,您需要重新索引旧段。在此重新索引任务期间,您可以从现有段中读取数据并将新的 dataSource 规范应用于它。然后,您可以将其写入您从中读取它的同一段。
请参阅此链接以从现有数据源中读取数据: https ://druid.apache.org/docs/latest/ingestion/native-batch.html#druid-input-source
在最新版本的 druid (0.17.0) 中,这已更改。它以前是由 IngestSegmentFirehose 完成的。
请确保您处理整个段。如果您只覆盖该段的一部分,则所有其他数据都将丢失(至少,在您的数据的新版本中)。
另请注意:应用重写后,druid 会将您的新数据放入较新的版本中。但是,您的“旧”版本仍然存在。如果您没有意识到这一点,您的数据存储可能会增长得非常快。
如果您对结果感到满意,您应该执行 KILL 任务。这将删除不再是“活动”版本的所有数据(来自旧版本)。
如果你是 PHP 用户,可以看看这个包:https ://github.com/level23/druid-client
我们已经在一个类中实现了这些重新索引任务以及简单的查询。也许它有帮助。
推荐阅读
- python - Binance WebSocket 使用 Jupyter 但不使用 VSCode
- python - 尝试运行使用 pyinstaller 创建的 Mac 应用程序时,“加载 Python 库时出错”...“找不到图像错误”是什么意思?
- keras - 如何设计训练数据集以让 NN 翻译模型捕捉模式并增加可扩展性?
- android - 用毕加索检查 imageView 是否为空
- android - 所有电视设备和显示器的 AndroidTV 盒子的屏幕分辨率相同
- python - Django 用 Sum 多次注释得到错误的答案
- python - 在 django 原始查询中使用引号添加字符串
- java - 停止变量减去几秒钟
- sql - 在某些情况下,按查询结果对分区进行 SQL 查询 row_number() 会返回错误
- javascript - 单击添加任务按钮时,我的引导模式未打开