中的重複資料刪除 Query Service

上次更新: 2023-11-29
  • 主題:
  • Queries
    檢視有關此主題的更多資訊
  • 建立對象:
  • Developer
    User
    Admin
    Leader

Adobe Experience Platform Query Service 支援重複資料刪除。 當需要從計算中移除整個列或忽略特定欄位集(因為列中只有部分資料是重複資訊)時,可以執行重複資料刪除。

去重複化通常涉及使用 ROW_NUMBER() 函式在視窗中隨著有序的時間針對ID (或一對ID)傳回,這會傳回代表偵測到重複專案次數的新欄位。 時間通常以表示 Experience Data Model (XDM) timestamp 欄位。

ROW_NUMBER()1,這指的是原始例項。 一般而言,這是您想要使用的例項。 這通常會在子選取的範圍內完成,其中重複資料刪除會在較高層級完成 SELECT 例如執行彙總計數。

重複資料刪除使用案例可以是全域的,或限製為單一使用者或使用者的ID identityMap.

本檔案概述如何針對三個常見使用案例執行重複資料刪除:體驗事件、購買和量度。

每個範例都包含範圍、視窗索引鍵、重複資料刪除方法的大綱,以及完整的SQL查詢。

體驗事件

如果出現重複的體驗事件,您可能希望忽略整列。

注意

中有許多資料集 Experience Platform包括Adobe Analytics Data Connector產生的重複資料刪除,已套用體驗事件層級的重複資料刪除。 因此,重新套用此層級的重複資料刪除是不必要的,而且會減慢查詢速度。

請務必瞭解資料集的來源,並知道是否已套用體驗事件層級的重複資料刪除。 對於串流處理的任何資料集(例如來自Adobe Target的資料集),您可以 需要套用體驗事件層級的重複資料刪除,因為這些資料來源具有「至少一次」語意。

範圍: 全域

視窗鍵: id

重複資料刪除範例

SELECT *,
  ROW_NUMBER()
    OVER (PARTITION BY id
          ORDER BY timestamp ASC
    ) AS id_dup_num
FROM experience_events

完整範例

SELECT COUNT(*) AS num_events FROM (
  SELECT *,
    ROW_NUMBER()
      OVER (PARTITION BY id
            ORDER BY timestamp ASC
      ) AS id_dup_num
  FROM experience_events
) WHERE id_dup_num = 1

購買

如果您有重複購買專案,您可能會想要保留大部分的 Experience Event 列,但忽略與購買相關聯的欄位(例如 commerce.orders 量度)。 購買包含購買ID的特殊欄位,即 commerce.order.purchaseID.

建議使用 purchaseID ,因為這是XDM中購買ID的標準語意欄位。 建議使用訪客範圍來移除重複的購買資料,因為查詢的速度比使用全域範圍來得快,而且購買ID不太可能跨多個訪客ID重複。

範圍: 訪客

視窗鍵: identityMap[$NAMESPACE].id & commerce.order.purchaseID

重複資料刪除範例

SELECT *,
  IF(LENGTH(commerce.`order`.purchaseID) > 0,
    ROW_NUMBER()
      OVER (PARTITION BY identityMap['ECID'].id, commerce.`order`.purchaseID
            ORDER BY timestamp ASC
      ),
    1) AS purchaseID_dup_num
FROM experience_events
注意

在某些情況下,原始Analytics資料會在訪客ID間顯示重複的購買ID, 五月 需要對所有訪客執行購買ID重複計數。 當購買ID不存在時,此方法需要您納入條件,以使用事件ID來儘可能快速地保留查詢。

完整範例

以下範例使用condition子句,在購買ID不存在的情況下使用事件ID。

SELECT SUM(commerce.purchases.value) AS num_purchases FROM (
  SELECT *,
    ROW_NUMBER()
      OVER (PARTITION BY id
            ORDER BY timestamp ASC
      ) AS id_dup_num,
    IF(LENGTH(commerce.`order`.purchaseID) > 0,
      ROW_NUMBER()
        OVER (PARTITION BY identityMap['ECID'].id, commerce.order.purchaseID
              ORDER BY timestamp ASC
        ),
      1) AS purchaseID_dup_num
  FROM experience_events
) WHERE id_dup_num = 1 AND purchaseID_dup_num = 1

量度

如果您的量度使用選用的唯一ID,且出現該ID的重複專案,您可能會想要忽略該量度值,並保留體驗事件的其餘部分。

在XDM中,幾乎所有量度都會使用 Measure 資料型別,包含選填 id 可用於重複資料刪除的欄位。

範圍: 訪客

視窗鍵: identityMap[$NAMESPACE]Measure物件的.id和id

重複資料刪除範例

SELECT *,
  IF(LENGTH(application.launches.id) > 0,
    ROW_NUMBER()
      OVER (PARTITION BY identityMap['ECID'].id, application.launches.id
            ORDER BY timestamp ASC
      ),
    1) AS launchesID_dup_num
FROM experience_events

完整範例

SELECT SUM(application.launches.value) AS num_launches FROM (
  SELECT *,
    ROW_NUMBER()
      OVER (PARTITION BY id
            ORDER BY timestamp ASC
      ) AS id_dup_num,
    IF(LENGTH(application.launches.id) > 0,
      ROW_NUMBER()
        OVER (PARTITION BY identityMap['ECID'].id, application.launches.id
              ORDER BY timestamp ASC
        ),
      1) AS launchesID_dup_num
  FROM experience_events
) WHERE id_dup_num = 1 AND launchesID_dup_num = 1

後續步驟

本檔案提供重複資料刪除的範例,並說明如何在查詢服務內執行重複資料刪除。 如需使用查詢服務撰寫查詢時的最佳實務,請參閱 編寫查詢指南.

此頁面上的