繁体   English   中英

谷歌数据工程考试样题

[英]Google Data Engineering Exam Sample Question

我不确定这个问题,并希望得到一些澄清。

您正在使用 Cloud Pub/Sub 到 stream 库存更新从许多销售点 (POS) 终端到 BigQuery。 每个更新事件具有以下信息:产品标识符“prodSku”、更改增量“quantityDelta”、POS 标识“termId”和为来自终端的每次推送尝试创建的“messageId”。 在网络中断期间,您发现发送了重复的消息,导致库存系统高估了更改。 您确定终端应用程序存在设计问题,并且可能在推送重试期间多次发送相同的事件。 您要确保库存更新是准确的。 你该怎么办?

A. 检查每条消息的“发布时间”。 确保丢弃“publishTime”值与 BigQuery 表中的行匹配的消息。

B. 检查每条消息的“messageId”。 确保丢弃“messageId”值与 BigQuery 表中相应行匹配的所有消息。

C。 不要为“quantityDelta”指定更改增量,而是始终在应用增量后使用派生的库存值。 将新属性命名为“adjustedQuantity”。

D. 在消息负载中添加另一个属性 orderId,以标记所有终端的唯一签出顺序。 确保丢弃“orderId”和“prodSku”值与 BigQuery 表中相应行匹配的消息。

我选择 B 是因为我假设 messageID 在某种程度上是唯一的。 但是,答案是 D。我不知道为什么。 任何人都可以澄清我吗? 谢谢。

对于此选项:

B. 检查每条消息的“messageId”。 确保丢弃“messageId”值与 BigQuery 表中相应行匹配的所有消息。

“messageId”为终端的每次推送尝试创建。 这意味着 messageId 只不过是推送时生成的事件属性。 在推送不可用时,pub-sub 可能会重试消息,直到它每次到达具有新 ID 的服务器。 此外,如果有人因为可能忘记购买 2 个数量而购买了 2 次商品,则会做出完全不同的订单并且可以利用虚假输入。

对于选项 D,

D. 在消息负载中添加另一个属性 orderId,以标记所有终端的唯一签出顺序。 确保丢弃“orderId”和“prodSku”值与 BigQuery 表中相应行匹配的消息。

orderId 提供了更大的控制,因为这不是像消息 ID 这样的基于事件的属性。 因此,即使有些人以不同的顺序购买了 2 个数量,我们也有不失败的想法。 而如果发生推送重试,则可以使用 productSKU 检测到重复的 orderID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM