Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

SQL クエリを通じて返される主キー制約エラー

公開日: Oct 13, 2022
説明

SQLクエリを通じてデータを収集し、主キーを含むデータエクステンションをターゲットにする際、特定のアクション(追加、更新、上書き)やデータシナリオによって主キー制約エラーが発生することがあります。適切なアクションを選択し、重複を避けることでエラーを防ぐことができます。

解決策

追加

ターゲットデータエクステンションに主キーが含まれている場合、[追加] アクションの使用が最適な選択肢になることはほとんどありません。このアクションを正常に実行するには、データに重複がないことを確認する必要があります。このアクションは、実行前のデータエクステンションにどのような主キー値が存在するかにかかわらず、構文に基づいてデータを収集し、すべてのレコードをデータエクステンションの終わりに追加するよう SQL クエリに指示します。SQL クエリの実行前のターゲットデータエクステンションに主キー値のインスタンスが存在する場合、および SQL クエリが主キーに関して同一の値を収集した場合、挿入時に主キー制約エラーが返されます。

1 回の SQL クエリ実行で重複する主キー値が収集され、ターゲットデータエクステンションにその主キー値に一致するものが含まれていなかった場合。挿入時には最初のレコードが追加され、2 番目のレコードは主キー制約エラーとなります。これはこの記事の 「更新」 セクションで再確認します。



更新

[更新] アクションは、主キーがターゲットデータ エクステンションに存在する場合、特定の使用事例に適合する可能性があります。このアクションでは、ターゲットデータ エクステンションに主キーが存在しており、一致する値を検索できる必要があります。既存の主キー値に一致する値がSQL クエリによって収集されたばかりのデータセットに存在する場合、SQL クエリは一致したレコードのその他の項目をすべて更新します。

それでも、[更新] アクションによって主キー制約エラーが発生する可能性はあります。次のようなシナリオが発生する必要があります。
  • 設定に基づいてデータを収集するために SQL クエリを実行し、収集された 2 つのレコードが 「123」 という 「SubscriberKey」 を持っている。 
  • ターゲットデータエクステンションには 「SubscriberKey」 に設定された主キーがあり、SQL クエリを実行する前には 「123」 に一致するものは存在しない。
  • SQL クエリは 「SubscriberKey」 = 「123」 に一致するものを検索するが、見つからない。「123」 の最初のインスタンスが追加される。
  • SQL クエリはその後 「123」 の 2 番目のインスタンスを処理し、「SubscribeKey」 値に一致するものを検索する。追加されたばかりの最初のインスタンスを見つける。 
  • SQL クエリが主キー制約エラーを提示する。
[更新] アクションを使用する場合は、実行ごとに主キーの一意の値を収集するようにすることが重要です。


上書き

[上書き] アクションは、レコードを追加するときに主キーを確認しません。このアクションはターゲットデータエクステンションをクリアし、そのクリアしたデータエクステンションに収集したすべてのレコードを挿入します。

主キーに対して重複がある場合、クエリは主キー項目で重複を排除し、あたかも更新しているかのようにデータを挿入します。これにより、重複した主キーごとに 1 行しか残りません。
  • SQL クエリでターゲットデータエクステンションをクリアします。
  • 設定に基づいてデータを収集するために SQL クエリが実行され、収集された 2 つのレコードの「SubscriberKey」の値が「123」でした。
  • ターゲットデータエクステンションには「SubscriberKey」という主キーが設定されています。
  • SQL クエリでは、「123」の最初のインスタンスが追加されます。
  • 次に、SQL クエリは 2 番目の「123」のインスタンスを処理し、一致する「SubscribeKey」の値を検索します。このとき、先ほど追加された最初のインスタンスが見つかります。
  • SQL クエリは最初のインスタンスを上書きします。
ナレッジ記事番号

000384160

 
読み込み中
Salesforce Help | Article