{"id":1193,"date":"2021-06-09T22:16:28","date_gmt":"2021-06-10T05:16:28","guid":{"rendered":"https:\/\/www.sqlskills.com\/blogs\/erin\/?p=1193"},"modified":"2021-06-09T22:28:06","modified_gmt":"2021-06-10T05:28:06","slug":"query-store-hints","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/","title":{"rendered":"Query Store Hints"},"content":{"rendered":"\n<p>Microsoft <a href=\"https:\/\/techcommunity.microsoft.com\/t5\/azure-sql\/query-store-hints-preview\/ba-p\/2424378\">just announced that Query Store Hints<\/a> have made it into public preview for Azure SQL Database (thank you Joe and team).&nbsp; For any of you with a single database, elastic pool, managed instance (!) or hyperscale, that means you have access to the feature <strong>today<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What do you mean, Query Store Hints?<\/h4>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/joesackmsft\">Joe Sack<\/a> and <a href=\"https:\/\/twitter.com\/sqlpedro\">Pedro Lopes<\/a> first mentioned Query Store hints in their Azure SQL: Path to an Intelligent Database session at the 2020 PASS Summit.&nbsp; (You can watch the video <a href=\"https:\/\/www.youtube.com\/watch?v=rUkTys8f9ns\">here<\/a>, thanks RedGate!)&nbsp; As many of you know, the query optimizer typically generates a good plan for a query, but there are times where you might want (or need) to add a hint to the query to direct the optimizer in its decision.&nbsp; Common query hints are adding OPTION (RECOMPILE) to force a recompile for every execution or OPTION (MAXDOP 1) to force a query to run single-threaded.&nbsp; <\/p>\n\n\n\n<p>Query hints can be really helpful in some scenarios, but if you do not have direct access to the code (hello third party applications), then you cannot add a query hint to the statement.&nbsp; Historically, you\u2019ve been able to use a plan guide to apply a hint, and that doesn\u2019t require direct code access, but plan guides are not always intuitive and I find that most people are not familiar with how to use them.<\/p>\n\n\n\n<p>Enter Query Store Hints.&nbsp; With this feature, you can now add a hint to a specific statement, even if you don\u2019t have access to the code base.&nbsp; You simply need to have Query Store enabled, and for anyone using Azure SQL Database, that\u2019s turned on by default.&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Let\u2019s start exploring.<\/h4>\n\n\n\n<p>I\u2019ve connected to my Azure SQL Database via Management Studio (I still prefer SSMS to Azure Data Studio because it has the Query Store reports available), and I also confirmed that Query Store is enabled.&nbsp; I cleared out any old data I had in there (because this is a <em>demo database<\/em>; do not clear out your QS data in production) and ran a query:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nSELECT o.CustomerID, ol.OrderID, ol.OrderLineID, o.OrderDate\nFROM Sales.Orders o\nJOIN Sales.OrderLines ol\n\tON o.OrderID = ol.OrderID\nWHERE o.CustomerID = 402\nORDER BY CustomerID, o.OrderID;\nGO\n<\/pre><\/div>\n\n\n<p>I opened up the Top Resource Consuming Queries report and found my query, and checked the plan:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-1024x562.png\" alt=\"query_id 1 and its plan, which uses a nested loop\" class=\"wp-image-1194\" width=\"768\" height=\"422\" srcset=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-1024x562.png 1024w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-300x165.png 300w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-768x422.png 768w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-1536x843.png 1536w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ.png 1894w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>query_id 1 and its plan, which uses a nested loop<\/figcaption><\/figure>\n\n\n\n<p>Ok, there\u2019s a nested loop and seeks against the two nonclustered indexes, and honestly, this is a fine plan.&nbsp; But let\u2019s see what happens if I use Query Store to hint it to use a hash join instead.&nbsp; I need the query_id for the query, which is 1 as noted in the screenshot above.&nbsp; The T-SQL syntax I need to add the hint is:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nEXEC sp_query_store_set_hints @query_id = 1, @value = N&#039;OPTION (HASH JOIN)&#039;;\nGO\n<\/pre><\/div>\n\n\n<p>After executing, I run the query again, then refresh the Top Resource Consuming Queries report:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2.png\"><img decoding=\"async\" src=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2-1024x562.png\" alt=\"query_id 1 and its new plan, after the HASH JOIN hint is applied\" class=\"wp-image-1195\" width=\"768\" height=\"422\" srcset=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2-1024x562.png 1024w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2-300x165.png 300w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2-768x422.png 768w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2-1536x843.png 1536w, https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ2.png 1894w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>query_id 1 and its new plan, after the HASH JOIN hint is applied<\/figcaption><\/figure>\n\n\n\n<p>Notice that I now have two plans for the query, plan_id 1 and plan_id 7, and the new plan uses a hash match instead of nested loop.<\/p>\n\n\n\n<p>It\u2019s pretty damn cool.&nbsp; If you are not using Azure SQL Database do not despair, this feature will likely make it into vNext&#8230;so start thinking about your upgrade.&nbsp; If you\u2019re wondering when you might want to use Query Store hints, here are a few additional examples based on customer scenarios I\u2019ve encountered in the last couple months:<\/p>\n\n\n\n<ul><li>You upgraded to SQL Server 2019 and you moved to compatibility mode 150, but you\u2019re still using the Legacy CE.&nbsp; You have one query which performs worse than it did prior to the upgrade, and it\u2019s because of batch mode on rowstore.&nbsp; <\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nEXEC sys.sp_query_store_set_hints @query_id= 1, @query_hints = N&#039;OPTION(USE HINT(&#039;&#039;DISALLOW_BATCH_MODE&#039;&#039;))&#039;;\n<\/pre><\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul><li>MAXDOP for the instance is set to 8, but you have a handful of queries that perform better at MAXDOP 12.\u00a0 You don\u2019t want to change the setting for the instance (or at the database level) just for those queries.<\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nEXEC sys.sp_query_store_set_hints @query_id= 1, @query_hints = N&#039;OPTION(MAXDOP 12)&#039;;\n<\/pre><\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul><li>Intermittently there are RESOURCE_SEMAPHORE waits for the instance, and you\u2019ve discovered that there are a few big reporting queries that each take a huge memory grant.&nbsp; You have identified the problem queries, but you have to work with the developers (or vendor) to get them changed and that\u2019s going to take time.&nbsp; Also, you\u2019re running Standard Edition, so you cannot use Resource Governor to control them.&nbsp;&nbsp;<\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nEXEC sys.sp_query_store_set_hints @query_id= 1, @query_hints = N&#039;OPTION(MAX_GRANT_PERCENT=1)&#039;;\n<\/pre><\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul><li>You\u2019re running in compatibility mode 150 and you need a handful of queries to use an older compatibility mode, but the same CE version.&nbsp;<\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nEXEC sys.sp_query_store_set_hints @query_id= 1, @query_hints = N&#039;OPTION(USE HINT(&#039;&#039;QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_120&#039;&#039;))&#039;;\n<\/pre><\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul><li>You\u2019re using the new Cardinality Estimator for a database, but you have one query that runs frequently and is critical to the application that performs better with the legacy CE.<\/li><\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; gutter: false; title: ; notranslate\" title=\"\">\nEXEC sys.sp_query_store_set_hints @query_id= 1, @query_hints = N&#039;OPTION(USE HINT(&#039;&#039;FORCE_LEGACY_CARDINALITY_ESTIMATION&#039;&#039;))&#039;;\n<\/pre><\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>It is difficult, if not impossible, for every query in a workload to perform optimally under one specific set of configuration options.&nbsp; Further, while we can spend hours tuning and tweaking, sometimes code, schema, and configurations can\u2019t happen quickly in a production environment.&nbsp; When you need to manage performance of the variants, Query Store Hints truly fills the gap.<\/p>\n\n\n\n<p>A few points worth mentioning:<\/p>\n\n\n\n<ul><li>Not every <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/queries\/hints-transact-sql-query?view=sql-server-ver15\">query hint<\/a> is currently supported.&nbsp; <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-stored-procedures\/sys-sp-query-store-set-hints-transact-sql?view=azuresqldb-current\">Supported hints are detailed in the &nbsp;documentation<\/a>, and it\u2019s a good start. &nbsp;A few that are missing that are noteworthy to me are table hints (e.g. index hints) and QUERYTRACEON (which is more relevant for on-premises than Azure SQL Database).&nbsp; If these are hints you think are important, then <strong>please <\/strong>provide that feedback via the options listed in the original announcement post.&nbsp; Remember: this feature is currently in public preview.&nbsp; Do not assume that this is \u201cit\u201d for the feature.&nbsp; <em>There is more to come and if you want to help drive that direction, speak up now.<\/em><\/li><li>If the hint that you add cannot be used for the query, your query will not fail.&nbsp; It will still go through normal compilation and optimization.&nbsp; This is the same behavior we see with failed forcing, and it means you will want to monitor for failures.&nbsp;<\/li><li>The new view you\u2019ll want to check out is <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-catalog-views\/sys-query-store-query-hints-transact-sql?view=azuresqldb-current\">sys.query_store_query_hints<\/a>.<\/li><\/ul>\n\n\n\n<p>I will definitely have more posts as I continue to explore this feature and help customers with production scenarios.  I look forward to hearing what you all think about Query Store Hints!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Query Store Hints provide the ability to add a hint to a statement even if you do not have direct code access.<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[46],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Query Store Hints - Erin Stellato<\/title>\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.sqlskills.com\/blogs\/erin\/query-store-hints\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Query Store Hints - Erin Stellato\" \/>\n<meta property=\"og:description\" content=\"Query Store Hints provide the ability to add a hint to a statement even if you do not have direct code access.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/\" \/>\n<meta property=\"og:site_name\" content=\"Erin Stellato\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-10T05:16:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-10T05:28:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-1024x562.png\" \/>\n<meta name=\"author\" content=\"Erin Stellato\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Erin Stellato\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/\",\"name\":\"Query Store Hints - Erin Stellato\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#website\"},\"datePublished\":\"2021-06-10T05:16:28+00:00\",\"dateModified\":\"2021-06-10T05:28:06+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Query Store Hints\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/\",\"name\":\"Erin Stellato\",\"description\":\"The SQL Sequel\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158\",\"name\":\"Erin Stellato\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g\",\"caption\":\"Erin Stellato\"},\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/erin\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/erin\/author\/erin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Query Store Hints - Erin Stellato","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.sqlskills.com\/blogs\/erin\/query-store-hints\/","og_locale":"en_US","og_type":"article","og_title":"Query Store Hints - Erin Stellato","og_description":"Query Store Hints provide the ability to add a hint to a statement even if you do not have direct code access.","og_url":"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/","og_site_name":"Erin Stellato","article_published_time":"2021-06-10T05:16:28+00:00","article_modified_time":"2021-06-10T05:28:06+00:00","og_image":[{"url":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-content\/uploads\/2021\/06\/QueryStoreQ-1024x562.png"}],"author":"Erin Stellato","twitter_misc":{"Written by":"Erin Stellato","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/","url":"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/","name":"Query Store Hints - Erin Stellato","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#website"},"datePublished":"2021-06-10T05:16:28+00:00","dateModified":"2021-06-10T05:28:06+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/query-store-hints\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/erin\/"},{"@type":"ListItem","position":2,"name":"Query Store Hints"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/erin\/","name":"Erin Stellato","description":"The SQL Sequel","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/erin\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/76170223ffffa1df03fd9be5b66cb158","name":"Erin Stellato","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/erin\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c8b485bd54ea26b57e99f79b525f409?s=96&d=mm&r=g","caption":"Erin Stellato"},"sameAs":["http:\/\/3.209.169.194\/blogs\/erin"],"url":"https:\/\/www.sqlskills.com\/blogs\/erin\/author\/erin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/posts\/1193"}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/comments?post=1193"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/posts\/1193\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/media?parent=1193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/categories?post=1193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/erin\/wp-json\/wp\/v2\/tags?post=1193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}