我当前正在使用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 │
└──────────────────────────┴──────────┴───────┴────────┘
它是正确的预期输出吗?为什么没有发生汇总?
答案 0 :(得分:1)
德鲁伊实际上只有2种模式。覆盖或追加。
使用appendToExisting=true
,您的数据将被附加到现有数据中,这将导致“数字”字段增加(计数也将增加)。
使用appendToExisting=false
将覆盖该段中的所有数据。我认为这是正在发生的事情。
与“普通”数据库不同,在这里您可以更新特定行。
在德鲁伊中,您只能更新某些行,但这是通过重新索引数据来完成的。这不是一个很容易的过程。 此重新索引由ingestSegment Firehose完成,它从段中读取数据,然后将其也写入段中(可以相同)。在此过程中,您可以添加一个转换过滤器,该过滤器会执行特定的操作,例如更新某些字段值。
我们已经建立了一个PHP库,以使这些过程更易于使用。请参见以下示例,如何在重新索引期间重新索引段并应用转换。