Apache Druid:更新数据源中的数据时出现问题

我当前正在使用druid-Incubating-0.16.0版本。如https://druid.apache.org/docs/latest/tutorials/tutorial-update-data.html教程链接中所述,我们可以使用组合firehose来更新和合并数据源的数据。

步骤:1 我正在使用与初始结构相同的示例数据

┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ tiger    │     1 │    100 │
│ 2018-01-01T03:01:00.000Z │ aardvark │     1 │     42 │
│ 2018-01-01T03:01:00.000Z │ giraffe  │     1 │  14124 │
└──────────────────────────┴──────────┴───────┴────────┘

步骤2: 我使用appendToExisting = false和rollUp = true用{“ timestamp”:“ 2018-01-01T01:01:35Z”,“ animal”:“ tiger”,“ number”:30}更新了tiger的数据,并找到了结果

┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ tiger    │     2 │    130 │
│ 2018-01-01T03:01:00.000Z │ aardvark │     1 │     42 │
│ 2018-01-01T03:01:00.000Z │ giraffe  │     1 │  14124 │
└──────────────────────────┴──────────┴───────┴────────┘

步骤3: 现在我用{“ timestamp”:“ 2018-01-01T03:01:35Z”,“ animal”:“ giraffe”,“ number”:30}更新长颈鹿,appendToExisting = false和rollUp = true,并得到以下结果

┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T01:01:00.000Z │ tiger    │     1 │    130 │
│ 2018-01-01T03:01:00.000Z │ aardvark │     1 │     42 │
│ 2018-01-01T03:01:00.000Z │ giraffe  │     2 │  14154 │
└──────────────────────────┴──────────┴───────┴────────┘

我的疑问是,在第3步中,老虎的数量减少了1,但我认为不应更改,因为在第3步中,老虎没有变化,数字也没有变化

仅供参考,count和number是metricSpec,分别是count和longSum。 请澄清。


在将ingestSegment消防水带与类似初始数据一起使用时

┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T00:00:00.000Z │ aardvark │     1 │   9999 │
│ 2018-01-01T00:00:00.000Z │ bear     │     1 │    111 │
│ 2018-01-01T00:00:00.000Z │ lion     │     2 │    200 │
└──────────────────────────┴──────────┴───────┴────────┘

在添加新数据{“ timestamp”:“ 2018-01-01T03:01:35Z”,“ animal”:“ giraffe”,“ number”:30}时,appendToExisting = true,我得到了

┌──────────────────────────┬──────────┬───────┬────────┐
│ __time                   │ animal   │ count │ number │
├──────────────────────────┼──────────┼───────┼────────┤
│ 2018-01-01T00:00:00.000Z │ aardvark │     1 │   9999 │
│ 2018-01-01T00:00:00.000Z │ bear     │     1 │    111 │
│ 2018-01-01T00:00:00.000Z │ lion     │     2 │    200 │
│ 2018-01-01T00:00:00.000Z │ aardvark │     1 │   9999 │
│ 2018-01-01T00:00:00.000Z │ bear     │     1 │    111 │
│ 2018-01-01T00:00:00.000Z │ giraffe  │     1 │     30 │
│ 2018-01-01T00:00:00.000Z │ lion     │     1 │    200 │
└──────────────────────────┴──────────┴───────┴────────┘

它是正确的预期输出吗?为什么没有发生汇总?

HU9694 回答:Apache Druid:更新数据源中的数据时出现问题

德鲁伊实际上只有2种模式。覆盖或追加。

使用appendToExisting=true,您的数据将被附加到现有数据中,这将导致“数字”字段增加(计数也将增加)。

使用appendToExisting=false将覆盖该段中的所有数据。我认为这是正在发生的事情。

与“普通”数据库不同,在这里您可以更新特定行。

在德鲁伊中,您只能更新某些行,但这是通过重新索引数据来完成的。这不是一个很容易的过程。 此重新索引由ingestSegment Firehose完成,它从段中读取数据,然后将其也写入段中(可以相同)。在此过程中,您可以添加一个转换过滤器,该过滤器会执行特定的操作,例如更新某些字段值。

我们已经建立了一个PHP库,以使这些过程更易于使用。请参见以下示例,如何在重新索引期间重新索引段并应用转换。

https://github.com/level23/druid-client#reindex

本文链接:https://www.f2er.com/2995995.html

大家都在问