<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article How to perform a backfill using parallel webhooks in Official Support Articles</title>
    <link>https://community.qlik.com/t5/Official-Support-Articles/How-to-perform-a-backfill-using-parallel-webhooks/ta-p/1817025</link>
    <description>&lt;P&gt;This article explains how a backfill sync can be built with webhook blends that run in parallel.&lt;/P&gt;
&lt;P&gt;More information about webhooks can be found in &lt;A href="https://community.qlik.com/t5/Knowledge-Base/Manual-Webhooks-vs-Triggered-Blends/ta-p/1800009" target="_self"&gt;this article&lt;/A&gt; under "Automated Webhooks".&lt;/P&gt;
&lt;P&gt;This backfill sync leverages the parallel execution capabilities of webhooks. To divide the total amount of records that need to be synced over multiple webhooks.&lt;/P&gt;
&lt;P&gt;This sync will be built as a bundle with one main blend "the orchestrator" and X amount of webhook blends. The example in this article will use 2 webhook blends to process records.&lt;/P&gt;
&lt;P&gt;In this article, the placeholder&amp;nbsp;{bundleguid} is used. When a blend is executed, this will resolve to guide of that bundle's unique installation. More information on placeholders can be found &lt;A href="https://help.qlik.com/en-US/blendr/Content/blend-editor/using-formulas-in-placeholders.htm" target="_self"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;H4&gt;Design of the bundle&lt;/H4&gt;
&lt;P&gt;The main blend (orchestrator) will&amp;nbsp;fetch records from a source and send them to the CDP. Each webhook blend is listening to new &amp;amp; updated records in the CDP and will process them one by one and send them to the destination system.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Orchestrator&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Fetches records from source (eg. Shopify)&lt;/LI&gt;
&lt;LI&gt;Loops over them in batch
&lt;UL&gt;
&lt;LI&gt;Each batch is sent to the CDP with the block "Bulk Upsert Custom Objects"&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;The&amp;nbsp;"Bulk Upsert Custom Object - CDP" block will use different scopes to specify which webhook blend should process the batch.
&lt;UL&gt;
&lt;LI&gt;For this sync, two scopes are used, "{bundleguid}_1" and "{bundleguid}_2".&lt;/LI&gt;
&lt;LI&gt;Which scope the batch update should happen to is specified by the variable "Counter".&lt;/LI&gt;
&lt;LI&gt;When a batch is upserted to&amp;nbsp;"{bundleguid}_2", the counter is reset.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Emile_Koslowski_1-1624374182670.png" style="width: 400px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/57354i45BA7A522CA2608B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Emile_Koslowski_1-1624374182670.png" alt="Emile_Koslowski_1-1624374182670.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Webhooks&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Created by configuring the Start block to run in "Webhook" run mode&lt;/LI&gt;
&lt;LI&gt;Will run when a new record is added/updated in the CDP&lt;/LI&gt;
&lt;LI&gt;Each CDP webhook listens only to new/updated records in a specific scope (see settings tab in the Start block)&lt;/LI&gt;
&lt;LI&gt;After each record is processed (sent to the target platform), the record should be deleted from the CDP&lt;/LI&gt;
&lt;LI&gt;Keep our &lt;A href="https://help.qlik.com/en-US/blendr/Content/blend-editor/platform-limits.htm" target="_self"&gt;platform limits&lt;/A&gt; in mind when deciding how many records each webhook should process&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Emile_Koslowski_0-1624373786127.png" style="width: 400px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/57353i6D2407547731ADD5/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Emile_Koslowski_0-1624373786127.png" alt="Emile_Koslowski_0-1624373786127.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;General remarks&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Keep the webhook blend simple, in this example it executes an upsert snippet. This snippet will first execute a get block in the target system (Splio) and then, if it found a record, it will execute an update block, else it will execute a create record block.&lt;/LI&gt;
&lt;LI&gt;Limit the number of webhook blends to 5 blends.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;If something goes wrong in a webhook blend, the record won't be deleted from the CDP. When the sync is finished, another blend can be used to retry the records that are still in the CDP.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="width: 100%;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Webhooks&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Sleep time&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Total process time&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Total records&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Time per record&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="69px"&gt;None, regular approach with 1 blend that does everything.&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;NA&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;661 seconds&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;0,59765 seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="30px"&gt;2&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;2 seconds&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;132 seconds&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;0,12115&amp;nbsp;seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="25px"&gt;3&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;2 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;116 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;0,10488 seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="25px"&gt;5&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;2 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;86 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;0,07504 seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P style="font-style: italic;"&gt;* The above results vary depending on the webhook blends complexity and the actual data that makes up the records.&lt;/P&gt;
&lt;P&gt;Attached to this article are the used orchestrator blend and an example of a webhook blend. More information on importing blends from a JSON file can be found &lt;A href="https://community.qlik.com/t5/Knowledge-Base/How-to-upload-and-download-blends/ta-p/1781602" target="_self"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P style="font-style: italic;"&gt;The information in this article is provided as-is and to be used at own discretion. Depending on tool(s) used, customization(s), and/or other factors ongoing support on the solution below may not be provided by Qlik Support.&lt;/P&gt;</description>
    <pubDate>Tue, 15 Mar 2022 08:37:17 GMT</pubDate>
    <dc:creator>Emile_Koslowski</dc:creator>
    <dc:date>2022-03-15T08:37:17Z</dc:date>
    <item>
      <title>How to perform a backfill using parallel webhooks</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/How-to-perform-a-backfill-using-parallel-webhooks/ta-p/1817025</link>
      <description>&lt;P&gt;This article explains how a backfill sync can be built with webhook blends that run in parallel.&lt;/P&gt;
&lt;P&gt;More information about webhooks can be found in &lt;A href="https://community.qlik.com/t5/Knowledge-Base/Manual-Webhooks-vs-Triggered-Blends/ta-p/1800009" target="_self"&gt;this article&lt;/A&gt; under "Automated Webhooks".&lt;/P&gt;
&lt;P&gt;This backfill sync leverages the parallel execution capabilities of webhooks. To divide the total amount of records that need to be synced over multiple webhooks.&lt;/P&gt;
&lt;P&gt;This sync will be built as a bundle with one main blend "the orchestrator" and X amount of webhook blends. The example in this article will use 2 webhook blends to process records.&lt;/P&gt;
&lt;P&gt;In this article, the placeholder&amp;nbsp;{bundleguid} is used. When a blend is executed, this will resolve to guide of that bundle's unique installation. More information on placeholders can be found &lt;A href="https://help.qlik.com/en-US/blendr/Content/blend-editor/using-formulas-in-placeholders.htm" target="_self"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;H4&gt;Design of the bundle&lt;/H4&gt;
&lt;P&gt;The main blend (orchestrator) will&amp;nbsp;fetch records from a source and send them to the CDP. Each webhook blend is listening to new &amp;amp; updated records in the CDP and will process them one by one and send them to the destination system.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Orchestrator&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Fetches records from source (eg. Shopify)&lt;/LI&gt;
&lt;LI&gt;Loops over them in batch
&lt;UL&gt;
&lt;LI&gt;Each batch is sent to the CDP with the block "Bulk Upsert Custom Objects"&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;The&amp;nbsp;"Bulk Upsert Custom Object - CDP" block will use different scopes to specify which webhook blend should process the batch.
&lt;UL&gt;
&lt;LI&gt;For this sync, two scopes are used, "{bundleguid}_1" and "{bundleguid}_2".&lt;/LI&gt;
&lt;LI&gt;Which scope the batch update should happen to is specified by the variable "Counter".&lt;/LI&gt;
&lt;LI&gt;When a batch is upserted to&amp;nbsp;"{bundleguid}_2", the counter is reset.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Emile_Koslowski_1-1624374182670.png" style="width: 400px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/57354i45BA7A522CA2608B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Emile_Koslowski_1-1624374182670.png" alt="Emile_Koslowski_1-1624374182670.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Webhooks&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Created by configuring the Start block to run in "Webhook" run mode&lt;/LI&gt;
&lt;LI&gt;Will run when a new record is added/updated in the CDP&lt;/LI&gt;
&lt;LI&gt;Each CDP webhook listens only to new/updated records in a specific scope (see settings tab in the Start block)&lt;/LI&gt;
&lt;LI&gt;After each record is processed (sent to the target platform), the record should be deleted from the CDP&lt;/LI&gt;
&lt;LI&gt;Keep our &lt;A href="https://help.qlik.com/en-US/blendr/Content/blend-editor/platform-limits.htm" target="_self"&gt;platform limits&lt;/A&gt; in mind when deciding how many records each webhook should process&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Emile_Koslowski_0-1624373786127.png" style="width: 400px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/57353i6D2407547731ADD5/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Emile_Koslowski_0-1624373786127.png" alt="Emile_Koslowski_0-1624373786127.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;General remarks&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Keep the webhook blend simple, in this example it executes an upsert snippet. This snippet will first execute a get block in the target system (Splio) and then, if it found a record, it will execute an update block, else it will execute a create record block.&lt;/LI&gt;
&lt;LI&gt;Limit the number of webhook blends to 5 blends.&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;If something goes wrong in a webhook blend, the record won't be deleted from the CDP. When the sync is finished, another blend can be used to retry the records that are still in the CDP.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE style="width: 100%;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Webhooks&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Sleep time&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Total process time&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Total records&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;&lt;STRONG&gt;Time per record&lt;/STRONG&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="69px"&gt;None, regular approach with 1 blend that does everything.&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;NA&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;661 seconds&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="69px"&gt;0,59765 seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="30px"&gt;2&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;2 seconds&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;132 seconds&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="30px"&gt;0,12115&amp;nbsp;seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="25px"&gt;3&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;2 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;116 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;0,10488 seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="20%" height="25px"&gt;5&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;2 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;86 seconds&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;1106&lt;/TD&gt;
&lt;TD width="20%" height="25px"&gt;0,07504 seconds&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P style="font-style: italic;"&gt;* The above results vary depending on the webhook blends complexity and the actual data that makes up the records.&lt;/P&gt;
&lt;P&gt;Attached to this article are the used orchestrator blend and an example of a webhook blend. More information on importing blends from a JSON file can be found &lt;A href="https://community.qlik.com/t5/Knowledge-Base/How-to-upload-and-download-blends/ta-p/1781602" target="_self"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P style="font-style: italic;"&gt;The information in this article is provided as-is and to be used at own discretion. Depending on tool(s) used, customization(s), and/or other factors ongoing support on the solution below may not be provided by Qlik Support.&lt;/P&gt;</description>
      <pubDate>Tue, 15 Mar 2022 08:37:17 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/How-to-perform-a-backfill-using-parallel-webhooks/ta-p/1817025</guid>
      <dc:creator>Emile_Koslowski</dc:creator>
      <dc:date>2022-03-15T08:37:17Z</dc:date>
    </item>
  </channel>
</rss>

