【发布时间】:2016-05-11 00:13:25
【问题描述】:
我们有几个通过 DataFlow 读取的 BigQuery 表。目前,这些表被展平,并且大量数据重复。在 Dataflow 中,所有操作都必须是幂等的,因此任何输出只取决于函数的输入,其他任何地方都没有状态。这就是为什么首先将所有属于一起的记录分组在一起的原因,在我们的例子中,这可能意味着创建复杂的对象。
复杂对象的示例(还有很多其他类型)。显然,我们可以拥有每种类型的数百万个实例:
Customer{
customerId
address {
street
zipcode
region
...
}
first_name
last_name
...
contactInfo: {
"phone1": {type, number, ... },
"phone2": {type, number, ... }
}
}
我们为 DataFlow 找到的示例仅处理非常简单的对象,示例演示了计数、求和和平均。
在我们的例子中,我们最终希望使用 DataFlow 根据规则集执行更复杂的处理。例如,这些规则适用于客户、发票或订单的完整联系,并最终产生一整套指标、金额和其他项目。
我们考虑在 BigQuery 中 100% 执行此操作,但由于适用于每个实体的规则,这很快就会变得非常混乱。
此时我仍然想知道 DataFlow 是否真的是适合这项工作的工具。几乎没有关于 dataFlow 的示例来演示它如何用于具有一两个集合的这些类型的更复杂的对象。我发现最接近的是使用“LogMessage”对象进行日志处理,但这没有任何集合,因此没有进行任何分层处理。
我们面临的最大问题是分层处理。我们正在读取这样的数据:
customerid ... street zipcode region ... phoneid type number
1 a b c phone1 1 555-2424
1 a b c phone2 1 555-8181
第一个操作应该是将这些行组合在一起以构建一个实体,这样我们就可以使我们的操作具有幂等性。在 DataFlow 中执行此操作的最佳方法是什么,或者为我们提供一个示例?
【问题讨论】: