【问题标题】:Can we change data type of dimension post ingestion in Druid我们可以在 Druid 中更改维度后摄取的数据类型吗
【发布时间】:2019-01-29 06:26:03
【问题描述】:

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

  1. druid 如何支持无模式输入:假设输入维度由最终用户自行决定。那么这里没有定义的模式。因此,识别新维度、识别数据类型和摄取的责任在于应用程序。有什么方法可以做到这一点?
  2. druid 是如何支持数据类型变化的:在课程中(比如摄取 100GB 的数据后),需要将维度的数据类型从 string 更改为 long 或 long 更改为 string(或其他)。在不妨碍持续摄取的情况下,有什么推荐的方法来做到这一点?

我查看了文档,但无法获得两个用例的实质性概述。

【问题讨论】:

    标签: druid


    【解决方案1】:

    对于问题 1,我会将所有内容都作为字符串提取,然后再计算出来。应该可以将druid中的字符串列查询为数字

    获取解释的可能行为:https://github.com/apache/incubator-druid/issues/4888

    1. 考虑值为零,不要尝试解析字符串值。似乎这是当前的行为。

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

    当前的一个不一致之处是,对于基于表达式的列选择器(通过 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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      1) 在这种情况下,您不需要在 druid ingestion spec 中指定任何维度列,并且 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-03-18
        • 2020-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多