Query Service でのデータ重複排除
Adobe Experience Platform Query Service では、データ重複排除をサポートしています。 データ重複排除は、行内のデータの一部のみが重複した情報なので、行全体を計算から除外したり特定のフィールドセットを無視したりする必要がある場合に行われる可能性があります。
重複排除では、通常、時間の経過と共に ID(または ID のペア)の期間にわたって ROW_NUMBER()
関数を使用する必要があります。この関数は、重複が検出された回数を表す新しいフィールドを返します。 時間は、多くの場合、Experience Data Model(XDM)timestamp
フィールドを使用して表されます。
ROW_NUMBER()
の値が 1
となっている場合は、元のインスタンスを指します。 一般に、使用を希望するインスタンスになります。 多くの場合、集計カウントの実行など、上位の SELECT
で重複排除が実行されるサブ選択内でおこなわれます。
重複排除のユースケースは、グローバルな場合もあれば、identityMap
内の単一のユーザー ID またはエンドユーザー ID に制限される場合もあります。
このドキュメントでは、エクスペリエンスイベント、購入および指標の 3 つの一般的なユースケースについて重複排除を実行する方法の概要を説明します。
各例には、範囲、期間キー、重複排除方法の概要および完全な SQL クエリが含まれます。
エクスペリエンスイベント experience-events
エクスペリエンスイベントが重複する場合は、おそらく行全体を無視することになるでしょう。
範囲: グローバル
期間キー: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
購入 purchases
重複した購入がある場合は、おそらく、Experience Event 行のほとんどを残し、購入に関連付けられたフィールド(commerce.orders
指標など)を無視することになるでしょう。購入には、購入 ID 用の特別なフィールド commerce.order.purchaseID
が含まれています。
XDM における購入 ID の標準のセマンティックフィールドになるので、訪問者の範囲内で purchaseID
を使用することをお勧めします。クエリの方がグローバルスコープを使用するよりも速く、複数の訪問者 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
完全な例
次の例では、購入 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
指標 metrics
オプションの一意の 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
次の手順
このドキュメントでは、データ重複排除の例を示し、クエリサービス内でデータ重複排除を実行する方法の概要を説明しました。 クエリサービスを使用してクエリを記述する際のベストプラクティスについて詳しくは、クエリ作成ガイドを参照してください。