Apache Druid:更新数据源中的数据时出现问题
Apache Druid : Issue while updating the data in Datasource
我目前使用的是druid-Incubating-0.16.0版本。正如 https://druid.apache.org/docs/latest/tutorials/tutorial-update-data.html 教程 link 中提到的,我们可以使用组合 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 步:
我用 {"timestamp":"2018-01-01T01:01:35Z","animal":"tiger", "number":30} 和 appendToExisting = false 更新了老虎的数据和 rollUp = true 并找到结果
┌──────────────────────────┬──────────┬───────┬────────┐
│ __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 firehose 与初始数据一起使用时
┌──────────────────────────┬──────────┬───────┬────────┐
│ __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 │
└──────────────────────────┴──────────┴───────┴────────┘
它是正确的和预期的输出吗?为什么汇总没有发生?
德鲁伊实际上只有两种模式。覆盖或追加。
使用 appendToExisting=true
,您的数据将附加到现有数据,这将导致 "number" 字段增加(计数也会增加)。
appendToExisting=false
段中的所有数据都将被覆盖。我认为这就是正在发生的事情。
这与 "normal" 数据库不同,您可以在其中更新特定行。
在德鲁伊中,你可以只更新某些行,但这是通过重新索引你的数据来完成的。这不是一个很容易的过程。
此重新索引由 ingestSegment Firehose 完成,它从一个段读取数据,然后将其也写入一个段(可以是相同的)。在此过程中,您可以添加一个转换过滤器,它会执行特定操作,例如更新某些字段值。
我们构建了一个 PHP 库来使这些过程更易于使用。请参阅此示例,了解如何重新索引段并在重新索引期间应用转换。
我目前使用的是druid-Incubating-0.16.0版本。正如 https://druid.apache.org/docs/latest/tutorials/tutorial-update-data.html 教程 link 中提到的,我们可以使用组合 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 步: 我用 {"timestamp":"2018-01-01T01:01:35Z","animal":"tiger", "number":30} 和 appendToExisting = false 更新了老虎的数据和 rollUp = true 并找到结果
┌──────────────────────────┬──────────┬───────┬────────┐
│ __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 firehose 与初始数据一起使用时
┌──────────────────────────┬──────────┬───────┬────────┐
│ __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 │
└──────────────────────────┴──────────┴───────┴────────┘
它是正确的和预期的输出吗?为什么汇总没有发生?
德鲁伊实际上只有两种模式。覆盖或追加。
使用 appendToExisting=true
,您的数据将附加到现有数据,这将导致 "number" 字段增加(计数也会增加)。
appendToExisting=false
段中的所有数据都将被覆盖。我认为这就是正在发生的事情。
这与 "normal" 数据库不同,您可以在其中更新特定行。
在德鲁伊中,你可以只更新某些行,但这是通过重新索引你的数据来完成的。这不是一个很容易的过程。 此重新索引由 ingestSegment Firehose 完成,它从一个段读取数据,然后将其也写入一个段(可以是相同的)。在此过程中,您可以添加一个转换过滤器,它会执行特定操作,例如更新某些字段值。
我们构建了一个 PHP 库来使这些过程更易于使用。请参阅此示例,了解如何重新索引段并在重新索引期间应用转换。