如何处理德鲁伊随时间变化的行

时间:2018-04-05 10:20:01

标签: druid

我想知道如何处理德鲁伊随时间变化的数据。我意识到德鲁伊是为流数据而构建的,我们不希望特定的行有数据元素发生变化。但是,我正在开展一个项目,我们希望从物流管理系统流式传输交易数据,但是在该系统中可以根据其他交易更改特定交易的计算。我的意思是:

当月的第9天 - 我发布了今日(第9日)的交易A,导致现有库存达到0个单位

本月10日 - 我发布交易B的日期是1月1日,将我的库存金额计入10个单位。此时(当月10日),交易A的现有库存重新计算为10个单位。对于本月1日之后的所有交易,情况也是如此

据我了解,我们将重新提取交易A,从而产生交易A2。

库存量对我们的指标非常重要。具体而言,确定何时发生缺货(当库存时= 0)。在上面的例子中,如果我有两行用于事务A,我将错误地识别具有事务A1的缺货,而事务A2是事实的来源。

是否有能力存档行并将其替换为更新的行,或者我们是否需要在查询中添加逻辑,以查找每个事务ID具有最新时间戳的行?

由于

1 个答案:

答案 0 :(得分:1)

我有两个想法,希望对你有所帮助。关键文档是“更新现有数据”:http://druid.io/docs/latest/ingestion/update-existing-data.html,它提供了三个选项:查找表,重新索引和Delta摄取。最后一个,Delta Ingestion,仅用于向旧段添加新行,因此对您来说不是很有用,让我们来看看其他两个。

重新索引:您可以处理ETL过程中所有变化的数字,识别需要重新加载的细分,并简单地让德鲁伊重新索引这些细分。只要您进行重新索引,这将在您的示例中替换A中的库存值。

查找:如果您有多个产品的库存值,您可以将产品ID存储在段中并使其不可变,但在查找中查找库存手头值。所以,你会存储:

A, 2018-01-01, product-id: 123

在你的查询中,你有:

product-id: 123, stock-on-hand: 0

稍后,您将更新查找并将其更改为10.这将更新引用product-id:123的所有行。

我无法确定您在执行此操作时可能会混淆维度和指标,您可能需要在OLAP描述中阅读该术语,如下所示:https://en.wikipedia.org/wiki/Online_analytical_processing

祝你好运!