我们可以更改Druid中摄取维度后的数据类型吗?

时间:2019-01-21 07:06:49

标签: druid

我们正在对Druid进行POC,以检查其是否适合我们的用例。尽管我们能够提取数据,但不确定以下内容:

  1. 德鲁伊如何支持无模式输入:假设输入尺寸由最终用户决定。然后,这里没有定义的架构。因此,识别新维度,识别数据类型和提取内容有责任。有什么方法可以实现?
  2. 德鲁伊如何支持数据类型的更改:让我们说(当然,在摄取100GB数据之后),需要将维度的数据类型从字符串更改为long或从long更改为string(或其他)。在不妨碍正在进行的摄取的情况下,建议采取什么方法?

我查看了文档,但没有获得关于这两种用例的实质性概述。

2 个答案:

答案 0 :(得分:0)

对于问题1 ,我将所有内容都提取为字符串,并稍后进行查找。应该可以将druid中的字符串列查询为数字

获取在https://github.com/apache/incubator-druid/issues/4888

中解释的可能的行为
  1. 考虑的值为零,请勿尝试解析字符串值。似乎这是当前的行为。

  2. 尝试解析字符串值,如果它们不可解析,则认为它们为零,或者为null或多值

  

当前的一个不一致性是使用基于表达式的列选择器(通过Parser / Expr进行的任何操作)的行为是(2)。请参阅IdentifierExpr +如何处理被视为数字的字符串。但是对于直接列选择器,其行为是(1)。特别是这意味着即使longSum聚合器的“ fieldName”:“ x”与“ expression”:“ x”相比,其行为也会有所不同,即使您可能认为它们的行为也应相同。

您可以在此处关注整个讨论:https://github.com/apache/incubator-druid/issues/4888

对于问题2 ,它认为有必要对数据进行重新索引  -http://druid.io/docs/latest/ingestion/update-existing-data.html  -http://druid.io/docs/latest/ingestion/schema-changes.html

我希望这对您有帮助

答案 1 :(得分:0)

1)在这种情况下,您不需要在druid摄取规范中指定任何维度列,并且druid会将所有非时间戳记的列都视为维度。

有关这种方法的更多详细信息,可以在这里找到: Druid Schema less Ingestion

2)对于第二个问题,您可以更改架构,并且druid将创建具有新数据类型的新段,而您的旧段仍将使用旧数据类型。

在某些情况下,如果要将所有细分保持为新的数据类型,则可以为所有细分重新索引。请查看此链接,以获取有关为所有段重新编制索引的进一步说明。 http://druid.io/docs/latest/ingestion/update-existing-data.html

有关架构更改的其他信息,可以在这里找到: http://druid.io/docs/latest/ingestion/schema-changes.html