中的重复数据消除 Query Service

上次更新: 2023-11-29
  • 主题:
  • Queries
    查看有关此主题的更多信息
  • 创建对象:
  • User
    Developer

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]度量对象的.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

后续步骤

本文档提供了重复数据删除的示例,并概述了如何在查询服务中执行重复数据删除。 有关使用查询服务编写查询时的更多最佳实践,请参阅 编写查询指南.

在此页面上