Query Serviceのデータ重複排除 - 重複

Adobe Experience PlatformQuery Serviceはデータ重複排除 - 重複をサポートしています。 データの重複排除 - 重複は、行全体を演算から削除する必要がある場合や、行のデータの一部だけが重複情報なので、特定のフィールドのセットを無視する場合に行われます。

一般的に、重複排除 - 重複では、ウィンドウ全体でROW_NUMBER()関数を使用して、ID(またはIDのペア)を順番に求め、重複が検出された回数を表す新しいフィールドを返します。 時間は、Experience Data Model (XDM) timestampフィールドを使用して表されます。

ROW_NUMBER()の値が1の場合、元のインスタンスを参照します。 一般に、これは使用したいインスタンスです。 多くの場合、集計カウントの実行など、上位の SELECT で重複排除が実行されるサブ選択内でおこなわれます。

重複排除 - 重複の使用例は、グローバルにすることも、1人のユーザーまたはidentityMap内のエンドユーザーIDに制限することもできます。

このドキュメントでは、次の3つの一般的な使用例に対する重複排除 - 重複の実行方法を概説します。エクスペリエンスのイベント、購入および指標。

各例には、範囲、ウィンドウ・キー、重複排除 - 重複・メソッドの概要、および完全なSQLクエリが含まれます。

エクスペリエンスイベント

重複エクスペリエンスのイベントの場合、行全体を無視するとよいでしょう。

注意

Experience Platform内の多くのデータセット(Adobe AnalyticsのData Connectorが作成するものを含む)には、既にエクスペリエンスイベントレベルの重複排除 - 重複が適用されています。 したがって、このレベルの重複排除を再適用する必要はなく、最適用するとクエリの速度が低下します。

データセットのソースを理解し、エクスペリエンスイベントレベルの重複排除 - 重複が既に適用されているかどうかを把握することが重要です。 ストリーム化されるデータセット(例えば、Adobe Targetからのデータセット)については、​エクスペリエンスイベントレベルの重複排除 - 重複を適用する必要があります。これらのデータソースには「少なくとも1回」のセマンティックがあるからです。

範囲:​グローバル

ウィンドウキー: 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

購入

重複を購入した場合は、エクスペリエンスイベントの行のほとんどをそのまま残し、購入に結び付けられたフィールド(commerce.orders指標など)は無視することが推奨されます。 購入には、購入IDの特別なフィールド(commerce.order.purchaseID)が含まれます。

範囲:​訪問者

ウィンドウキー: 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

完全な例

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

次の手順

このドキュメントでは、クエリサービス内でのデータ重複排除 - 重複の実行方法、およびデータ重複排除 - 重複の例を説明しました。 クエリサービスを使用してクエリを記述する際のベストプラクティスについては、『クエリの記述ガイド』を参照してください。

このページ