簡體   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