{"id":28645,"date":"2020-12-29T11:59:34","date_gmt":"2020-12-29T11:59:34","guid":{"rendered":"https:\/\/www.testpreptraining.com\/tutorial\/?page_id=28645"},"modified":"2022-04-01T07:38:36","modified_gmt":"2022-04-01T07:38:36","slug":"query-parallelization-in-azure-stream-analytics","status":"publish","type":"page","link":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/","title":{"rendered":"Query parallelization in Azure Stream Analytics"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.testpreptraining.ai\/tutorial\/exam-dp-200-implementing-an-azure-data-solution\/\" target=\"_blank\" rel=\"noreferrer noopener\">Go back to DP-200 Tutorials<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><em>Microsoft DP-200 exam is getting retired on June 30, 2021. A new replacement exam\u00a0<strong><a href=\"https:\/\/www.testpreptraining.ai\/data-engineering-on-microsoft-azure-dp-203-practice-exam\" target=\"_blank\" rel=\"noreferrer noopener\">Data Engineering on Microsoft Azure  (DP-203)<\/a><\/strong>\u00a0is available.<\/em><\/strong><\/h2>\n\n\n\n<p>In this we will learn how to take advantage of query parallelization in Azure Stream Analytics. And, also about how to scale Stream Analytics jobs by configuring input partitions and tuning the analytics query definition. As a prerequisite, you may want to be familiar with the notion of Streaming Unit described in Understand and adjust Streaming Units.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Partitions in inputs and outputs<\/strong><\/h4>\n\n\n\n<p>Partitioning lets you divide data into subsets based on a partition key. If your input (for example Event Hubs) is partitioned by a key, it is highly recommended to specify this partition key when adding input to your Stream Analytics job. Moreover, scaling a Stream Analytics job takes advantage of partitions in the input and output. And, a Stream Analytics job can consume and write different partitions in parallel, which increases throughput.<\/p>\n\n\n\n<p><strong>Inputs<\/strong><\/p>\n\n\n\n<p>All Azure Stream Analytics input can take advantage of partitioning:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Firstly, EventHub (need to set the partition key explicitly with PARTITION BY keyword if using compatibility level 1.1 or below)<\/li><li>Secondly, IoT Hub (need to set the partition key explicitly with PARTITION BY keyword if using compatibility level 1.1 or below)<\/li><li>Lastly, Blob storage<\/li><\/ul>\n\n\n\n<p><strong>Outputs<\/strong><\/p>\n\n\n\n<p>When you work with Stream Analytics, you can take advantage of partitioning in the outputs:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Firstly, Azure Data Lake Storage<\/li><li>Secondly, Azure Functions<\/li><li>Thirdly, Azure Table<\/li><li>Then, Blob storage (can set the partition key explicitly)<\/li><li>Next, Cosmos DB (need to set the partition key explicitly)<\/li><li>After that, Event Hubs (need to set the partition key explicitly)<\/li><li>Then, IoT Hub (need to set the partition key explicitly)<\/li><li>Lastly, Service Bus<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Embarrassingly parallel jobs<\/strong><\/h4>\n\n\n\n<p>An embarrassingly parallel job is the most scalable scenario in Azure Stream Analytics. It connects one partition of the input to one instance of the query to one partition of the output. This parallelism has the following requirements:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Firstly, i f your query logic depends on the same key being processed by the same query instance, you must make sure that the events go to the same partition of your input. For Event Hubs or IoT Hub, this means that the event data must have the PartitionKey value set. Alternatively, you can use partitioned senders. For blob storage, this means that the events are sent to the same partition folder. <\/li><li>Secondly, for jobs with compatibility level 1.2 or higher (recommended), custom column can be specified as Partition Key in the input settings and the job will be paralellized automatically. Jobs with compatibility level 1.0 or 1.1, requires you to use PARTITION BY PartitionId in all the steps of your query. Multiple steps are allowed, but they all must be partitioned by the same key.<\/li><li>Next, ost of the outputs supported in Stream Analytics can take advantage of partitioning. If you use an output type that doesn&#8217;t support partitioning your job won&#8217;t be embarrassingly parallel. For Event Hub outputs, ensure Partition key column is set to the same partition key used in the query. Refer to the output section for more details.<\/li><li>Lastly, the number of input partitions must equal the number of output partitions. Blob storage output can support partitions and inherits the partitioning scheme of the upstream query. When a partition key for Blob storage is specified, data is partitioned per input partition thus the result is still fully parallel. <\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.testpreptraining.ai\/implementing-an-azure-data-solution-dp-200-free-practice-test\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"961\" height=\"150\" src=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-pracice-tests-1.png\" alt=\"DP-200 practice tests\" class=\"wp-image-18535\" srcset=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-pracice-tests-1.png 961w, https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-pracice-tests-1-750x117.png 750w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><\/a><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Simple query<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Firstly, Input: Event hub with 8 partitions<\/li><li>Secondly, Output: Event hub with 8 partitions (&#8220;Partition key column&#8221; must be set to use &#8220;PartitionId&#8221;)<\/li><\/ul>\n\n\n\n<p><strong>Query:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"185\" src=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-18-750x185.png\" alt=\"Simple query\" class=\"wp-image-28732\" srcset=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-18-750x185.png 750w, https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-18.png 777w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption>Image Source: Microsoft<\/figcaption><\/figure><\/div>\n\n\n\n<p>This query is a simple filter. Therefore, we don&#8217;t need to worry about partitioning the input that is being sent to the event hub. Notice that jobs with compatibility level before 1.2 must include PARTITION BY PartitionId clause, so it fulfills requirement #2 from earlier. Further, for the output, we need to configure the event hub output in the job to have the partition key set to PartitionId. One last check is to make sure that the number of input partitions is equal to the number of output partitions.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Query with a grouping key<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Firstly, Input: Event hub with 8 partitions<\/li><li>Secondly, Output: Blob storage<\/li><\/ul>\n\n\n\n<p><strong>Query:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"183\" src=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-19-750x183.png\" alt=\"grouping key query\" class=\"wp-image-28733\" srcset=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-19-750x183.png 750w, https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-19.png 779w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption>Image Source: Microsoft<\/figcaption><\/figure><\/div>\n\n\n\n<p>This query has a grouping key. Therefore, the events grouped together must be sent to the same Event Hub partition. Since in this example we group by TollBoothID, we should be sure that TollBoothID is used as the partition key when the events are sent to Event Hub. Then in ASA, we can use PARTITION BY PartitionId to inherit from this partition scheme and enable full parallelization. Since the output is blob storage, we don&#8217;t need to worry about configuring a partition key value, as per requirement #4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Multi-step query with different PARTITION BY values<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Firstly, Input: Event hub with 8 partitions<\/li><li>Secondly, Output: Event hub with 8 partitions<\/li><li>Thirdly, Compatibility level: 1.0 or 1.1<\/li><\/ul>\n\n\n\n<p><strong>Query:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"186\" src=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-20-750x186.png\" alt=\"multi step query\" class=\"wp-image-28734\" srcset=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-20-750x186.png 750w, https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/12\/commands-20.png 778w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption>Image Source: Microsoft<\/figcaption><\/figure><\/div>\n\n\n\n<p>As you can see, the second step uses TollBoothId as the partitioning key. This step is not the same as the first step, and it therefore requires us to do a shuffle.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Calculate the maximum streaming units of a job<\/strong><\/h4>\n\n\n\n<p>The total number of streaming units that can be used by a Stream Analytics job depends on the number of steps in the query defined for the job and the number of partitions for each step.<\/p>\n\n\n\n<p><strong>Steps in a query<\/strong><\/p>\n\n\n\n<p>A query can have one or many steps. Each step is a subquery defined by the WITH keyword. However, the query that is outside the WITH keyword (one query only) is also counted as a step, such as the SELECT statement in the following query:<\/p>\n\n\n\n<p><strong>Query:<\/strong><\/p>\n\n\n\n<p><strong>SQL<\/strong><br><em>WITH Step1 AS (<br>SELECT COUNT(*) AS Count, TollBoothId<br>FROM Input1 Partition By PartitionId<br>GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId<br>)<br>SELECT SUM(Count) AS Count, TollBoothId<br>FROM Step1<br>GROUP BY TumblingWindow(minute,3), TollBoothId<\/em><\/p>\n\n\n\n<p><strong>This query has two steps.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.testpreptraining.ai\/implementing-an-azure-data-solution-dp-200-practice-exam\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" width=\"961\" height=\"150\" src=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-online-course-1.png\" alt=\"Query parallelization in Azure Stream Analytics DP-200 Online course\" class=\"wp-image-18534\" srcset=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-online-course-1.png 961w, https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-online-course-1-750x117.png 750w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><\/a><\/figure><\/div>\n\n\n\n<p class=\"has-text-align-right\"><strong>Reference: <\/strong><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/stream-analytics\/stream-analytics-parallelization\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Documentation<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.testpreptraining.ai\/tutorial\/exam-dp-200-implementing-an-azure-data-solution\/\" target=\"_blank\" rel=\"noreferrer noopener\">Go back to DP-200 Tutorials<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go back to DP-200 Tutorials Microsoft DP-200 exam is getting retired on June 30, 2021. A new replacement exam\u00a0Data Engineering on Microsoft Azure (DP-203)\u00a0is available. In this we will learn how to take advantage of query parallelization in Azure Stream Analytics. And, also about how to scale Stream Analytics jobs by configuring input partitions and&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-28645","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Query parallelization in Azure Stream Analytics - Testprep Training Tutorials<\/title>\n<meta name=\"description\" content=\"Enhance your skills by learning about Query parallelization in Azure Stream Analytics using Microsoft DP-200 online course Now!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Query parallelization in Azure Stream Analytics - Testprep Training Tutorials\" \/>\n<meta property=\"og:description\" content=\"Enhance your skills by learning about Query parallelization in Azure Stream Analytics using Microsoft DP-200 online course Now!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/\" \/>\n<meta property=\"og:site_name\" content=\"Testprep Training Tutorials\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-01T07:38:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-pracice-tests-1.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/\",\"url\":\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/\",\"name\":\"Query parallelization in Azure Stream Analytics - Testprep Training Tutorials\",\"isPartOf\":{\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/#website\"},\"datePublished\":\"2020-12-29T11:59:34+00:00\",\"dateModified\":\"2022-04-01T07:38:36+00:00\",\"description\":\"Enhance your skills by learning about Query parallelization in Azure Stream Analytics using Microsoft DP-200 online course Now!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.testpreptraining.ai\/tutorial\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Query parallelization in Azure Stream Analytics\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/#website\",\"url\":\"https:\/\/www.testpreptraining.ai\/tutorial\/\",\"name\":\"Testprep Training Tutorials\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.testpreptraining.ai\/tutorial\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/#organization\",\"name\":\"Testprep Training\",\"url\":\"https:\/\/www.testpreptraining.ai\/tutorial\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.testpreptraining.com\/tutorial\/wp-content\/uploads\/2020\/07\/tpt-logo-6.png\",\"contentUrl\":\"https:\/\/www.testpreptraining.com\/tutorial\/wp-content\/uploads\/2020\/07\/tpt-logo-6.png\",\"width\":583,\"height\":153,\"caption\":\"Testprep Training\"},\"image\":{\"@id\":\"https:\/\/www.testpreptraining.ai\/tutorial\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Query parallelization in Azure Stream Analytics - Testprep Training Tutorials","description":"Enhance your skills by learning about Query parallelization in Azure Stream Analytics using Microsoft DP-200 online course Now!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/","og_locale":"en_US","og_type":"article","og_title":"Query parallelization in Azure Stream Analytics - Testprep Training Tutorials","og_description":"Enhance your skills by learning about Query parallelization in Azure Stream Analytics using Microsoft DP-200 online course Now!","og_url":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/","og_site_name":"Testprep Training Tutorials","article_modified_time":"2022-04-01T07:38:36+00:00","og_image":[{"url":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-content\/uploads\/2020\/08\/dp-200-pracice-tests-1.png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/","url":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/","name":"Query parallelization in Azure Stream Analytics - Testprep Training Tutorials","isPartOf":{"@id":"https:\/\/www.testpreptraining.ai\/tutorial\/#website"},"datePublished":"2020-12-29T11:59:34+00:00","dateModified":"2022-04-01T07:38:36+00:00","description":"Enhance your skills by learning about Query parallelization in Azure Stream Analytics using Microsoft DP-200 online course Now!","breadcrumb":{"@id":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.testpreptraining.ai\/tutorial\/query-parallelization-in-azure-stream-analytics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.testpreptraining.ai\/tutorial\/"},{"@type":"ListItem","position":2,"name":"Query parallelization in Azure Stream Analytics"}]},{"@type":"WebSite","@id":"https:\/\/www.testpreptraining.ai\/tutorial\/#website","url":"https:\/\/www.testpreptraining.ai\/tutorial\/","name":"Testprep Training Tutorials","description":"","publisher":{"@id":"https:\/\/www.testpreptraining.ai\/tutorial\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.testpreptraining.ai\/tutorial\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.testpreptraining.ai\/tutorial\/#organization","name":"Testprep Training","url":"https:\/\/www.testpreptraining.ai\/tutorial\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.testpreptraining.ai\/tutorial\/#\/schema\/logo\/image\/","url":"https:\/\/www.testpreptraining.com\/tutorial\/wp-content\/uploads\/2020\/07\/tpt-logo-6.png","contentUrl":"https:\/\/www.testpreptraining.com\/tutorial\/wp-content\/uploads\/2020\/07\/tpt-logo-6.png","width":583,"height":153,"caption":"Testprep Training"},"image":{"@id":"https:\/\/www.testpreptraining.ai\/tutorial\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/pages\/28645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/comments?post=28645"}],"version-history":[{"count":7,"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/pages\/28645\/revisions"}],"predecessor-version":[{"id":53937,"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/pages\/28645\/revisions\/53937"}],"wp:attachment":[{"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/media?parent=28645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/categories?post=28645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.testpreptraining.ai\/tutorial\/wp-json\/wp\/v2\/tags?post=28645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}