{
    "version": "https://jsonfeed.org/version/1",
    "title": "StackQL Blog - Provider Announcements",
    "home_page_url": "https://stackql.io/blog/providers",
    "description": "New and updated StackQL providers",
    "items": [
        {
            "id": "https://stackql.io/blog/providers/new-typesafe-provider-available",
            "content_html": "<p>We've released a new StackQL provider for TypeSafe AI:</p>\n<ul>\n<li class=\"\"><a href=\"https://typesafe-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>typesafe</code></strong></a> - the TypeSafe API: <strong><code>systemone</code></strong> (the evaluation endpoint behind Jev, TypeSafe's flagship model) and <strong><code>models</code></strong> (the models and aliases an API key can use) - 2 services, 2 resources, 2 operations, both <code>SELECT</code></li>\n</ul>\n<p>Jev is a System One model. Instead of generating text it answers typed questions about a <code>state</code> you supply and returns a calibrated probability or distribution for each one: a Noul question is a yes/no with the probability of yes, a Choice picks one option from a set you define with a probability per option and a confidence, and a Score rates the state against an ordered rubric. Any mix of the three runs against the same state in one request, in about a hundred milliseconds, for a fraction of a cent. There is nothing to parse and nothing to coax into JSON.</p>\n<p>That matters most for agents that already run on the <a class=\"\" href=\"https://stackql.io/command-line-usage/mcp\">StackQL MCP server</a>. Those agents have every provider's control plane as SQL, and the audit log and approval gates that come with it. What a <code>WHERE</code> clause cannot do is make the judgment call: is this instance production or scratch, does this rule's description justify public ingress, does this account still need an admin role, is a restart the right response to this event. In this provider that call is a <code>SELECT</code> too, so a decision sits between a context query and a mutation as one more governed tool call. The rest of this post is that routine, in the shapes platform, FinOps, SRE and security teams actually run.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"connect\">Connect<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#connect\" class=\"hash-link\" aria-label=\"Direct link to Connect\" title=\"Direct link to Connect\" translate=\"no\">​</a></h2>\n<p>Authentication is a TypeSafe API key, created in the TypeSafe console and read from <code>TYPESAFE_API_KEY</code>, the same variable the TypeSafe SDKs use (there is no Terraform provider for TypeSafe):</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export TYPESAFE_API_KEY=...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql shell</span><br></div></code></pre></div></div>\n<p>Pricing is per input token (<code>$0.042</code> per million at the time of writing; output tokens are free), and the <code>usage</code> column of every row reports what a decision cost. Jev 1.13 allows 80 requests per second and 100K tokens per second; the provider carries the retry policy the vendor SDKs apply by default, so a 429 or a 529 on the first attempt is retried with backoff before it surfaces.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-routine\">The routine<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#the-routine\" class=\"hash-link\" aria-label=\"Direct link to The routine\" title=\"Direct link to The routine\" translate=\"no\">​</a></h2>\n<p>An evaluation is a <code>SELECT</code> from <code>typesafe.systemone.evaluations</code>: the <code>state</code>, the <code>model</code> and the <code>questions</code> are the <code>WHERE</code> clause, and the row that comes back carries the versioned model that answered, the <code>answers</code> keyed by the names you chose, and the token usage. Over MCP the routine is three tool calls:</p>\n<ol>\n<li class=\"\"><strong>Context</strong> - <code>run_select_query</code> against the provider that owns the facts (<code>aws</code>, <code>k8s</code>, <code>okta</code>, <code>github</code>, ...). The agent keeps the columns the decision needs.</li>\n<li class=\"\"><strong>Decision</strong> - <code>run_select_query</code> against <code>typesafe.systemone.evaluations</code>, with the record serialised as the JSON <code>state</code> and the routine's questions as <code>questions</code>.</li>\n<li class=\"\"><strong>Action</strong> - <code>run_mutation_query</code> or <code>run_lifecycle_operation</code> against the owning provider, only when the answer clears the threshold the routine sets: a Noul at or above 0.9 (or at or below 0.1), a Choice with <code>confidence</code> at or above 0.9, a Score above a level.</li>\n</ol>\n<p>Every evaluation is a read, so the decision step is allowed in every MCP server mode, including <code>read_only</code>; in the default <code>safe</code> mode the action still goes through the client's approval prompt, and in <code>read_only</code> the routine stops at the recommendation. Every tool call lands in the server's audit log, and because the row names the model version that answered, every automated change can record which model decided it.</p>\n<p>The examples below were run live against the API before publication. Each shows the context query, the decision over one representative record, and the action; the answer Jev gave for that record is under each block.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"tagging-hygiene\">Tagging hygiene<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#tagging-hygiene\" class=\"hash-link\" aria-label=\"Direct link to Tagging hygiene\" title=\"Direct link to Tagging hygiene\" translate=\"no\">​</a></h2>\n<p>Platform engineering: classify an instance from its name and existing tags, then write the missing tags back.</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 1. context (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> instance_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> instance_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> launch_time</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> tags</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 2. decision (run_select_query): one record from the result as the state</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.environment.choice'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> environment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.environment.confidence'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> confidence</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.owner_team.choice'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> owner_team</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       model</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> typesafe</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">systemone</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">evaluations</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"instance_id\": \"i-0a1b2c3d4e5f67890\", \"instance_type\": \"m5.2xlarge\", \"launch_time\": \"2026-03-02T09:14:00Z\", \"tags\": [{\"Key\": \"Name\", \"Value\": \"jenkins-agent-prod-2\"}, {\"Key\": \"created-by\", \"Value\": \"ci-platform@example.com\"}]}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> model </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'jev-latest'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> questions </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"environment\": {\"type\": \"choice\", \"instructions\": \"Which environment does this instance belong to? Use the Name tag and anything else in the record.\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                    \"criteria\": {\"production\": \"Serves live traffic or production pipelines\", \"staging\": \"Pre-production, UAT or release testing\", \"development\": \"Developer, sandbox or test use\", \"unknown\": \"The record does not say\"}},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"owner_team\": {\"type\": \"choice\", \"instructions\": \"Which team most likely owns this instance?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                   \"criteria\": {\"platform\": \"CI, build and shared infrastructure\", \"data\": \"Analytics and data pipelines\", \"product\": \"Customer-facing applications\", \"unknown\": \"Cannot tell from the record\"}}</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  }'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 3. action (run_mutation_query), when confidence &gt;= 0.9</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">tags </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">ResourceId</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> Tag</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'i-0a1b2c3d4e5f67890'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[{\"Key\": \"environment\", \"Value\": \"production\"}, {\"Key\": \"owner\", \"Value\": \"platform\"}]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<table><thead><tr><th>environment</th><th>confidence</th><th>owner_team</th><th>model</th></tr></thead><tbody><tr><td>production</td><td>1.0</td><td>platform</td><td>jev-1.13.0</td></tr></tbody></table>\n<p>A routine that walks every untagged instance in the account is a loop over the context rows: one decision call per record, one tag write per record that clears the bar, and the rest left for a person.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"rightsizing-and-off-hours-scheduling\">Rightsizing and off-hours scheduling<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#rightsizing-and-off-hours-scheduling\" class=\"hash-link\" aria-label=\"Direct link to Rightsizing and off-hours scheduling\" title=\"Direct link to Rightsizing and off-hours scheduling\" translate=\"no\">​</a></h2>\n<p>FinOps and GreenOps: given an instance record and the utilisation the agent has gathered, decide between keeping it, stopping it outside business hours, downsizing it or referring it to the owner. A second question asks whether the workload could run at another time or in another region at all, which is the lever carbon-aware scheduling needs.</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 1. context (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> instance_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> instance_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> launch_time</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> tags</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 2. decision (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.action.choice'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">action</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.action.confidence'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> confidence</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.schedulable.noul'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> p_schedulable</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       model</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> typesafe</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">systemone</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">evaluations</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"instance_id\": \"i-0b9c8d7e6f5a43210\", \"instance_type\": \"r5.4xlarge\", \"state\": \"running\", \"launch_time\": \"2025-11-18T03:00:00Z\", \"tags\": [{\"Key\": \"Name\", \"Value\": \"nightly-report-builder\"}, {\"Key\": \"owner\", \"Value\": \"data\"}], \"avg_cpu_14d_pct\": 3.1, \"max_cpu_14d_pct\": 61.0, \"busy_hours_utc\": \"01:00-03:00\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> model </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'jev-latest'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> questions </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"action\": {\"type\": \"choice\", \"instructions\": \"What should a cost review do with this instance?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">               \"criteria\": {\"keep\": \"Utilisation and purpose justify running it as is\", \"stop_outside_hours\": \"It only works in a known window and can be stopped the rest of the time\", \"downsize\": \"It is oversized for its sustained load\", \"review_with_owner\": \"The record is not enough to decide\"}},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"schedulable\": {\"type\": \"noul\", \"instructions\": \"Could this workload run at a different time of day or in a different region without affecting users?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                    \"criteria\": {\"true\": \"A batch or scheduled job with no interactive users\", \"false\": \"Serves users or other systems on demand\"}}</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  }'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 3. action (run_lifecycle_operation), when action = 'stop_outside_hours' and confidence &gt;= 0.9</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">instances</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">stop_instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@InstanceId</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'i-0b9c8d7e6f5a43210'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@region</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<table><thead><tr><th>action</th><th>confidence</th><th>p_schedulable</th></tr></thead><tbody><tr><td>stop_outside_hours</td><td>0.9</td><td>0.87</td></tr></tbody></table>\n<p>The confidence sat between 0.86 and 0.91 across repeated runs of the same record, which is the point of putting a threshold in the routine rather than in the prompt: at 0.86 this instance goes to the owner instead of being stopped.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"incident-triage\">Incident triage<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#incident-triage\" class=\"hash-link\" aria-label=\"Direct link to Incident triage\" title=\"Direct link to Incident triage\" translate=\"no\">​</a></h2>\n<p>SRE: read the cluster's warning events, let Jev name the likely cause, rate the severity and say whether rescheduling the pod is the right first response.</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 1. context (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">involved_object</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.namespace'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> namespace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">involved_object</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.kind'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> kind</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">involved_object</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       reason</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> message</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> last_timestamp</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">events_all_namespaces</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Warning'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 2. decision (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.cause.choice'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> cause</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.severity.score'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> severity</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.reschedule_helps.noul'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> p_reschedule_helps</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       model</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> typesafe</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">systemone</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">evaluations</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"namespace\": \"payments\", \"kind\": \"Pod\", \"name\": \"checkout-api-7c9d6f8b5-xk2lp\", \"reason\": \"BackOff\", \"message\": \"Back-off restarting failed container checkout-api in pod checkout-api-7c9d6f8b5-xk2lp\", \"count\": 14, \"last_timestamp\": \"2026-10-05T02:41:07Z\", \"recent_log_tail\": \"FATAL: connection pool exhausted after 30s waiting for a connection to payments-db\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> model </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'jev-latest'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> questions </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"cause\": {\"type\": \"choice\", \"instructions\": \"What is the most likely cause of this event?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">              \"criteria\": {\"crash_loop\": \"The container exits repeatedly on its own error\", \"out_of_memory\": \"Killed for exceeding its memory limit\", \"image_pull\": \"The image cannot be pulled\", \"scheduling\": \"No node can place the pod\", \"dependency\": \"A dependency the container needs is unavailable or saturated\", \"other\": \"None of the above\"}},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"severity\": {\"type\": \"score\", \"instructions\": \"How severe is this for users?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                 \"criteria\": [\"Informational, no user impact\", \"Degraded, users may notice\", \"Outage of a user-facing capability\", \"Outage with data or payment risk\"]},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"reschedule_helps\": {\"type\": \"noul\", \"instructions\": \"Would deleting the pod so the controller reschedules it most likely resolve this?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                         \"criteria\": {\"true\": \"A transient or node-local fault that a fresh pod clears\", \"false\": \"A code, configuration or dependency fault a new pod would hit again\"}}</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  }'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 3. action (run_mutation_query), when p_reschedule_helps &gt;= 0.9 and severity &lt; 2</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pods</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> namespace </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'payments'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'checkout-api-7c9d6f8b5-xk2lp'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<table><thead><tr><th>cause</th><th>severity</th><th>p_reschedule_helps</th></tr></thead><tbody><tr><td>dependency</td><td>2.2</td><td>0.21</td></tr></tbody></table>\n<p>This one is worth reading closely. The event alone looks like a crash loop, and a reflexive runbook would delete the pod. Jev read the log tail, named the saturated database pool as the cause, rated it an outage with payment risk and gave the restart a 0.21, so the routine does not touch the pod and the agent escalates instead.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"public-ingress-review\">Public ingress review<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#public-ingress-review\" class=\"hash-link\" aria-label=\"Direct link to Public ingress review\" title=\"Direct link to Public ingress review\" translate=\"no\">​</a></h2>\n<p>CSPM: list the security group rules open to the internet, let Jev judge whether each rule's description and port make the exposure a deliberate public endpoint or an exposed management or database port, then revoke a rule only when it is judged unjustified.</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 1. context (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> security_group_rule_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> group_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> ip_protocol</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> from_port</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> to_port</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> cidr_ipv_4</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> is_egress</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> description</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">security_group_rules</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> cidr_ipv_4 </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'0.0.0.0/0'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 2. decision (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.justified.noul'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> p_justified</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.exposure.choice'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> exposure</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.exposure.confidence'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> confidence</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       model</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> typesafe</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">systemone</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">evaluations</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"security_group_rule_id\": \"sgr-0f1e2d3c4b5a69788\", \"group_id\": \"sg-0123456789abcdef0\", \"group_name\": \"analytics-db\", \"ip_protocol\": \"tcp\", \"from_port\": 5432, \"to_port\": 5432, \"cidr_ipv_4\": \"0.0.0.0/0\", \"is_egress\": false, \"description\": \"temp access for vendor demo\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> model </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'jev-latest'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> questions </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"justified\": {\"type\": \"noul\", \"instructions\": \"Do the description, group name and port justify ingress from the whole internet?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                  \"criteria\": {\"true\": \"A deliberate public endpoint such as a load balancer or web tier on 80 or 443\", \"false\": \"A management, database or internal service port, or a temporary exception\"}},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"exposure\": {\"type\": \"choice\", \"instructions\": \"What kind of exposure is this?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                 \"criteria\": {\"public_endpoint\": \"Intended internet-facing service\", \"management_port\": \"SSH, RDP, WinRM or similar\", \"database_port\": \"A database or cache listener\", \"unknown\": \"Cannot tell from the record\"}}</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  }'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 3. action (run_lifecycle_operation), when p_justified &lt;= 0.1</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">security_groups</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">revoke_security_group_ingress</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@GroupId</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'sg-0123456789abcdef0'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@SecurityGroupRuleId</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'sgr-0f1e2d3c4b5a69788'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@region</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<table><thead><tr><th>p_justified</th><th>exposure</th><th>confidence</th></tr></thead><tbody><tr><td>0.04</td><td>database_port</td><td>1.0</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"audit-findings\">Audit findings<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#audit-findings\" class=\"hash-link\" aria-label=\"Direct link to Audit findings\" title=\"Direct link to Audit findings\" translate=\"no\">​</a></h2>\n<p>Audit and compliance: the context comes from one provider and the action goes to another. Read the privilege grants from the identity provider's system log, let Jev check each against the change policy written into the question, and open a tracked finding for the ones that fall outside it.</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 1. context (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> published</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> eventType</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> displayMessage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> outcome</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> actor</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> target</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> okta</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">logs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">system_log_events</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> subdomain </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-org'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> since </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-10-04T00:00:00Z'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> filter </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'eventType eq \"user.account.privilege.grant\"'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 2. decision (run_select_query)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.in_policy.noul'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> p_in_policy</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">answers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.risk.score'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> risk</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       model</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> typesafe</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">systemone</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">evaluations</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"published\": \"2026-10-04T22:47:13Z\", \"eventType\": \"user.account.privilege.grant\", \"displayMessage\": \"Grant user privilege\", \"outcome\": \"SUCCESS\", \"actor\": {\"alternateId\": \"j.doe@example.com\", \"type\": \"User\"}, \"target\": [{\"alternateId\": \"svc-reporting@example.com\", \"type\": \"User\"}, {\"displayName\": \"Super Administrator\", \"type\": \"ROLE\"}], \"note\": \"no change ticket referenced\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> model </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'jev-latest'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> questions </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"in_policy\": {\"type\": \"noul\", \"instructions\": \"Does this privilege grant comply with the change policy?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                  \"criteria\": {\"true\": \"Granted by an identity administrator, between 09:00 and 17:00 UTC on a weekday, with a change ticket referenced\", \"false\": \"Outside the change window, by a non-administrator, to a service account, or without a ticket\"}},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"risk\": {\"type\": \"score\", \"instructions\": \"How much risk does this grant carry?\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">             \"criteria\": [\"Routine, scoped role\", \"Elevated role to a person\", \"Tenant-wide administrative role, or any role to a service account\"]}</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  }'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- 3. action (run_mutation_query), when p_in_policy &lt;= 0.2</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> github</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">issues</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">issues </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">owner</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> repo</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> title</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> body</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> labels</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-org'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'security-audit'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Privilege grant outside change policy: svc-reporting@example.com granted Super Administrator'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Granted 2026-10-04T22:47:13Z by j.doe@example.com with no change ticket referenced. Flagged by jev-1.13.0 (in_policy 0.02, risk 2.0). Review and revoke or document.'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[\"compliance\", \"iam\"]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<table><thead><tr><th>p_in_policy</th><th>risk</th></tr></thead><tbody><tr><td>0.02</td><td>2.0</td></tr></tbody></table>\n<p>The policy lives in the <code>criteria</code> of one question. Changing the change window or the ticket rule is a diff in that text, reviewed like any other change to the routine, not a retrained classifier.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"writing-the-questions\">Writing the questions<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#writing-the-questions\" class=\"hash-link\" aria-label=\"Direct link to Writing the questions\" title=\"Direct link to Writing the questions\" translate=\"no\">​</a></h2>\n<p>Two things came out of putting these routines together. First, ask Jev the judgment and compute the facts yourself. An access-review draft asked \"Is this account dormant?\" with a 90-day rule in the criteria, and the answer drifted between 0.54 and 0.88 however plainly the dates were stated; Jev treats dormancy as a judgment about the person. Asked instead \"Do the title and department justify the roles this account holds?\" the same record answered 0.16 every time, and \"What kind of account is this?\" answered contractor with confidence 1.0. Days since the last sign-in is arithmetic, so it stays in SQL, and the suspension (<code>EXEC okta.users.users.suspend_user</code>) runs only when the arithmetic and the judgment agree. The full example is on the <a href=\"https://typesafe-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">provider docs</a>.</p>\n<p>Second, keep the thresholds in the routine and the model version in the record. Choice confidences and Scores drift a little between identical calls, which is a reason to gate on them rather than to read a single number as a verdict. The <code>model</code> column records which version answered, so an action log can say \"stopped by jev-1.13.0 at 0.91\", and once a routine's thresholds are tuned the versioned id can be pinned in place of the <code>jev-latest</code> alias.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-the-provider-is-and-is-not\">What the provider is and is not<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#what-the-provider-is-and-is-not\" class=\"hash-link\" aria-label=\"Direct link to What the provider is and is not\" title=\"Direct link to What the provider is and is not\" translate=\"no\">​</a></h2>\n<p>The TypeSafe API is two operations, and the provider maps both. There is no administrative or usage API to map: keys are created and revoked in the TypeSafe console, and usage is reported per request in the <code>usage</code> column rather than through a reporting endpoint. Everything in the API is a read, so the provider has no <code>INSERT</code>, <code>UPDATE</code> or <code>DELETE</code> methods of its own; the mutations in this post belong to the providers that own the resources. The models catalog is the one plain inventory query:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> description</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> release_date</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> typesafe</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Every statement in this post was checked before publication: the typesafe statements ran live, and the aws, k8s, okta and github statements were routed through their providers to the wire against a scratch account. The complete smoke run of the provider costs a fraction of a cent.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/new-typesafe-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull typesafe;</span><br></div></code></pre></div></div>\n<p>Provider docs, including the request shape of each question type, the error contract and the full set of agent-routine examples, are at <a href=\"https://typesafe-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">typesafe-provider.stackql.io</a>. For the MCP server itself, start with <a class=\"\" href=\"https://stackql.io/ai/how-tos/use-stackql-with-ai-agents\">How to use StackQL with AI agents</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-typesafe-provider-available",
            "title": "New TypeSafe Provider Available",
            "summary": "A new StackQL provider for TypeSafe AI that brings Jev, TypeSafe's System One decision model, into StackQL agent routines over MCP - rows from aws, k8s, okta or github become the state, Jev returns a typed decision with a probability or confidence, and a StackQL mutation runs only when the decision clears the routine's threshold. Tagging hygiene, rightsizing, incident triage, access review, public ingress review and audit findings, as SQL.",
            "date_modified": "2026-10-05T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "typesafe",
                "jev",
                "provider",
                "mcp",
                "ai-agents"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-railway-provider-available",
            "content_html": "<p>We've released a new StackQL provider for Railway:</p>\n<ul>\n<li class=\"\"><a href=\"https://railway-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>railway</code></strong></a> - the Railway public API: <strong><code>projects</code></strong>, <strong><code>environments</code></strong>, <strong><code>services</code></strong>, <strong><code>deployments</code></strong>, <strong><code>variables</code></strong>, <strong><code>networking</code></strong>, <strong><code>storage</code></strong>, <strong><code>billing</code></strong>, <strong><code>observability</code></strong>, <strong><code>workspaces</code></strong>, <strong><code>account</code></strong>, <strong><code>templates</code></strong>, <strong><code>integrations</code></strong>, <strong><code>platform</code></strong> and <strong><code>agents</code></strong> (15 services, 151 resources, 396 operations)</li>\n</ul>\n<p>The provider reads and writes. Projects, environments, services, variables, domains and volumes can be queried, created, changed and removed, and deployment operations such as redeploy, restart and rollback are available on the resources they act on. The rest of this post is the questions it answers and the tasks it handles.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"connect\">Connect<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#connect\" class=\"hash-link\" aria-label=\"Direct link to Connect\" title=\"Direct link to Connect\" translate=\"no\">​</a></h2>\n<p>Authentication is a Railway account token or workspace token, read from <code>RAILWAY_TOKEN</code> - the same variable the Terraform Railway provider uses:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export RAILWAY_TOKEN=...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql shell</span><br></div></code></pre></div></div>\n<p>Tokens are created under Account settings -&gt; Tokens. A project token does not work with the provider. Railway limits API requests per hour by plan (100 on Free, 1000 on Hobby, 10000 on Pro), which is worth keeping in mind for queries that cover many projects or environments.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-is-deployed-where\">What is deployed where<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#what-is-deployed-where\" class=\"hash-link\" aria-label=\"Direct link to What is deployed where\" title=\"Direct link to What is deployed where\" translate=\"no\">​</a></h2>\n<p>The workspaces a token can reach, the projects in one, and the environments of a project:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">plan</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> description</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> is_ephemeral</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>A service instance is a service as it is configured in one environment. Listing the instances of an environment shows what runs there, from which image or repository, and how the last deployment went:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> num_replicas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.image'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> image</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.repo'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> repo</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">latest_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.status'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> last_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">latest_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.created_at'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> deployed_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>An <code>IN</code> list covers several environments in one query, with one request made per environment. Joining to <code>environments</code> puts names on the rows:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> e</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> environment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">num_replicas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">latest_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.status'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> last_deployment</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances s</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments e </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> e</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> e</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;production-environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;staging-environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> environment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>The same works across projects, here for the services of two projects in a workspace:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> service</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">created_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services s</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects p </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;other-project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"deployment-health\">Deployment health<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#deployment-health\" class=\"hash-link\" aria-label=\"Direct link to Deployment health\" title=\"Direct link to Deployment health\" translate=\"no\">​</a></h2>\n<p>Deployment outcomes for a project, then the ones that failed or crashed, with who triggered them:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> deployments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">GROUP</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">creator</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> deployed_by</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{in: [FAILED, CRASHED]}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Services in an environment whose latest deployment is not healthy:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">latest_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> deployment_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">latest_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.status'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">latest_deployment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.status'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">NOT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'SUCCESS'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'SLEEPING'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>From there, the build and runtime logs of a deployment are tables. <code>LIMIT</code> sets how many lines are fetched:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">timestamp</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> severity</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> message</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">observability</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">build_logs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> deployment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">LIMIT</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">100</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">timestamp</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> severity</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> message</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">observability</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployment_logs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> deployment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> filter </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'error'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">LIMIT</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">100</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"drift-between-environments\">Drift between environments<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#drift-between-environments\" class=\"hash-link\" aria-label=\"Direct link to Drift between environments\" title=\"Direct link to Drift between environments\" translate=\"no\">​</a></h2>\n<p>Variables are one row per variable, so comparing two environments is a join. Variables a service has in production that are missing in staging:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables prod</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">LEFT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables stg</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;production-environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;staging-environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IS</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">NULL</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">NOT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">LIKE</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'RAILWAY_%'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Variables set in both environments with different values:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables prod</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables stg</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;production-environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;staging-environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">&lt;&gt;</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">NOT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">LIKE</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'RAILWAY_%'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>The variables Railway provides itself are prefixed <code>RAILWAY_</code> and differ between environments by design, so they are left out. Both queries return names only. Selecting <code>value</code> returns the values in clear, so treat that output as a secret.</p>\n<p>The same approach compares how a service is configured in each environment:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">num_replicas </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> prod_replicas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">num_replicas </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> staging_replicas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">region </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> prod_region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">region </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> staging_region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">start_command </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> prod_start_command</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">start_command </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> staging_start_command</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances prod</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances stg</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> prod</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;production-environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> stg</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;staging-environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"domains-and-certificates\">Domains and certificates<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#domains-and-certificates\" class=\"hash-link\" aria-label=\"Direct link to Domains and certificates\" title=\"Direct link to Domains and certificates\" translate=\"no\">​</a></h2>\n<p>The generated domains of every service in an environment, without going service by service. The <code>custom_domains</code> key of the same column holds the custom ones:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">d</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.domain'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> domain</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">d</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.target_port'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> target_port</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">     json_each</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">domains</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.service_domains'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> d</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Custom domains carry their verification and certificate state, and the DNS records Railway expects to find:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> domain</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.verified'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> verified</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.certificate_status'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> certificate_status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.dns_records'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> dns_records</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">networking</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">custom_domains</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"usage-and-cost\">Usage and cost<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#usage-and-cost\" class=\"hash-link\" aria-label=\"Direct link to Usage and cost\" title=\"Direct link to Usage and cost\" translate=\"no\">​</a></h2>\n<p>Usage for a workspace by measurement, grouped by project, with project names joined in:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">measurement</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">billing</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">usage</span><span class=\"token plain\"> u</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects p</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">tags</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.project_id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">measurements </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[CPU_USAGE, MEMORY_USAGE_GB, NETWORK_TX_GB, DISK_USAGE_GB]'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_by </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[PROJECT_ID]'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> measurement</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p><code>start_date</code> and <code>end_date</code> narrow the window. The projected usage for the current billing period, and the billing position of the workspace:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> measurement</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> estimated_value</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">billing</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">estimated_usage</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> measurements </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[CPU_USAGE, MEMORY_USAGE_GB]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> current_usage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> credit_balance</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">billing_period</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.end'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> period_ends</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">usage_limit</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.hard_limit'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> hard_limit</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">billing</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">customers</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Volumes report their allocated and used size per environment:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">volume</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> volume</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> mount_path</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       size_mb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> current_size_mb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">ROUND</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">100.0</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"> current_size_mb </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">/</span><span class=\"token plain\"> size_mb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> used_pct</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">storage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">volume_instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"provisioning\">Provisioning<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#provisioning\" class=\"hash-link\" aria-label=\"Direct link to Provisioning\" title=\"Direct link to Provisioning\" translate=\"no\">​</a></h2>\n<p>A project is created with one environment. <code>RETURNING</code> gives back the identifiers the next statements need:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> description</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> workspace_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'orders'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'order processing'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> primary_environment_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'staging'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>A service from a container image or a repository. A service with a source is deployed when it is created, and a running deployment is billed:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'cache'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"image\": \"redis:7-alpine\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> branch</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'api'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"repo\": \"my-org/orders-api\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'main'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Variables are written one at a time or as a set. Writing a variable that exists replaces its value, and <code>skip_deploys</code> keeps the change from triggering a deployment:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> environment_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> skip_deploys</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'LOG_LEVEL'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'info'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">true</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">variables</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> environment_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> variables</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> skip_deploys</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"SENTRY_DSN\": \"https://example.ingest.sentry.io/1\", \"FEATURE_FLAGS\": \"checkout-v2\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">true</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>A generated domain and a volume for the service:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">networking</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_domains </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">environment_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> domain</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">storage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">volumes </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> environment_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> service_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> mount_path</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'/data'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"day-two-operations\">Day-two operations<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#day-two-operations\" class=\"hash-link\" aria-label=\"Direct link to Day-two operations\" title=\"Direct link to Day-two operations\" translate=\"no\">​</a></h2>\n<p>Changing how a service runs in an environment is an <code>UPDATE</code>. Values in <code>SET</code> are written as quoted strings:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UPDATE</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> num_replicas </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">    start_command </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'npm run start'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">    healthcheck_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'/healthz'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Deployment operations are <code>EXEC</code> methods. The <code>SHOWRESULTS</code> hint returns the API's answer, including a refusal:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> </span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">/*+ SHOWRESULTS */</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">redeploy</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@service_id</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@environment_id</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> </span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">/*+ SHOWRESULTS */</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">restart</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@id</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> </span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">/*+ SHOWRESULTS */</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">rollback</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@id</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"preview-environment-cleanup\">Preview environment cleanup<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#preview-environment-cleanup\" class=\"hash-link\" aria-label=\"Direct link to Preview environment cleanup\" title=\"Direct link to Preview environment cleanup\" translate=\"no\">​</a></h2>\n<p>Pull request environments accumulate. The ephemeral environments of a project, with the pull request each one belongs to:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">meta</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.pr_number'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> pr_number</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">meta</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.branch'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> branch</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;project-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> is_ephemeral </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">true</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Removing one is a <code>DELETE</code>. Running the listing again confirms it is gone:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"a-join-across-providers\">A join across providers<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#a-join-across-providers\" class=\"hash-link\" aria-label=\"Direct link to A join across providers\" title=\"Direct link to A join across providers\" translate=\"no\">​</a></h2>\n<p>Services deployed from a GitHub repository can be matched to the repository itself, for example to find services still deploying from a repository that has been archived or has not been pushed to in some time. This uses the <code>github</code> provider alongside <code>railway</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> repo</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">archived</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pushed_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> railway</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_instances s</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> github</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">repos</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">repos r</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.repo'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">environment_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;environment-id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">org </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-org'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pushed_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/new-railway-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull railway;</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://railway-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">railway-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-railway-provider-available",
            "title": "New Railway Provider Available",
            "summary": "A new StackQL provider for Railway - query and manage workspaces, projects, environments, services, deployments, variables, domains, volumes and usage using SQL - available in the StackQL Provider Registry now.",
            "date_modified": "2026-09-30T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "railway",
                "provider",
                "paas",
                "deployments",
                "finops"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-gitlab-provider-available",
            "content_html": "<p>We've released a new StackQL provider for GitLab:</p>\n<ul>\n<li class=\"\"><a href=\"https://gitlab-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>gitlab</code></strong></a> - the GitLab GraphQL API as a read-only SQL surface: <strong><code>projects</code></strong>, <strong><code>groups</code></strong>, <strong><code>users</code></strong>, <strong><code>issues</code></strong>, <strong><code>merge_requests</code></strong>, <strong><code>ci</code></strong>, <strong><code>work_items</code></strong>, <strong><code>security</code></strong>, <strong><code>packages</code></strong>, <strong><code>snippets</code></strong>, <strong><code>boards</code></strong>, <strong><code>analytics</code></strong>, <strong><code>audit</code></strong>, <strong><code>metadata</code></strong>, <strong><code>admin</code></strong>, <strong><code>workspaces</code></strong>, <strong><code>ml</code></strong> and <strong><code>duo</code></strong> (18 services, 244 resources, every one of them <code>SELECT</code>)</li>\n</ul>\n<p>The provider is generated from the introspection schema gitlab.com publishes, pinned by content hash and refreshed as a reviewed diff. It works against gitlab.com out of the box and routes to a self-managed instance from an environment variable. It is read-only by architecture: StackQL's GraphQL path is a query path, so there are no <code>INSERT</code>, <code>UPDATE</code>, <code>DELETE</code> or <code>EXEC</code> methods. What it is for is inventory, reporting and cross-provider joins over the GitLab control plane - the questions that otherwise need a script and three API clients.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"connect\">Connect<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#connect\" class=\"hash-link\" aria-label=\"Direct link to Connect\" title=\"Direct link to Connect\" translate=\"no\">​</a></h2>\n<p>Authentication is a personal access token with the <code>read_api</code> scope, read from <code>GITLAB_TOKEN</code> - the same variable the Terraform GitLab provider uses:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export GITLAB_TOKEN=glpat-...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql shell</span><br></div></code></pre></div></div>\n<p>Public projects and groups on gitlab.com are readable without a token (<code>--auth='{\"gitlab\": {\"type\": \"null_auth\"}}'</code>). For a self-managed instance, set <code>GITLAB_HOST=gitlab.example.com</code> and every query routes there; an explicit <code>WHERE host = ...</code> still wins for addressing another instance in the same session.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"three-scopes-one-shape\">Three scopes, one shape<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#three-scopes-one-shape\" class=\"hash-link\" aria-label=\"Direct link to Three scopes, one shape\" title=\"Direct link to Three scopes, one shape\" translate=\"no\">​</a></h2>\n<p>Resources follow the GraphQL schema. Instance-scoped resources take optional filters only (<code>projects</code>, <code>users</code>, <code>runners</code>); project-scoped resources are prefixed <code>project_</code> and take the project path; group-scoped resources are prefixed <code>group_</code> and take the group path. Columns are snake_case, and the nested identity objects GitLab attaches everywhere (<code>author</code>, <code>namespace</code>, <code>milestone</code>, <code>user</code>) are JSON columns one <code>json_extract</code> away.</p>\n<p>Every project in a group tree, with activity and visibility signals:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> full_path</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> visibility</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> archived</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       star_count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> forks_count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       open_issues_count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> open_merge_requests_count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       last_activity_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">groups</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_projects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'gitlab-org'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> include_subgroups </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">true</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> last_activity_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>GitLab connections are Relay-paginated with a hard page size of 100. StackQL walks the <code>pageInfo</code> cursor chain transparently, so the query above returns the whole tree, not the first page.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"filters-are-pushed-down\">Filters are pushed down<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#filters-are-pushed-down\" class=\"hash-link\" aria-label=\"Direct link to Filters are pushed down\" title=\"Direct link to Filters are pushed down\" translate=\"no\">​</a></h2>\n<p>Every scalar or enum argument a GitLab field accepts is a <code>WHERE</code> parameter rendered into the GraphQL query itself, so the API does the filtering. Open merge requests with their approval state and age:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> iid</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> title</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">author</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.username'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> author</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       draft</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> approved</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> approvals_left</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> detailed_merge_status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">ROUND</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">julianday</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'now'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">-</span><span class=\"token plain\"> julianday</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> age_days</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">merge_requests</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_merge_requests</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'gitlab-org/gitlab-runner'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'opened'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> age_days </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Cycle time over a window (<code>merged_after</code> is a filter, <code>merged_at</code> a column):</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> iid</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> title</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">ROUND</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">julianday</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">merged_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">-</span><span class=\"token plain\"> julianday</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">24</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> hours_to_merge</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">merge_requests</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_merge_requests</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'gitlab-org/gitlab-runner'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'merged'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> merged_after </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-09-01T00:00:00Z'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> merged_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"pipelines-and-runners\">Pipelines and runners<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#pipelines-and-runners\" class=\"hash-link\" aria-label=\"Direct link to Pipelines and runners\" title=\"Direct link to Pipelines and runners\" translate=\"no\">​</a></h2>\n<p>Pipeline outcomes for a project, and the same across every project in a group by joining the inventory to each project's pipelines (the engine issues one pipelines request per project):</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> pipelines</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">ROUND</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">AVG</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">duration</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">/</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">60.0</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> avg_minutes</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ci</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_pipelines</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'gitlab-org/gitlab-runner'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">GROUP</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_path</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> pipelines</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">SUM</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'FAILED'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> failed</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">ROUND</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">100.0</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">SUM</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'FAILED'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">/</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> failure_pct</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">groups</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_projects p</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ci</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_pipelines c </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_path</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-group'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">GROUP</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_path</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> failure_pct </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Runner fleet status for a group, with contact recency (the instance-wide runner listing is administrator-only on gitlab.com; the group and project listings are what a token can read):</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> description</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> runner_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> paused</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> contacted_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> upgrade_status</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ci</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_runners</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-group'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> contacted_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"vulnerability-reporting\">Vulnerability reporting<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#vulnerability-reporting\" class=\"hash-link\" aria-label=\"Direct link to Vulnerability reporting\" title=\"Direct link to Vulnerability reporting\" translate=\"no\">​</a></h2>\n<p>Findings across a group by severity and state, then the unresolved criticals with their owning project:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> severity</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> findings</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">security</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_vulnerabilities</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-group'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">GROUP</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> severity</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.full_path'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       title</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> report_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> detected_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> web_url</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">security</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_vulnerabilities</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-group'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> severity </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'CRITICAL'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'DETECTED'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> detected_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"membership-and-a-join-across-providers\">Membership, and a join across providers<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#membership-and-a-join-across-providers\" class=\"hash-link\" aria-label=\"Direct link to Membership, and a join across providers\" title=\"Direct link to Membership, and a join across providers\" translate=\"no\">​</a></h2>\n<p>Group membership with access level is a table:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">user</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.username'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> username</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">user</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">access_level</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.string_value'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> access_level</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       expires_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">groups</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_group_members</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-group'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>which makes the offboarding question a <code>LEFT JOIN</code> against the identity provider - GitLab members with no active Okta user, computed locally by the SQL engine after <code>registry pull okta</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">m</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">user</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.username'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> gitlab_username</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">m</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">user</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> gitlab_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       o</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> okta_status</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gitlab</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">groups</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_group_members m</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">LEFT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> okta</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">user</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">users o</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> lower</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">o</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">profile</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.login'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> lower</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">m</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">user</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.username'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">||</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'@example.com'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> o</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">subdomain </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-okta-org'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> m</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">full_path </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-group'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">o</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IS</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">NULL</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">OR</span><span class=\"token plain\"> o</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">!=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ACTIVE'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"how-it-is-built\">How it is built<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#how-it-is-built\" class=\"hash-link\" aria-label=\"Direct link to How it is built\" title=\"Direct link to How it is built\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\">The selection set for every resource is generated by one policy from the schema: all scalar and enum fields of the node type plus a fixed allowlist of nested identity objects. The query text and the response schema come from the same field list, so <code>DESCRIBE</code> always matches what the wire returns.</li>\n<li class=\"\">GitLab enforces a query complexity limit (200 anonymous, 250 authenticated on gitlab.com). Every generated query is scored against the live limit as a build gate; the one node type that exceeded it (merge requests, at 245) was trimmed by measured per-field cost, protecting the approval and merge-state columns, to 190.</li>\n<li class=\"\">A handful of resolvers time out on large result sets or answer anonymous callers with a server error. Those fields are excluded by a recorded policy entry rather than left to fail whole pages.</li>\n<li class=\"\"><code>all_services.csv</code> in the repository records which schema field backs every resource and method, and regeneration fails when a mapping moves, so resource names stay stable between provider versions.</li>\n</ul>\n<p>Premium-tier fields (issue weight, health status, epics) read back as null on the free tier, and the schema is gitlab.com's, so an older self-managed instance may reject fields it does not serve.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/new-gitlab-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull gitlab;</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://gitlab-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">gitlab-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-gitlab-provider-available",
            "title": "New GitLab Provider Available",
            "summary": "A new read-only StackQL provider for GitLab, generated from the GitLab GraphQL schema - projects, groups, members, issues, merge requests, pipelines, jobs, runners, releases, environments, packages, vulnerabilities and more as SQL, with transparent Relay pagination and pushed-down filters - available in the StackQL Provider Registry now.",
            "date_modified": "2026-09-26T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "gitlab",
                "provider",
                "graphql",
                "devops",
                "ci-cd",
                "security"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/anthropic-providers-update-september-2026",
            "content_html": "<p>We've released an update to the <a href=\"https://anthropic-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL <code>anthropic</code> provider</strong></a>, regenerated from the current Claude API specification. The provider now covers 12 services, 27 resources and 108 operations (up from 11, 26 and 103 in the <a class=\"\" href=\"https://stackql.io/blog/providers/anthropic-providers-update-july-2026\">July release</a>). Changes in this release:</p>\n<ul>\n<li class=\"\">A new <code>dreams</code> service</li>\n<li class=\"\">Files and skills moved to their generally available endpoints</li>\n<li class=\"\">Workspace-scoped queries on most operations through the <code>anthropic-workspace-id</code> parameter</li>\n</ul>\n<p>The <a href=\"https://anthropic-admin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>anthropic_admin</code></strong></a> provider (6 services, 11 resources, 27 operations) is unchanged in this release.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"dreams\">Dreams<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-september-2026#dreams\" class=\"hash-link\" aria-label=\"Direct link to Dreams\" title=\"Direct link to Dreams\" translate=\"no\">​</a></h2>\n<p>Dreams are asynchronous memory-consolidation jobs: a dream reads a memory store and a set of session transcripts and writes consolidated memories into an output store. The service is a research preview on the Anthropic side, so the endpoints return a 404 for keys that are not enrolled. The <code>dreams</code> resource maps the surface as follows:</p>\n<table><thead><tr><th>Method</th><th>SQL verb</th><th>Operation</th></tr></thead><tbody><tr><td><code>list</code>, <code>get</code></td><td><code>SELECT</code></td><td>list dreams (cursor-paginated, walked automatically), get a dream</td></tr><tr><td><code>create</code></td><td><code>INSERT</code></td><td>start a dream over one or more inputs</td></tr><tr><td><code>cancel</code>, <code>archive</code></td><td><code>EXEC</code></td><td>lifecycle operations</td></tr></tbody></table>\n<p>Dreams and their status as rows:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> JSON_ARRAY_LENGTH</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">inputs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> input_count</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> ended_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dreams</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dreams</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Starting one is an <code>INSERT</code>. <code>inputs</code> and <code>model</code> are JSON values that the provider passes through as structured request fields:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dreams</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dreams </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">inputs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> model</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> instructions</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[{\"type\": \"memory_store\", \"memory_store_id\": \"memstore_01...\"}]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"id\": \"claude-opus-5\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Consolidate project decisions and open questions.'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"files-and-skills-on-ga-endpoints\">Files and skills on GA endpoints<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-september-2026#files-and-skills-on-ga-endpoints\" class=\"hash-link\" aria-label=\"Direct link to Files and skills on GA endpoints\" title=\"Direct link to Files and skills on GA endpoints\" translate=\"no\">​</a></h2>\n<p>The Files API and the Skills API are generally available. The <code>files</code> and <code>skills</code> services now call the GA endpoints (<code>/v1/files</code>, <code>/v1/skills</code>) instead of the beta ones, and no longer send an <code>anthropic-beta</code> header. Resources, methods and SQL verbs are unchanged, so existing queries keep working. One behavioural change: the files list is now cursor-paginated and the provider walks the pages automatically.</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> filename</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> mime_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> size_bytes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">files</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">files</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> display_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.type'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> source</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> latest_version_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> updated_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">skills</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">skills</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> updated_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Skill versions are a separate resource keyed by the skill:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> skill_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> description</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">skills</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">versions</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> skill_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'xlsx'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Uploading a file or creating a skill version is a multipart request, which SQL cannot express; those two methods remain documented as <code>EXEC</code> operations, and the rest of each resource (list, get, delete) is plain SQL.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"workspace-scoped-queries\">Workspace-scoped queries<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-september-2026#workspace-scoped-queries\" class=\"hash-link\" aria-label=\"Direct link to Workspace-scoped queries\" title=\"Direct link to Workspace-scoped queries\" translate=\"no\">​</a></h2>\n<p>The Claude API added an optional <code>anthropic-workspace-id</code> header to most operations, for credentials that can act on more than one workspace. The provider exposes it as an optional parameter on around 110 operations. It is a hyphenated name, so it is double-quoted in SQL:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> display_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">\"anthropic-workspace-id\"</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'wrkspc_01CZkZaBF1tNoB5wlCeusgy'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>The workspace ids are the ones the <code>anthropic_admin</code> provider lists:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> archived_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>A key that belongs to a single workspace can omit the parameter. The API validates the value: a malformed id is rejected with a 400.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"under-the-hood\">Under the hood<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-september-2026#under-the-hood\" class=\"hash-link\" aria-label=\"Direct link to Under the hood\" title=\"Direct link to Under the hood\" translate=\"no\">​</a></h2>\n<p>The provider is generated from the OpenAPI specification that Anthropic now bundles with its SDKs. That specification grew from 126 to 244 operations since July, and the SDKs' configured endpoint count from 116 to 201. Beyond the changes above, the growth is the beta twins of the GA files and skills endpoints and the Admin API, which the specification now models but which needs an org-scoped admin key and belongs to the <code>anthropic_admin</code> provider. Every operation in the specification is either mapped or listed in a documented exclusion list, and the build fails when the two do not add up.</p>\n<p>Every documented example query runs in the provider's test suite, and each generated docs page now shows the date it was last regenerated.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-september-2026#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>Unchanged. The two providers use different key types, which are disjoint by design:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"># anthropic - workspace-scoped Claude API key</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export ANTHROPIC_API_KEY=sk-ant-api...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"># anthropic_admin - org-scoped Admin API key (created by org admins)</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export ANTHROPIC_ADMIN_KEY=sk-ant-admin...</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-september-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the latest provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull anthropic;</span><br></div></code></pre></div></div>\n<p>Provider docs, including required parameters and example queries for every resource, are at <a href=\"https://anthropic-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">anthropic-provider.stackql.io</a> and <a href=\"https://anthropic-admin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">anthropic-admin-provider.stackql.io</a>. Visit us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a> and let us know how you're using it.</p>",
            "url": "https://stackql.io/blog/providers/anthropic-providers-update-september-2026",
            "title": "Anthropic Providers Update - September 2026",
            "summary": "Update to the StackQL anthropic provider regenerated from the current Claude API spec - a new dreams service for memory consolidation jobs, files and skills on their GA endpoints, and workspace-scoped queries through the anthropic-workspace-id parameter. The anthropic_admin provider is unchanged.",
            "date_modified": "2026-09-15T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "anthropic",
                "claude",
                "provider",
                "agents"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/updated-datadog-provider-available",
            "content_html": "<p>We've released an updated <a href=\"https://datadog-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL Datadog provider</strong></a> covering the Datadog v1 and v2 REST APIs together: <strong>18 services</strong>, <strong>597 resources</strong> and <strong>1658 operations</strong>, up from 16 services and 575 operations in the previous release.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"whats-new\">What's new<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#whats-new\" class=\"hash-link\" aria-label=\"Direct link to What's new\" title=\"Direct link to What's new\" translate=\"no\">​</a></h2>\n<p>The previous provider was built from the v2 API alone. Datadog's most-used resources - monitors, dashboards, synthetics, SLOs, hosts, log indexes and pipelines - only exist in the v1 API, so this release merges the two specs into one provider. The v2 surface has also grown considerably since the last build. In summary:</p>\n<ul>\n<li class=\"\"><strong>The v1 API</strong>: monitors (list, search, create, replace, validate, delete), dashboards and dashboard lists, synthetics tests (API, browser and mobile), locations, private locations and global variables, SLOs and SLO corrections, hosts, host totals and host tags, notebooks, log indexes and pipelines, the Azure, PagerDuty, Slack and webhook integrations, and usage metering.</li>\n<li class=\"\"><strong>New v2 surfaces</strong>: cases and case projects, on-call schedules, escalation policies and paging, status pages, incident configuration and responders, feature flags, deployment gates, LLM Observability (projects, datasets, experiments, prompts, annotation queues), Fleet Automation, cloud cost budgets, commitments and tag pipelines, security findings automation, static analysis and SCA, agentless scanning, SIEM historical detections, RUM replay and product analytics, reference tables, org groups and personal access tokens, among others.</li>\n<li class=\"\"><strong>Site from the environment</strong>: the provider addresses <code>https://api.{site}</code>, and <code>site</code> is resolved from <code>DD_SITE</code> when it is set (<code>datadoghq.eu</code>, <code>us5.datadoghq.com</code>, <code>ap2.datadoghq.com</code>, ...), the same convention as the Datadog Agent and API clients. Queries carry no site clause; a <code>WHERE site = '...'</code> still wins for one statement.</li>\n<li class=\"\"><strong>Pagination and pushdown</strong>: cursor-paginated lists (audit events, container images, spans, RUM events, CI events, security signals and findings) are traversed transparently, and a SQL <code>LIMIT</code> is sent as the API's page-size parameter.</li>\n<li class=\"\"><strong>snake_case surface</strong>: columns and <code>WHERE</code> / <code>INSERT</code> keys are snake_case throughout; the few camelCase wire names are aliased.</li>\n<li class=\"\"><strong>Terraform-aligned authentication</strong>: <code>DD_API_KEY</code> and <code>DD_APP_KEY</code>, unchanged.</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"service-highlights\">Service highlights<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#service-highlights\" class=\"hash-link\" aria-label=\"Direct link to Service highlights\" title=\"Direct link to Service highlights\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Service</th><th style=\"text-align:right\">Resources</th><th style=\"text-align:right\">Operations</th><th>What it covers</th></tr></thead><tbody><tr><td><code>service_management</code></td><td style=\"text-align:right\">82</td><td style=\"text-align:right\">281</td><td>incidents, cases, on-call, SLOs, downtimes, events, status pages, change management, error tracking</td></tr><tr><td><code>security</code></td><td style=\"text-align:right\">93</td><td style=\"text-align:right\">247</td><td>security monitoring rules, signals and suppressions, findings and automation, vulnerabilities, CSM, agentless scanning, static analysis, SIEM historical detections</td></tr><tr><td><code>organization</code></td><td style=\"text-align:right\">85</td><td style=\"text-align:right\">207</td><td>users, roles, permissions, API and application keys, service accounts, teams, org settings, SAML, audit logs, usage</td></tr><tr><td><code>integrations</code></td><td style=\"text-align:right\">59</td><td style=\"text-align:right\">192</td><td>AWS, GCP, Azure, OCI, Jira, ServiceNow, Slack, Microsoft Teams, Google Chat, PagerDuty, Opsgenie, webhooks, Cloudflare, Confluent, Fastly, Okta, reference tables</td></tr><tr><td><code>monitoring</code></td><td style=\"text-align:right\">39</td><td style=\"text-align:right\">100</td><td>monitors, synthetics, monitor policies, notification rules, service checks</td></tr><tr><td><code>digital_experience</code></td><td style=\"text-align:right\">38</td><td style=\"text-align:right\">98</td><td>RUM applications, events, metrics and retention, replay, product analytics, sourcemaps</td></tr><tr><td><code>llm_observability</code></td><td style=\"text-align:right\">37</td><td style=\"text-align:right\">83</td><td>projects, datasets, experiments, prompts, annotation queues, evaluators, Model Lab</td></tr><tr><td><code>cloud_costs</code></td><td style=\"text-align:right\">37</td><td style=\"text-align:right\">73</td><td>budgets, AWS / Azure / GCP / OCI cost configs, commitments, tag pipelines, cost attribution</td></tr><tr><td><code>software_delivery</code></td><td style=\"text-align:right\">20</td><td style=\"text-align:right\">71</td><td>CI pipelines and tests, DORA, deployment gates, workflows, feature flags, code coverage</td></tr><tr><td><code>dashboards</code></td><td style=\"text-align:right\">16</td><td style=\"text-align:right\">61</td><td>dashboards, dashboard lists, powerpacks, notebooks, widgets, annotations, scheduled reports</td></tr><tr><td><code>logs</code></td><td style=\"text-align:right\">14</td><td style=\"text-align:right\">55</td><td>indexes, pipelines, archives, custom destinations, log metrics, restriction queries, observability pipelines</td></tr><tr><td><code>infrastructure</code></td><td style=\"text-align:right\">28</td><td style=\"text-align:right\">47</td><td>hosts and host tags, containers, processes, network devices, app builder, storage management</td></tr><tr><td><code>metrics</code></td><td style=\"text-align:right\">18</td><td style=\"text-align:right\">42</td><td>metrics and metadata, tag configurations, timeseries and scalar queries, datasets, DDSQL</td></tr><tr><td><code>apm</code></td><td style=\"text-align:right\">10</td><td style=\"text-align:right\">27</td><td>retention filters, spans metrics, scorecards, traces</td></tr><tr><td><code>remote_config</code></td><td style=\"text-align:right\">6</td><td style=\"text-align:right\">27</td><td>CSM Threats agent rules and policies, WAF rules and policies</td></tr><tr><td><code>actions</code></td><td style=\"text-align:right\">6</td><td style=\"text-align:right\">23</td><td>action connections, datastores, execution policies</td></tr><tr><td><code>fleet</code></td><td style=\"text-align:right\">6</td><td style=\"text-align:right\">16</td><td>agents, deployments, schedules, tracers</td></tr><tr><td><code>catalog</code></td><td style=\"text-align:right\">3</td><td style=\"text-align:right\">8</td><td>software catalog entities, kinds, relations</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>Export an API key and an application key; set <code>DD_SITE</code> if your organization is not on <code>datadoghq.com</code>:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export DD_API_KEY=...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export DD_APP_KEY=...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export DD_SITE=datadoghq.eu     # optional, defaults to datadoghq.com</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"monitors\">Monitors<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#monitors\" class=\"hash-link\" aria-label=\"Direct link to Monitors\" title=\"Direct link to Monitors\" translate=\"no\">​</a></h2>\n<p>Every monitor with its state:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> overall_state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> tags</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitors</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Only alerting monitors, using the API's own filter:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> overall_state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitors</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> group_states </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'alert'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Monitor search, with the same syntax as the Manage Monitors page:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitor_search_results</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> query </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'type:metric status:alert'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"dashboards-slos-and-synthetics\">Dashboards, SLOs and synthetics<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#dashboards-slos-and-synthetics\" class=\"hash-link\" aria-label=\"Direct link to Dashboards, SLOs and synthetics\" title=\"Direct link to Dashboards, SLOs and synthetics\" translate=\"no\">​</a></h2>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> title</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> layout_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> author_handle</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> modified_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dashboards</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dashboards</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> target_threshold</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> timeframe</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_management</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">slos</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> public_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> locations</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">synthetics_tests</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"users-roles-and-keys\">Users, roles and keys<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#users-roles-and-keys\" class=\"hash-link\" aria-label=\"Direct link to Users, roles and keys\" title=\"Direct link to Users, roles and keys\" translate=\"no\">​</a></h2>\n<p>v2 resources return the JSON<!-- -->:API<!-- --> row shape - <code>id</code>, <code>type</code>, <code>attributes</code>, <code>relationships</code> - so attributes are one <code>json_extract</code> away. A user audit:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.email'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> email</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.status'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.disabled'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> disabled</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.created_at'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> created_at</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">users</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>API keys by age, the input to a rotation policy:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.created_at'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.last4'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> last4</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">api_keys</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"infrastructure-and-logs\">Infrastructure and logs<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#infrastructure-and-logs\" class=\"hash-link\" aria-label=\"Direct link to Infrastructure and logs\" title=\"Direct link to Infrastructure and logs\" translate=\"no\">​</a></h2>\n<p>Hosts reporting to Datadog, and the log indexes with their retention:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> host_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> up</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> is_muted</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> apps</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> last_reported_time</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">infrastructure</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">hosts</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> num_retention_days</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> daily_limit</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">logs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">indexes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"audit-log\">Audit log<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#audit-log\" class=\"hash-link\" aria-label=\"Direct link to Audit log\" title=\"Direct link to Audit log\" translate=\"no\">​</a></h2>\n<p>The audit event list is cursor-paginated and takes the time window as a query parameter:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.timestamp'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">timestamp</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.attributes.evt.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> event</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">attributes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.attributes.usr.email'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> actor</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">audit_logs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">\"filter[from]\"</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'now-1d'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"security-monitoring-rules\">Security monitoring rules<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#security-monitoring-rules\" class=\"hash-link\" aria-label=\"Direct link to Security monitoring rules\" title=\"Direct link to Security monitoring rules\" translate=\"no\">​</a></h2>\n<p>Which detection rules are enabled, and who last changed them:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> is_enabled</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> is_default</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> updated_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> update_author_id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">security</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring_rules</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> is_default </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">false</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"provisioning\">Provisioning<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#provisioning\" class=\"hash-link\" aria-label=\"Direct link to Provisioning\" title=\"Direct link to Provisioning\" translate=\"no\">​</a></h2>\n<p>Mutations use the same SQL grammar. v1 resources take their fields as columns; v2 resources take the JSON<!-- -->:API<!-- --> <code>data</code> document. A monitor end to end - validate the definition, create it, replace it (the v1 monitor API updates with <code>PUT</code>), delete it:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitors</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">validate_monitor</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@type</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'metric alert'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@query</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'avg(last_5m):avg:system.cpu.user{env:prod} by {host} &gt; 90'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@name</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'High CPU on prod hosts'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitors </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> query</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> message</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> tags</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'High CPU on prod hosts'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'metric alert'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'avg(last_5m):avg:system.cpu.user{env:prod} by {host} &gt; 90'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'CPU above 90% on {{host.name}} @slack-ops'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[\"team:web\", \"managed-by:stackql\"]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">REPLACE</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitors</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'High CPU on prod hosts'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'metric alert'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">    query </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'avg(last_5m):avg:system.cpu.user{env:prod} by {host} &gt; 95'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> monitor_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">12345678</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitoring</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">monitors</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> monitor_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">12345678</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>A downtime for a release window, and a role:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_management</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">downtimes </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">data</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"type\": \"downtime\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">         \"attributes\": {\"message\": \"release window\", \"scope\": \"env:prod\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                        \"monitor_identifier\": {\"monitor_tags\": [\"team:web\"]},</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                        \"schedule\": {\"start\": \"2026-09-01T22:00:00Z\", \"end\": \"2026-09-01T23:00:00Z\"}}}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">roles </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">data</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"type\": \"roles\", \"attributes\": {\"name\": \"read-only-auditors\"}}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UPDATE</span><span class=\"token plain\"> datadog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">roles</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">data</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"id\": \"&lt;role-id&gt;\", \"type\": \"roles\", \"attributes\": {\"name\": \"auditors\"}}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> role_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;role-id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/updated-datadog-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull datadog;</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://datadog-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">datadog-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/updated-datadog-provider-available",
            "title": "Datadog Provider - August 2026",
            "summary": "The StackQL Datadog provider now covers the v1 and v2 REST APIs together - monitors, dashboards, synthetics, SLOs, downtimes, incidents, cases, on-call, logs configuration, metrics, security monitoring, cloud cost, users, roles and keys, integrations, RUM, LLM Observability and fleet automation.",
            "date_modified": "2026-08-26T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "datadog",
                "provider",
                "observability",
                "monitors",
                "security",
                "finops"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-kubernetes-provider-available",
            "content_html": "<p>We've rebuilt the StackQL Kubernetes provider from the ground up:</p>\n<ul>\n<li class=\"\"><a href=\"https://k8s-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>k8s</code></strong></a> - every built-in control plane API group in a pinned Kubernetes minor release (currently 1.36): <strong><code>core</code></strong>, <strong><code>apps</code></strong>, <strong><code>batch</code></strong>, <strong><code>autoscaling</code></strong>, <strong><code>networking</code></strong>, <strong><code>storage</code></strong>, <strong><code>rbac</code></strong>, <strong><code>policy</code></strong>, <strong><code>apiextensions</code></strong>, <strong><code>admissionregistration</code></strong>, <strong><code>certificates</code></strong>, <strong><code>coordination</code></strong>, <strong><code>discovery</code></strong>, <strong><code>events</code></strong>, <strong><code>flowcontrol</code></strong>, <strong><code>node</code></strong>, <strong><code>scheduling</code></strong>, <strong><code>authentication</code></strong>, <strong><code>authorization</code></strong> and <strong><code>apiregistration</code></strong> (20 services, 152 resources, 573 operations)</li>\n</ul>\n<p>The provider is generated from the per-group specs published in the Kubernetes repository, so the same provider works against kind, EKS, GKE, AKS, OpenShift or bare metal. Subresources (<code>status</code>, <code>scale</code>, <code>log</code>, <code>eviction</code>, <code>binding</code>, <code>approval</code>) are first-class resources, list pagination is traversed transparently, and <code>LIMIT</code> and label/field selectors are pushed down to the API server.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"connect-with-kubectl-proxy\">Connect with kubectl proxy<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#connect-with-kubectl-proxy\" class=\"hash-link\" aria-label=\"Direct link to Connect with kubectl proxy\" title=\"Direct link to Connect with kubectl proxy\" translate=\"no\">​</a></h2>\n<p>The provider defaults to <code>null_auth</code>, designed for the <code>kubectl proxy</code> workflow - the proxy authenticates with your kubeconfig (including the EKS, GKE and AKS credential plugins), and StackQL connects to the local port with no configuration:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">kubectl proxy --port=8001</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export KUBE_HOST='localhost:8001'</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export KUBE_PROTOCOL='http'</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql shell</span><br></div></code></pre></div></div>\n<p><code>KUBE_HOST</code> and <code>KUBE_PROTOCOL</code> resolve the provider's server variables from the environment, so queries carry no connection clauses at all (an explicit <code>WHERE protocol = ... AND cluster_addr = ...</code> still wins when you want to address another cluster in the same session).</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-cluster-is-a-database\">The cluster is a database<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#the-cluster-is-a-database\" class=\"hash-link\" aria-label=\"Direct link to The cluster is a database\" title=\"Direct link to The cluster is a database\" translate=\"no\">​</a></h2>\n<p>Row columns are the top-level fields of each object (<code>metadata</code>, <code>spec</code>, <code>status</code>, <code>data</code>); nested values are one <code>json_extract</code> away. The pod estate with phase and node placement:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.namespace'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> namespace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.phase'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> phase</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">spec</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.nodeName'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> node</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pods_all_namespaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Pods that are not running - a one-line cluster health check:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.namespace'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> namespace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.phase'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> phase</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pods_all_namespaces</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.phase'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">NOT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Running'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Succeeded'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Desired versus ready replicas for every deployment in a namespace:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">spec</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.replicas'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> want</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.readyReplicas'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> ready</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">apps</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> namespace </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'default'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Node inventory with kubelet version and schedulability:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.nodeInfo.kubeletVersion'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> kubelet</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.nodeInfo.osImage'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> os</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">spec</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.unschedulable'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> cordoned</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">nodes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"rbac-audit-and-warning-events\">RBAC audit and warning events<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#rbac-audit-and-warning-events\" class=\"hash-link\" aria-label=\"Direct link to RBAC audit and warning events\" title=\"Direct link to RBAC audit and warning events\" translate=\"no\">​</a></h2>\n<p>Column names are snake_case at the SQL surface (<code>role_ref</code>, <code>string_data</code>, <code>api_version</code>), mapped to the API's camelCase on the wire - the same convention as the <code>aws</code> and <code>azure</code> providers. Who is bound to <code>cluster-admin</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> binding</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       subjects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">rbac</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cluster_role_bindings</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">role_ref</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'cluster-admin'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Recent warning events across the cluster, usually the first place to look when something is off:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.namespace'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> namespace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       reason</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       message</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">events_all_namespaces</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Warning'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"server-side-filtering-and-pagination\">Server-side filtering and pagination<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#server-side-filtering-and-pagination\" class=\"hash-link\" aria-label=\"Direct link to Server-side filtering and pagination\" title=\"Direct link to Server-side filtering and pagination\" translate=\"no\">​</a></h2>\n<p>Label and field selectors are ordinary <code>WHERE</code> parameters, pushed to the API server so the filtering happens where the data lives:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pods_all_namespaces</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> label_selector </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'k8s-app=kube-dns'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p><code>SELECT ... LIMIT n</code> lands on the wire as the Kubernetes <code>limit</code> parameter, and the <code>continue</code> token chain is followed transparently - a <code>SELECT</code> returns all rows even when the API server caps page sizes.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"provision-mutate-and-tear-down\">Provision, mutate and tear down<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#provision-mutate-and-tear-down\" class=\"hash-link\" aria-label=\"Direct link to Provision, mutate and tear down\" title=\"Direct link to Provision, mutate and tear down\" translate=\"no\">​</a></h2>\n<p>Mutations are the usual SQL verbs - <code>INSERT</code> creates an object, <code>UPDATE</code> applies a merge patch, <code>REPLACE</code> is a full update and <code>DELETE</code> removes it. Body columns are the native wire property names:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- create</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">config_maps</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">namespace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">data</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'default'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"name\": \"app-config\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"greeting\": \"hello\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- partial update (merge patch)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UPDATE</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">config_maps</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">data</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"mood\": \"optimistic\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> namespace </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'default'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'app-config'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- remove it</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">config_maps</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> namespace </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'default'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'app-config'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Subresources are resources, so scaling a deployment is an <code>UPDATE</code> on its <code>scale</code> subresource:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UPDATE</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">apps</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">deployments_scale</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> spec </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"replicas\": 3}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> namespace </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'default'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'web'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>and point-in-time pod logs are a queryable column:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> log </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">core</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">pods_log</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> namespace </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'default'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'web-6d5f9c7b8-x2x9k'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Streaming operations (<code>exec</code>, <code>attach</code>, <code>port-forward</code>, <code>watch</code>) use protocol upgrades and are out of scope for the generated provider.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"who-am-i-and-can-i\">Who am I, and can I<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#who-am-i-and-can-i\" class=\"hash-link\" aria-label=\"Direct link to Who am I, and can I\" title=\"Direct link to Who am I, and can I\" translate=\"no\">​</a></h2>\n<p>The authentication and authorization review kinds are mapped too. The zero-parameter self review is a plain <code>SELECT</code>; the parameterized access reviews are an <code>INSERT</code> whose verdict comes back with <code>RETURNING</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- who am I</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.userInfo.username'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> username</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">authentication</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">self_subject_reviews</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- can I delete pods in prod</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> k8s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">authorization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">self_subject_access_reviews</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">spec</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"resourceAttributes\": {\"verb\": \"delete\", \"resource\": \"pods\", \"namespace\": \"prod\"}}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"what-changed-from-the-original-provider\">What changed from the original provider<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#what-changed-from-the-original-provider\" class=\"hash-link\" aria-label=\"Direct link to What changed from the original provider\" title=\"Direct link to What changed from the original provider\" translate=\"no\">​</a></h2>\n<p>This is a major update to the previous published <code>k8s</code> provider (<code>v23.03.00121</code>):</p>\n<ul>\n<li class=\"\">Coverage expands from 5 services to all 20 built-in API groups, one flat service per group (<code>networking.k8s.io</code> is <code>k8s.networking</code>)</li>\n<li class=\"\">Resource names are plural snake_case (<code>k8s.core.pods</code>, <code>k8s.apps.stateful_sets</code>), consistent with the <code>aws</code>, <code>google</code> and <code>databricks</code> providers</li>\n<li class=\"\">Request body columns are the native wire property names (<code>metadata</code>, <code>spec</code>, <code>data</code>), not <code>data__</code> prefixed; snake_case spellings of camelCase wire names are accepted everywhere</li>\n<li class=\"\"><code>SELECT</code> and <code>DESCRIBE</code> columns present as snake_case aliases of the camelCase wire properties</li>\n<li class=\"\">Namespaced list-all operations are separate <code>_all_namespaces</code> resources, and subresources are separate resources (<code>deployments_scale</code>, <code>pods_log</code>)</li>\n</ul>\n<p>The previous provider version remains in the registry for pinning if you need it.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"direct-authentication\">Direct authentication<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#direct-authentication\" class=\"hash-link\" aria-label=\"Direct link to Direct authentication\" title=\"Direct link to Direct authentication\" translate=\"no\">​</a></h2>\n<p>To skip the proxy and hit the API server directly, supply a bearer token via the <code>KUBE_TOKEN</code> environment variable (the same variable the Terraform Kubernetes provider uses), along with the cluster CA bundle:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export KUBE_TOKEN=$(kubectl create token my-serviceaccount)</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">AUTH='{ \"k8s\": { \"type\": \"bearer\", \"credentialsenvvar\": \"KUBE_TOKEN\" }}'</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql shell --auth=\"${AUTH}\" --tls.CABundle cluster-ca.pem</span><br></div></code></pre></div></div>\n<p>For managed clusters, a token from the platform credential helper (<code>aws eks get-token</code>, <code>gke-gcloud-auth-plugin</code>, <code>kubelogin</code>) works the same way; those tokens are short lived, so prefer the proxy vector for long sessions.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/new-kubernetes-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull k8s;</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://k8s-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">k8s-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-kubernetes-provider-available",
            "title": "New Kubernetes Provider Available",
            "summary": "A ground-up rebuild of the StackQL k8s provider - every built-in Kubernetes control plane API group as SQL, with subresources, server-side filtering, transparent pagination, and a full write lifecycle, pointable at any conformant cluster - available in the StackQL Provider Registry now.",
            "date_modified": "2026-08-25T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "kubernetes",
                "k8s",
                "provider",
                "cloud-native",
                "rbac",
                "audit"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/aws-provider-update-august-2026",
            "content_html": "<p>We've released an update to the <a href=\"https://aws-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL AWS provider</strong></a>, regenerated from the latest AWS service definitions. Significant additions include:</p>\n<ul>\n<li class=\"\">9 new services</li>\n<li class=\"\">Over 200 new resources</li>\n<li class=\"\">Over 500 new operations</li>\n<li class=\"\">Full support for S3 object level CRUD operations</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-services\">New Services<a href=\"https://stackql.io/blog/providers/aws-provider-update-august-2026#new-services\" class=\"hash-link\" aria-label=\"Direct link to New Services\" title=\"Direct link to New Services\" translate=\"no\">​</a></h2>\n<p>Nine services are new in this release:</p>\n<table><thead><tr><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>resiliencehubv2</code></td><td>The next generation of AWS Resilience Hub - assess and improve the resilience of critical applications at scale, the largest new service in this release</td></tr><tr><td><code>lambda_microvms</code></td><td>Create, manage and operate AWS Lambda MicroVMs and their associated MicroVM image environments</td></tr><tr><td><code>lambda_core</code></td><td>Shared infrastructure resources for Lambda, including network connectors that give MicroVMs access to resources in your VPC</td></tr><tr><td><code>agent_registry_control</code></td><td>Managed catalog for publishing and discovering MCP servers, agents and agent skills - control plane for registries and records</td></tr><tr><td><code>agent_registry</code></td><td>Data-plane discovery of approved records published to an Agent Registry</td></tr><tr><td><code>account_access</code></td><td>Account access manager - manage applications and entitlements that grant IAM Identity Center principals access to IAM roles across accounts</td></tr><tr><td><code>supportauthz</code></td><td>Support authorization - cryptographically signed support permits controlling which actions AWS support operators can perform on your resources</td></tr><tr><td><code>pricing_plan_manager</code></td><td>Flat-rate pricing subscriptions - create, approve and cancel subscriptions and associate resources with them</td></tr><tr><td><code>sagemakerjobruntime</code></td><td>Agentic RFT runtime - trajectory and transition data for reinforcement fine-tuning jobs</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"expanded-coverage-in-existing-services\">Expanded Coverage in Existing Services<a href=\"https://stackql.io/blog/providers/aws-provider-update-august-2026#expanded-coverage-in-existing-services\" class=\"hash-link\" aria-label=\"Direct link to Expanded Coverage in Existing Services\" title=\"Direct link to Expanded Coverage in Existing Services\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><code>ec2</code> - the largest operation count increase in this release: account-level VPC encryption controls (<code>account_vpc_encryption_controls</code>), application status checks, capacity reservation cancellation quotes, and a major IPAM build-out covering internet registry associations, route origin authorizations, route protection findings and discovered routes</li>\n<li class=\"\"><code>acm</code> - public ACME issuance: <code>acme_accounts</code>, <code>acme_endpoints</code>, <code>acme_domain_validations</code> and external account bindings, plus per-domain certificate validation status</li>\n<li class=\"\"><code>quicksight</code> - agentic BI: <code>agents</code>, <code>spaces</code>, <code>knowledge_bases</code>, approval policies, DLP settings and OAuth client applications</li>\n<li class=\"\"><code>bedrock_agentcore_control</code> - <code>datasets</code>, dataset versions and examples, evaluation <code>harness_endpoints</code> and versions, capacity providers and gateway rate limits</li>\n<li class=\"\"><code>wellarchitected</code> - AI-assisted reviews: agent profiles, goals, contexts and <code>agent_recommendations</code> with per-item detail</li>\n<li class=\"\"><code>odb</code> (Oracle Database@AWS) - autonomous database coverage: <code>autonomous_databases</code>, backups, clones, peers, wallet details, Exadata VM clusters and Exascale storage vaults</li>\n<li class=\"\"><code>iotsitewise</code> - industrial data pipelines: <code>pipelines</code>, pipeline executions, enrichment jobs, dataset export jobs, ad hoc <code>queries</code> and search</li>\n<li class=\"\"><code>glue</code> - business catalog additions: <code>assets</code>, <code>asset_types</code>, <code>glossaries</code> and <code>glossary_terms</code></li>\n<li class=\"\"><code>drs</code> - orchestrated disaster recovery: <code>recovery_plans</code>, plan steps and execution tracking</li>\n<li class=\"\"><code>billing</code> - <code>credits</code>, credit allocation histories, billing preferences and enterprise support charge summaries</li>\n<li class=\"\"><code>appconfig</code> - feature experiments: <code>experiment_definitions</code>, runs and run events</li>\n<li class=\"\"><code>healthlake</code> - FHIR data transformation profiles and jobs</li>\n</ul>\n<p>Another 180+ services picked up incremental operations and resources, including <code>connect</code>, <code>securityagent</code>, <code>cleanrooms</code>, <code>socialmessaging</code>, <code>devops_agent</code> and <code>artifact</code>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"s3-object-content-lifecycles\">S3 Object Content Lifecycles<a href=\"https://stackql.io/blog/providers/aws-provider-update-august-2026#s3-object-content-lifecycles\" class=\"hash-link\" aria-label=\"Direct link to S3 Object Content Lifecycles\" title=\"Direct link to S3 Object Content Lifecycles\" translate=\"no\">​</a></h2>\n<p>The headline feature in this release: <code>aws.s3.objects</code> now supports the full content lifecycle for text objects. The object body is projected as a single <code>contents</code> column, so you can read, write, overwrite and delete object contents with standard SQL verbs - no SDK code, no presigned URLs.</p>\n<p>The motivating case is reading a Terraform state file straight out of S3:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> contents </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">objects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ap-southeast-2'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> bucket </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-bucket'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">key</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'env/terraform.tfstate'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Writing works through the same resource. <code>INSERT</code> creates an object, and since S3 <code>PutObject</code> is create-or-overwrite, <code>REPLACE</code> updates it in place:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- create an object</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">objects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> bucket</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">key</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> contents</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ap-southeast-2'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-bucket'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'app/config.json'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"feature_flags\": {\"dark_mode\": true}, \"log_level\": \"info\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- overwrite its contents</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">REPLACE</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">objects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> contents </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"feature_flags\": {\"dark_mode\": false}, \"log_level\": \"warn\"}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ap-southeast-2'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> bucket </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-bucket'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">key</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'app/config.json'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- delete it</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">objects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ap-southeast-2'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> bucket </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-bucket'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">key</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'app/config.json'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Listing is unchanged - a <code>WHERE</code> clause with just <code>bucket</code> and <code>region</code> routes to the list operation, adding <code>key</code> routes to the object read:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">key</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> size</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> last_modified </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">objects</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ap-southeast-2'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> bucket </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-bucket'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Content round-trips byte-for-byte, including multi-MB objects and objects uploaded via multipart upload. Text objects only for now - binary content is not supported and base64 support is deferred.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/aws-provider-update-august-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the latest provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull aws;</span><br></div></code></pre></div></div>\n<p>Authenticate with <code>AWS_ACCESS_KEY_ID</code> and <code>AWS_SECRET_ACCESS_KEY</code> environment variables, then explore:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> vpc_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> cidr_block</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> is_default</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> aws</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vpcs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Provider docs, including required parameters and example queries for every resource, are at <a href=\"https://aws-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">aws-provider.stackql.io</a>. Visit us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a> and let us know how you're using it.</p>",
            "url": "https://stackql.io/blog/providers/aws-provider-update-august-2026",
            "title": "AWS Provider Update - August 2026",
            "summary": "Update to the StackQL AWS provider adding nine new services including Resilience Hub V2, Lambda MicroVMs, Agent Registry and Support AuthZ, expanded coverage across EC2, ACM, QuickSight, Bedrock AgentCore and more, plus full S3 object content lifecycles - read, write, replace and delete object contents with SQL.",
            "date_modified": "2026-08-20T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "aws",
                "amazon web services",
                "provider",
                "s3"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-clickhouse-provider-available",
            "content_html": "<p>We've released a new StackQL provider for ClickHouse Cloud:</p>\n<ul>\n<li class=\"\"><a href=\"https://clickhouse-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>clickhouse</code></strong></a> - the ClickHouse Cloud control plane (<code>api.clickhouse.cloud</code>): organizations, services (lifecycle, scaling, settings, passwords, private endpoints), API keys, members and invitations, organization roles, backups and backup configuration, usage cost and quotas, activities, ClickPipes, the ClickStack surface (dashboards, alerts, sources, webhooks, saved searches), user-defined functions and Managed Postgres (10 services, 44 resources, 139 operations)</li>\n</ul>\n<p>The provider covers the Cloud management API only. The ClickHouse server HTTP interface - SQL against a service endpoint and the <code>system.*</code> tables - is a separate surface with separate authentication and is reserved as a future sibling provider, <code>clickhouse_server</code>. What takes two Terraform providers today (the Cloud infrastructure provider and the DBops provider) will be two namespaces in one StackQL session.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"organization-scope-from-the-environment\">Organization scope from the environment<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#organization-scope-from-the-environment\" class=\"hash-link\" aria-label=\"Direct link to Organization scope from the environment\" title=\"Direct link to Organization scope from the environment\" translate=\"no\">​</a></h2>\n<p>Every resource except <code>organizations</code> is scoped to an organization. The organization ID is a server variable that StackQL resolves from <code>CLICKHOUSE_ORG_ID</code> when it is set, so queries carry no organization clause:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> provider</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>A <code>WHERE organization_id = '...'</code> still takes precedence when you need to address another organization in the same session. Columns and <code>WHERE</code>/<code>INSERT</code> keys are snake_case (<code>created_at</code>, <code>ip_access_list</code>, <code>service_id</code>); the provider maps them to the API's camelCase on the wire.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"estate-inventory\">Estate inventory<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#estate-inventory\" class=\"hash-link\" aria-label=\"Direct link to Estate inventory\" title=\"Direct link to Estate inventory\" translate=\"no\">​</a></h2>\n<p>State, footprint and scaling configuration for every service in one result set:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> provider</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       num_replicas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       min_replica_memory_gb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> max_replica_memory_gb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">current_scaling</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.effectiveAutoscalingMode'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> scaling_mode</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       idle_scaling</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> idle_timeout_minutes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> clickhouse_version</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> provider</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Organization quotas report usage against limits, which is the quickest answer to \"how much room is left\":</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> quota_code</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> quota_limit</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">usage</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organizations</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">quotas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"usage-cost-by-day-and-entity\">Usage cost by day and entity<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#usage-cost-by-day-and-entity\" class=\"hash-link\" aria-label=\"Direct link to Usage cost by day and entity\" title=\"Direct link to Usage cost by day and entity\" translate=\"no\">​</a></h2>\n<p>The usage cost endpoint returns one row per entity per day in ClickHouse Credits, with the compute, storage, backup and data-transfer components in a <code>metrics</code> object:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">date</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> entity_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> entity_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> total_chc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metrics</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.computeCHC'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> compute_chc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metrics</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.storageCHC'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> storage_chc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metrics</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.backupCHC'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> backup_chc</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organizations</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">usage_costs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> from_date </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-08-01'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> to_date </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-08-31'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">date</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> entity_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Joined to the services list, the same data answers which stopped or idle services still carried cost in the window:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token function\" style=\"color:rgb(130, 170, 255)\">SUM</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">total_chc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> chc_in_window</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services s</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organizations</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">usage_costs c</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">from_date </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-08-01'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">to_date </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-08-31'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">state </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">IN</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'stopped'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'idle'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">GROUP</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> chc_in_window </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"scaffolding\">Scaffolding<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#scaffolding\" class=\"hash-link\" aria-label=\"Direct link to Scaffolding\" title=\"Direct link to Scaffolding\" translate=\"no\">​</a></h2>\n<p>Provisioning is the usual SQL verbs. A service is an <code>INSERT</code>; the state command (<code>start</code>, <code>stop</code>, <code>awake</code>) is an <code>EXEC</code>; access-list changes are an <code>UPDATE</code> whose <code>PATCH</code> body takes <code>add</code>/<code>remove</code> arrays, passed through as written:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> provider</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> min_replica_memory_gb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> max_replica_memory_gb</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> num_replicas</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> idle_scaling</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> idle_timeout_minutes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'analytics-dev'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'aws'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">8</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">8</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">true</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">15</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UPDATE</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> ip_access_list </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"add\": [{\"source\": \"203.0.113.0/24\", \"description\": \"office\"}],</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                       \"remove\": [{\"source\": \"0.0.0.0/0\", \"description\": \"Anywhere\"}]}'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-uuid&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">update_state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@serviceId</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-uuid&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@command</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'stop'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Organizations that use Custom Roles assign API key roles by ID, so the role lookup and the key creation are one statement, and the generated secret comes back with <code>RETURNING</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">keys</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">keys</span><span class=\"token plain\"> </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> assigned_role_ids</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'finops-reader'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[\"'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">||</span><span class=\"token plain\"> id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">||</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'\"]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'enabled'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">roles</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">roles</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Organization API Reader'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">result</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.key.id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">          json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">result</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.keyId'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">     </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> key_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">          json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">result</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.keySecret'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> key_secret</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Backup configuration is queryable across the estate, and settable per service:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> b</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">backup_period_in_hours</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> b</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">backup_retention_period_in_hours</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> b</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">backup_start_time</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services s</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">backups</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">backup_configurations b</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> b</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> s</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"observability-as-code\">Observability as code<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#observability-as-code\" class=\"hash-link\" aria-label=\"Direct link to Observability as code\" title=\"Direct link to Observability as code\" translate=\"no\">​</a></h2>\n<p>ClickStack dashboards, alerts, sources, webhooks and saved searches are resources with full CRUD, so a dashboard definition lives in version control and is applied with an <code>INSERT</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">clickstack</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dashboards </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">service_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> tiles</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> tags</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-uuid&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'Service Overview'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[{\"name\": \"Error rate\", \"x\": 0, \"y\": 0, \"w\": 6, \"h\": 3,</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">          \"config\": {\"displayType\": \"line\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">                     \"select\": [{\"aggFn\": \"count\", \"where\": \"SeverityText = ''ERROR''\"}]}}]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">       </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[\"production\"]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>and audited with a <code>SELECT</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> d</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> json_array_length</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">d</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">tiles</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> tiles</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> d</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">tags</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">clickstack</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dashboards d</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> d</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;service-uuid&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Alerts and webhooks follow the same pattern (<code>clickhouse.clickstack.alerts</code>, <code>clickhouse.clickstack.webhooks</code>), and the organization activity log is a table for audit questions:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> actor_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> actor_details</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organizations</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">activities</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-data-platform-estate-in-one-query\">The data platform estate in one query<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#the-data-platform-estate-in-one-query\" class=\"hash-link\" aria-label=\"Direct link to The data platform estate in one query\" title=\"Direct link to The data platform estate in one query\" translate=\"no\">​</a></h2>\n<p>Cross-provider joins are ordinary SQL, so ClickHouse Cloud services sit alongside Snowflake warehouses and Databricks clusters in one inventory:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'clickhouse'</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> platform</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> region</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> clickhouse</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UNION</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ALL</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'snowflake'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">NULL</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> snowflake</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">warehouses</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">warehouses</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UNION</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ALL</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'databricks'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> cluster_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token boolean\" style=\"color:rgb(255, 88, 116)\">NULL</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">compute</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">clusters</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> deployment_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>Create an API key pair in the ClickHouse Cloud console (Settings -&gt; API Keys) with the role the queries need - <code>Organization API Reader</code> / <code>Service API Reader</code> for inventory and cost queries, <code>Service API Admin</code> for provisioning - and export three variables:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export CLICKHOUSE_CLOUD_API_KEY=...      # Key ID</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export CLICKHOUSE_CLOUD_API_SECRET=...   # Key Secret</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export CLICKHOUSE_ORG_ID=...             # organization ID</span><br></div></code></pre></div></div>\n<p>The API allows a fixed window of requests per key (documented as 10 per 10 seconds); a <code>429</code> is the signal to pace wide scans.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/new-clickhouse-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull clickhouse</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://clickhouse-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">clickhouse-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-clickhouse-provider-available",
            "title": "New ClickHouse Cloud Provider Available",
            "summary": "A new StackQL provider for the ClickHouse Cloud API - query and provision organizations, services, API keys, members and roles, backups, ClickPipes, ClickStack dashboards and alerts, UDFs and Managed Postgres, and report usage cost by day and entity, using SQL - available in the StackQL Provider Registry now.",
            "date_modified": "2026-08-17T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "clickhouse",
                "clickhouse-cloud",
                "provider",
                "finops",
                "clickstack",
                "observability"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/google-provider-update-august-2026",
            "content_html": "<p>We've released an update to the <a href=\"https://google-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL Google provider</strong></a>, regenerated from the latest Google API discovery documents. The <code>google</code> provider now covers <strong>187 services, 2,183 resources and over 9,100 operations</strong> - up from 179 services, 1,966 resources and 8,423 operations in the previous release. The companion providers in the google family (<code>googleworkspace</code>, <code>googleadmin</code> and <code>firebase</code>) were regenerated in the same pass.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-services\">New Services<a href=\"https://stackql.io/blog/providers/google-provider-update-august-2026#new-services\" class=\"hash-link\" aria-label=\"Direct link to New Services\" title=\"Direct link to New Services\" translate=\"no\">​</a></h2>\n<p>Eleven services are new in this release:</p>\n<table><thead><tr><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>agentregistry</code></td><td>Centralized catalog to store, discover and govern MCP servers, tools and AI agents within Google Cloud</td></tr><tr><td><code>agentidentity</code></td><td>Identities and authorization for AI agents - auth providers, authorizations and access summaries</td></tr><tr><td><code>agentidentitycredentials</code></td><td>Short-lived credential issuance for agent identities</td></tr><tr><td><code>ces</code></td><td>Gemini Enterprise for Customer Experience - agents, apps, deployments, conversations, guardrails and tool schemas</td></tr><tr><td><code>hypercomputecluster</code></td><td>Cluster Director - deploy, manage and monitor AI/ML and HPC clusters</td></tr><tr><td><code>databasecenter</code></td><td>Organization-wide database fleet health monitoring across projects and folders</td></tr><tr><td><code>metastore</code></td><td>Dataproc Metastore - services, backups, federations, metadata imports and migrations</td></tr><tr><td><code>threatintelligence</code></td><td>Google Threat Intelligence - alerts, findings, documents and configurations</td></tr><tr><td><code>cloudnumberregistry</code></td><td>IP address management - realms, registry books, custom and discovered ranges</td></tr><tr><td><code>developerknowledge</code></td><td>Programmatic access to Google developer documentation</td></tr><tr><td><code>health</code></td><td>Google Health API (v4) - health and fitness metrics, data points, devices and subscriptions</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"expanded-coverage-in-existing-services\">Expanded Coverage in Existing Services<a href=\"https://stackql.io/blog/providers/google-provider-update-august-2026#expanded-coverage-in-existing-services\" class=\"hash-link\" aria-label=\"Direct link to Expanded Coverage in Existing Services\" title=\"Direct link to Expanded Coverage in Existing Services\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><code>compute</code> - the largest expansion in this release, 73 new resources: capacity planning (<code>future_reservations</code>, <code>reservation_slots</code>, <code>reservation_blocks</code> and <code>reservation_sub_blocks</code> versions), <code>instant_snapshot_groups</code> and regional snapshot resources, <code>cross_site_networks</code> and <code>wire_groups</code>, <code>organization_security_policies</code>, <code>network_firewall_policies</code>, <code>rollouts</code> and <code>rollout_plans</code>, plus per-resource IAM policy resources across addresses, firewalls, health checks, routes, target proxies and more</li>\n<li class=\"\"><code>aiplatform</code> (Vertex AI) - agent engine build-out: <code>agents</code>, <code>memory_banks</code>, <code>sandbox_environments</code> (with templates and snapshots), <code>online_evaluators</code>, <code>evaluation_metrics</code>, <code>responses</code> and semantic governance policy resources</li>\n<li class=\"\"><code>oracledatabase</code> - GoldenGate integration: deployments, deployment environments/types/versions, connections and connection assignments, plus autonomous database refreshable clones</li>\n<li class=\"\"><code>dataplex</code> - universal catalog governance: <code>data_domains</code>, <code>data_products</code>, <code>data_assets</code>, <code>metadata_feeds</code> and <code>change_requests</code></li>\n<li class=\"\"><code>redis</code> - token-based auth: <code>token_auth_users</code>, <code>auth_tokens</code> and <code>acl_policies</code></li>\n<li class=\"\"><code>networksecurity</code> - <code>dns_threat_detectors</code> and Secure Access Connect realms and attachments</li>\n<li class=\"\"><code>cloudkms</code> - <code>single_tenant_hsm_instances</code>, key deletion <code>proposals</code> and <code>retired_resources</code></li>\n<li class=\"\"><code>observability</code> - log analytics <code>buckets</code>, <code>datasets</code>, <code>links</code>, <code>views</code> and scope settings</li>\n</ul>\n<p>Another 50+ services picked up incremental resources and operations, including <code>discoveryengine</code>, <code>contactcenterinsights</code>, <code>netapp</code>, <code>artifactregistry</code>, <code>assuredworkloads</code> and <code>dataproc</code>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"removed-services\">Removed Services<a href=\"https://stackql.io/blog/providers/google-provider-update-august-2026#removed-services\" class=\"hash-link\" aria-label=\"Direct link to Removed Services\" title=\"Direct link to Removed Services\" translate=\"no\">​</a></h2>\n<p>Google has retired several APIs since the last release, and they are removed from the provider accordingly:</p>\n<ul>\n<li class=\"\"><code>datalabeling</code> - AI Platform Data Labeling was shut down</li>\n<li class=\"\"><code>integrations</code> - Application Integration no longer publishes a discovery document</li>\n<li class=\"\"><code>lifesciences</code> - Cloud Life Sciences was shut down</li>\n<li class=\"\"><code>dataplex</code> Explore resources (<code>content</code>, <code>environments</code>, <code>sessions</code>) were removed upstream</li>\n</ul>\n<p>The duplicate <code>*_aggregated</code> helper resources in <code>compute</code> were also consolidated - cross-zone queries are served by the primary resources, so a zone-less <code>SELECT</code> fans out across all zones:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> machineType</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> zone</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> google</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">compute</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-project'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"example-open-firewall-audit\">Example: Open Firewall Audit<a href=\"https://stackql.io/blog/providers/google-provider-update-august-2026#example-open-firewall-audit\" class=\"hash-link\" aria-label=\"Direct link to Example: Open Firewall Audit\" title=\"Direct link to Example: Open Firewall Audit\" translate=\"no\">​</a></h2>\n<p>Ingress rules open to the entire internet, and what they allow:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  direction</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  sourceRanges</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  allowed</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> google</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">compute</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">firewalls</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> project </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-project'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> sourceRanges </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">LIKE</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'%0.0.0.0/0%'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/google-provider-update-august-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the latest provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull google;</span><br></div></code></pre></div></div>\n<p>Authenticate with a service account key in the <code>GOOGLE_CREDENTIALS</code> environment variable (or interactively via <code>gcloud auth login</code>), then explore:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">config</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.name'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> api</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> google</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">serviceusage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">services</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> parent </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-project'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> parentType </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'projects'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> filter </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'state:ENABLED'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Provider docs, including getting-started queries for each provider in the family, are at <a href=\"https://google-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">google-provider.stackql.io</a>, <a href=\"https://googleworkspace-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">googleworkspace-provider.stackql.io</a>, <a href=\"https://googleadmin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">googleadmin-provider.stackql.io</a> and <a href=\"https://firebase-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">firebase-provider.stackql.io</a>. Visit us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a> and let us know how you're using it.</p>",
            "url": "https://stackql.io/blog/providers/google-provider-update-august-2026",
            "title": "Google Provider Update - August 2026",
            "summary": "Update to the StackQL Google provider adding eleven new services including Agent Registry, Agent Identity, Cluster Director, Database Center and Google Threat Intelligence, a major expansion of Compute Engine and Vertex AI coverage, and removal of APIs retired by Google.",
            "date_modified": "2026-08-06T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "google cloud",
                "gcp",
                "provider",
                "vertex-ai",
                "compute-engine"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-gemini-provider-available",
            "content_html": "<p>We've released a new StackQL provider for the Google Gemini API:</p>\n<ul>\n<li class=\"\"><a href=\"https://gemini-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>gemini</code></strong></a> - the Generative Language API surface (<code>generativelanguage.googleapis.com</code>): inference (content generation, embeddings, token counting, batches) plus the API's own management surface - models, tuned models and permissions, files, cached contents, corpora, file search stores and long-running operations (10 services, 32 resources, 75 operations)</li>\n</ul>\n<p>Everything reachable with a <code>GEMINI_API_KEY</code> ships in one provider. Authentication is handled automatically, <code>LIMIT</code> is pushed down to the wire, and paginated lists are walked for you.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"inference-as-a-result-set\">Inference as a result set<a href=\"https://stackql.io/blog/providers/new-gemini-provider-available#inference-as-a-result-set\" class=\"hash-link\" aria-label=\"Direct link to Inference as a result set\" title=\"Direct link to Inference as a result set\" translate=\"no\">​</a></h2>\n<p>Asking Gemini a question is a <code>SELECT</code>. The reply comes back as a row, with the text in the <code>candidates</code> array and the token spend in <code>usageMetadata</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">candidates</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$[0].content.parts[0].text'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> reply</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">usageMetadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.totalTokenCount'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> total_tokens</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">content</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> modelsId </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'gemini-2.5-flash'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> contents </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[{\"parts\":[{\"text\":\"Name the four Galilean moons of Jupiter, comma separated.\"}]}]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Token counting works the same way via <code>gemini.models.token_counts</code> - free of charge, so a prompt can be priced before it is sent. Embeddings come back as rows too:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">embedding</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.values[0]'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> first_dimension</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">embeddings</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> modelsId </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'gemini-embedding-001'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> content </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"parts\":[{\"text\":\"stackql lets you query cloud APIs with SQL\"}]}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"which-model-can-do-what\">Which model can do what<a href=\"https://stackql.io/blog/providers/new-gemini-provider-available#which-model-can-do-what\" class=\"hash-link\" aria-label=\"Direct link to Which model can do what\" title=\"Direct link to Which model can do what\" translate=\"no\">​</a></h2>\n<p>The provider ships a convenience view that fans each model's supported generation methods and limits out into flat columns:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> display_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> input_token_limit</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> thinking</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> supports_generate_content</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vw_model_capabilities</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>One row per model with token limits, default sampling parameters, and boolean flags for content generation, token counting, embedding, batching and caching support - useful for picking a model programmatically instead of reading release notes.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-management-surface-as-sql\">The management surface as SQL<a href=\"https://stackql.io/blog/providers/new-gemini-provider-available#the-management-surface-as-sql\" class=\"hash-link\" aria-label=\"Direct link to The management surface as SQL\" title=\"Direct link to The management surface as SQL\" translate=\"no\">​</a></h2>\n<p>Files, cached contents, corpora, file search stores and tuned models are managed with the corresponding SQL verbs:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- create</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">corpora</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">corpora </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">displayName</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-knowledge-base'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">RETURNING</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> displayName</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- read</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> displayName</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> mimeType</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> sizeBytes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">files</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">files</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- update</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">UPDATE</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cached_contents</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cached_contents</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SET</span><span class=\"token plain\"> ttl </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'600s'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> cachedContentsId </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-cache-id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- delete</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cached_contents</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cached_contents</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> cachedContentsId </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-cache-id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Batches are long-running operations and follow the async job pattern: <code>SELECT</code> polls them, <code>EXEC</code> runs the lifecycle ops:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> done</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">metadata</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.state'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">batches</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">batches</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">EXEC</span><span class=\"token plain\"> gemini</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">batches</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">batches</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cancel </span><span class=\"token variable\" style=\"color:rgb(214, 222, 235)\">@batchesId</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-batch-id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Tuned model permissions are a full CRUD surface as well, so sharing a tuned model is an <code>INSERT</code> and auditing who can see it is a <code>SELECT</code>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"one-credential-one-boundary\">One credential, one boundary<a href=\"https://stackql.io/blog/providers/new-gemini-provider-available#one-credential-one-boundary\" class=\"hash-link\" aria-label=\"Direct link to One credential, one boundary\" title=\"Direct link to One credential, one boundary\" translate=\"no\">​</a></h2>\n<p>The provider covers the Gemini API surface under a <code>GEMINI_API_KEY</code>. Billing, quota, API key management and IAM are GCP control-plane services (<code>cloudbilling</code>, <code>serviceusage</code>, <code>apikeys</code>, <code>iam</code>) that authenticate with OAuth/ADC - they live in the <a href=\"https://google.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>google</code></strong></a> provider. StackQL does cross-provider joins, so the two compose; worked examples are at <a href=\"https://gemini-provider.stackql.io/google-control-plane\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">gemini-provider.stackql.io/google-control-plane</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/new-gemini-provider-available#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>Set a single environment variable:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export GEMINI_API_KEY=...</span><br></div></code></pre></div></div>\n<p>Keys are created in <a href=\"https://aistudio.google.com/apikey\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Google AI Studio</a>. The key is only ever sent as a request header (<code>x-goog-api-key</code>) - never in the URL query string.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/new-gemini-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull gemini</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://gemini-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">gemini-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-gemini-provider-available",
            "title": "New Google Gemini Provider Available",
            "summary": "A new StackQL provider for the Google Gemini API - run Gemini inference, count tokens, generate embeddings, and manage models, tuned models, files, cached contents, corpora, file search stores and batches using SQL - available in the StackQL Provider Registry now.",
            "date_modified": "2026-08-03T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "gemini",
                "google",
                "generative language",
                "provider",
                "inference",
                "embeddings",
                "tuned models",
                "file search"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/databricks-providers-update-july-2026",
            "content_html": "<p>We've released an update to the StackQL Databricks providers, regenerated from the latest Databricks platform APIs (SDK v0.123.0):</p>\n<ul>\n<li class=\"\"><a href=\"https://databricks-account-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>databricks_account</code></strong></a> - account-level operations: <strong>9 services, 79 resources</strong></li>\n<li class=\"\"><a href=\"https://databricks-workspace-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>databricks_workspace</code></strong></a> - workspace-level operations: <strong>29 services, 313 resources</strong></li>\n</ul>\n<p>Includes <strong>392 resources and over 1,200 operations</strong> across both providers, including four new services and more than 70 new or restructured resources.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-services\">New Services<a href=\"https://stackql.io/blog/providers/databricks-providers-update-july-2026#new-services\" class=\"hash-link\" aria-label=\"Direct link to New Services\" title=\"Direct link to New Services\" translate=\"no\">​</a></h2>\n<table><thead><tr><th>Provider</th><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>databricks_account</code></td><td><code>disasterrecovery</code></td><td>Manage disaster recovery failover groups and stable URLs for workspace failover across regions</td></tr><tr><td><code>databricks_workspace</code></td><td><code>aisearch</code></td><td>Databricks AI Search endpoints and indexes, including data plane operations to query, scan, sync and upsert index data</td></tr><tr><td><code>databricks_workspace</code></td><td><code>bundledeployments</code></td><td>Databricks Asset Bundle deployments - deployments, versions, operations and deployed resources</td></tr><tr><td><code>databricks_workspace</code></td><td><code>supervisoragents</code></td><td>Agent Bricks supervisor agents - agents, tools, examples and permissions</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"expanded-coverage-in-existing-services\">Expanded Coverage in Existing Services<a href=\"https://stackql.io/blog/providers/databricks-providers-update-july-2026#expanded-coverage-in-existing-services\" class=\"hash-link\" aria-label=\"Direct link to Expanded Coverage in Existing Services\" title=\"Direct link to Expanded Coverage in Existing Services\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><code>postgres</code> (Lakebase) - the largest expansion in this release, now 24 resources covering projects, branches, databases, roles, endpoints, tables, synced tables, catalogs, snapshots, compute instances, change data feed configs and statuses, forward ETL, replication group previews and recovery branch previews</li>\n<li class=\"\"><code>iamv2</code> (account and workspace) - the restructured identity APIs: full lifecycle for <code>users</code>, <code>groups</code>, <code>service_principals</code>, <code>direct_group_members</code>, <code>workspace_access_details</code>, <code>workspace_assignment_details</code>, <code>external_users</code> and <code>transitive_parent_groups</code>, plus account access identity rules and attribute control entries</li>\n<li class=\"\"><code>catalog</code> - Unity Catalog AI Gateway services (<code>ai_gateway_model_services</code>, <code>ai_gateway_mcp_services</code>, <code>ai_gateway_agent_services</code>, <code>ai_gateway_model_provider_services</code>), privilege assignments (direct and effective), UC secrets and temporary volume credentials</li>\n<li class=\"\"><code>dashboards</code> - AI/BI Genie evaluation runs and results</li>\n<li class=\"\"><code>apps</code> - app spaces, app space operations and app thumbnails</li>\n<li class=\"\"><code>compute</code> - default base environments for serverless environments and library management</li>\n<li class=\"\"><code>vectorsearch</code> - vector search index management and endpoint permissions</li>\n<li class=\"\"><code>ml</code> - feature engineering streams</li>\n<li class=\"\"><code>billing</code> (account) - usage policies</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"sql-statement-execution-improvements\">SQL Statement Execution Improvements<a href=\"https://stackql.io/blog/providers/databricks-providers-update-july-2026#sql-statement-execution-improvements\" class=\"hash-link\" aria-label=\"Direct link to SQL Statement Execution Improvements\" title=\"Direct link to SQL Statement Execution Improvements\" translate=\"no\">​</a></h2>\n<p>StackQL lets you traverse the Databricks control plane and data plane in the same query surface. This release cleans up the verb mappings for <code>databricks_workspace.sql.statement_execution</code>, so the full statement lifecycle maps naturally to SQL:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">/* submit a statement to a SQL warehouse */</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">sql</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">statement_execution </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  statement</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  warehouse_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  wait_timeout</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  deployment_name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'SELECT * FROM samples.nyctaxi.trips LIMIT 100'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;warehouse_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'0s'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment_name&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">/* poll for status and results */</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> manifest</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> result</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">sql</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">statement_execution</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> statement_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;statement_id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> deployment_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment_name&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">/* cancel a running statement */</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">sql</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">statement_execution</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> statement_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;statement_id&gt;'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> deployment_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment_name&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>The <code>cancel</code> operation is now mapped to the <code>DELETE</code> verb (previously <code>INSERT</code>), and <code>sql.query_history</code> now projects one row per query with server-side pagination wired in, so large result sets append across pages automatically.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"built-in-views\">Built-in Views<a href=\"https://stackql.io/blog/providers/databricks-providers-update-july-2026#built-in-views\" class=\"hash-link\" aria-label=\"Direct link to Built-in Views\" title=\"Direct link to Built-in Views\" translate=\"no\">​</a></h2>\n<p>Both providers ship with curated views that flatten common multi-step queries into a single <code>SELECT</code>, and this release adds views for Lakebase alongside the existing IAM, billing, provisioning, networking and settings views - 49 views in total. For example:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">iam</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vw_account_user_roles</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;account_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">key</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">settings</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vw_all_settings</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> deployment_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;deployment_name&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/databricks-providers-update-july-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the latest providers from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull databricks_account</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull databricks_workspace</span><br></div></code></pre></div></div>\n<p>Authenticate with the same service principal environment variables used by Terraform and the Databricks CLI (<code>DATABRICKS_ACCOUNT_ID</code>, <code>DATABRICKS_CLIENT_ID</code>, <code>DATABRICKS_CLIENT_SECRET</code>), then explore:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> workspace_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> workspace_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> workspace_status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> deployment_name</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">provisioning</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;account_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://databricks-account-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">databricks-account-provider.stackql.io</a> and <a href=\"https://databricks-workspace-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">databricks-workspace-provider.stackql.io</a>. Visit us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a> and let us know how you're using it.</p>",
            "url": "https://stackql.io/blog/providers/databricks-providers-update-july-2026",
            "title": "Databricks Providers Update - July 2026",
            "summary": "Update to the StackQL Databricks providers adding four new services including disaster recovery, AI Search, bundle deployments and supervisor agents, a major expansion of Lakebase (Postgres) and identity coverage, and improved SQL statement execution semantics including DELETE to cancel running statements.",
            "date_modified": "2026-07-31T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "databricks",
                "provider",
                "lakebase",
                "unity-catalog",
                "agent-bricks"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/openai-providers-update-july-2026",
            "content_html": "<p>We've released an update to the StackQL providers for the OpenAI platform:</p>\n<ul>\n<li class=\"\"><a href=\"https://openai-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>openai</code></strong></a> - the platform API surface available to standard API keys: models, files, fine-tuning, batches, vector stores, assistants, evals, conversations, uploads, containers, and skills (11 services, 26 resources, 97 operations)</li>\n<li class=\"\"><a href=\"https://openai-admin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>openai_admin</code></strong></a> <strong>[new]</strong> - the organization and administration API surface: usage and cost reporting, projects, organization users and invites, groups and roles, admin API keys, audit logs, and certificates (10 services, 29 resources, 81 operations)</li>\n</ul>\n<p>Both providers expose a SQL-first surface: authentication is handled automatically, push down support using the <code>LIMIT</code> clause and built in pagination handling.</p>\n<p>The <code>openai</code> provider is a ground-up rebuild of the previous provider, generated from the vendor's published OpenAPI specification. Some resources have been renamed and the organization/admin surface has moved to <code>openai_admin</code> - the previous provider version remains available in the registry for pinning, and the full disposition is documented at <a href=\"https://openai-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">openai-provider.stackql.io</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"async-jobs-as-sql\">Async jobs as SQL<a href=\"https://stackql.io/blog/providers/openai-providers-update-july-2026#async-jobs-as-sql\" class=\"hash-link\" aria-label=\"Direct link to Async jobs as SQL\" title=\"Direct link to Async jobs as SQL\" translate=\"no\">​</a></h2>\n<p>Fine-tuning jobs, batches, vector store file batches and uploads follow the same pattern: <code>INSERT</code> creates the job, <code>SELECT</code> polls it, <code>EXEC</code> cancels it. For example:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> model</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> fine_tuned_model</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> trained_tokens</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">fine_tuning</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">jobs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> endpoint</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> request_counts</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">batches</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">batches</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">LIMIT</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">10</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Vector stores are a full CRUD surface with file membership:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> usage_bytes</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> file_counts</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vector_stores</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vector_stores</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Inference endpoints (chat/completions, responses, embeddings, images, audio) are deliberately out of scope - the provider covers the control plane; use the vendor SDKs for invocation.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-admin-provider---your-openai-org-as-data\">The admin provider - your OpenAI org as data<a href=\"https://stackql.io/blog/providers/openai-providers-update-july-2026#the-admin-provider---your-openai-org-as-data\" class=\"hash-link\" aria-label=\"Direct link to The admin provider - your OpenAI org as data\" title=\"Direct link to The admin provider - your OpenAI org as data\" translate=\"no\">​</a></h2>\n<p>The <code>openai_admin</code> provider presents the organization management surface as SQL.</p>\n<p>Usage and cost are bucketed time series: one row per time bucket, with the per-group breakdown in the <code>results</code> JSON column, fanned out with <code>JSON_EACH</code>. Token usage by project and model over a 30-day window:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.project_id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">    </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.model'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">         </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> model</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  strftime</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'%Y-%m-%d'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">start_time</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'unixepoch'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> usage_date</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.input_tokens'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> input_tokens</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.output_tokens'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> output_tokens</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">usage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">completions u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> json_each</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">results</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> r</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">start_time </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1781481600</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">bucket_width </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'1d'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">limit</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">31</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> u</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_by </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'project_id'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> usage_date</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Daily spend in USD by project:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  strftime</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'%Y-%m-%d'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">start_time</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'unixepoch'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> cost_date</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.project_id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\">   </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> project_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  json_extract</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">r</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">value</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.amount.value'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> amount_usd</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">costs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">costs c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> json_each</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">results</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> r</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">start_time </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1781481600</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">limit</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">180</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> c</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">group_by </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'project_id'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> cost_date</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> amount_usd </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DESC</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Usage is broken out per capability - completions, embeddings, moderations, images, audio, vector stores and code interpreter sessions - and can be grouped by <code>project_id</code>, <code>api_key_id</code> or <code>model</code>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"governance-and-auditing\">Governance and auditing<a href=\"https://stackql.io/blog/providers/openai-providers-update-july-2026#governance-and-auditing\" class=\"hash-link\" aria-label=\"Direct link to Governance and auditing\" title=\"Direct link to Governance and auditing\" translate=\"no\">​</a></h2>\n<p>Projects and their child resources (users, service accounts, API keys, rate limits) are queryable and writable:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> project</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> sa</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">name </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> service_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> sa</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">role</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects p</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">JOIN</span><span class=\"token plain\"> openai_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">projects</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">service_accounts sa </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ON</span><span class=\"token plain\"> sa</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">project_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> p</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'active'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Admin key hygiene and audit logs work the same way:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> last_used_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> owner</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">admin_api_keys</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">admin_api_keys</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">ORDER</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">BY</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> effective_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> actor</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> project</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> openai_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">audit_logs</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">audit_logs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">\"effective_at[gt]\"</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1750000000</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">\"event_types[]\"</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'project.created'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Because it's all SQL, you can join usage to projects, materialize daily cost snapshots into a database, or point a BI tool at StackQL's Postgres wire protocol server and build an org-wide OpenAI spend dashboard without writing a line of integration code.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/openai-providers-update-july-2026#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>The two providers use different key types, which are disjoint by design:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"># openai - standard API key</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export OPENAI_API_KEY=sk-...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"># openai_admin - org-scoped admin key (created by organization owners)</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export OPENAI_ADMIN_KEY=sk-admin-...</span><br></div></code></pre></div></div>\n<p>Admin keys are available to organization accounts only and can be provisioned by organization owners in the <a href=\"https://platform.openai.com/settings/organization/admin-keys\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">platform console</a>. A standard key cannot call the admin endpoints and vice versa.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/openai-providers-update-july-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the providers from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull openai</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull openai_admin</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://openai-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">openai-provider.stackql.io</a> and <a href=\"https://openai-admin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">openai-admin-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/openai-providers-update-july-2026",
            "title": "OpenAI Providers Update - July 2026",
            "summary": "Latest release of the StackQL OpenAI providers - openai for the platform API (models, files, fine-tuning, batches, vector stores, evals and more) and openai_admin for organization management, usage and cost reporting, projects, RBAC and audit logs - are available in the StackQL Provider Registry now.",
            "date_modified": "2026-07-20T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "openai",
                "provider",
                "admin api",
                "usage reporting",
                "cost reporting",
                "finops",
                "projects",
                "audit logs",
                "enterprise"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/azure-provider-update-july-2026",
            "content_html": "<p>We've released a major update to the StackQL Azure provider family:</p>\n<ul>\n<li class=\"\"><a href=\"https://azure-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>azure</code></strong></a> - core Microsoft Azure services: <strong>268 services, 3,473 resources and 13,559 operations</strong> (up from 202 services, a 33% increase in service coverage)</li>\n<li class=\"\"><a href=\"https://azure-extras-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>azure_extras</code></strong></a> - domain-specific and specialized Microsoft services (44 services)</li>\n<li class=\"\"><a href=\"https://azure-isv-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>azure_isv</code></strong></a> - Azure Native ISV and partner services: Databricks, Datadog, Confluent, Elastic, MongoDB Atlas, Oracle Database@Azure and more (27 services)</li>\n<li class=\"\"><a href=\"https://azure-stack-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>azure_stack</code></strong></a> - the Azure Stack / Azure Local family (4 services)</li>\n</ul>\n<p>Service, resource and method names are consistently snake_cased, service titles carry the official Azure product names, and related services have been consolidated - <code>SHOW SERVICES IN azure</code> now reads like the Azure portal, not like an SDK package index.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"control-plane-and-data-plane-in-one-provider\">Control plane and data plane in one provider<a href=\"https://stackql.io/blog/providers/azure-provider-update-july-2026#control-plane-and-data-plane-in-one-provider\" class=\"hash-link\" aria-label=\"Direct link to Control plane and data plane in one provider\" title=\"Direct link to Control plane and data plane in one provider\" translate=\"no\">​</a></h2>\n<p>Most Azure tooling stops at ARM. This provider exposes Azure <strong>data plane</strong> APIs alongside the ARM control plane as first-class services, so the same SQL surface that manages a resource can work with what's inside it.</p>\n<p>Enumerate Key Vaults in a subscription (control plane), then list the secrets in one of them (data plane):</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> location</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> azure</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">key_vault</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vaults</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> subscription_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;subscription_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> content_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> attributes</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> azure</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">key_vault_secrets</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">secrets</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> vault_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-vault'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>The same pattern extends across the platform - Storage blobs, queues and file shares, Cosmos DB tables, App Configuration key-values, Event Grid publishing, Container Registry repositories, Azure Monitor log queries and ingestion, Azure Maps, Azure AI Search documents, Service Fabric cluster operations, Batch jobs, and the Synapse and Purview workspace APIs are all present as data plane services next to their management planes.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-ai-surface\">The AI surface<a href=\"https://stackql.io/blog/providers/azure-provider-update-july-2026#the-ai-surface\" class=\"hash-link\" aria-label=\"Direct link to The AI surface\" title=\"Direct link to The AI surface\" translate=\"no\">​</a></h2>\n<p>The biggest expansion in this release is AI - 20 services covering Azure AI Foundry and the Azure AI services portfolio:</p>\n<ul>\n<li class=\"\"><strong>Azure AI Foundry</strong>: <code>ai_projects</code>, <code>ai_agents</code>, <code>ai_inference</code>, <code>ai_evaluation</code></li>\n<li class=\"\"><strong>Language</strong>: <code>ai_language</code> (conversational language understanding, question answering and their authoring surfaces in a single service), <code>ai_text_analytics</code>, <code>ai_translation_text</code>, <code>ai_translation_document</code></li>\n<li class=\"\"><strong>Vision</strong>: <code>ai_vision_image_analysis</code>, <code>ai_vision_face</code></li>\n<li class=\"\"><strong>Documents</strong>: <code>ai_document_intelligence</code>, <code>ai_form_recognizer</code></li>\n<li class=\"\"><strong>Speech</strong>: <code>ai_transcription</code>, <code>ai_voice_live</code></li>\n<li class=\"\"><strong>Safety and content</strong>: <code>ai_content_safety</code>, <code>ai_content_understanding</code></li>\n<li class=\"\">Plus <code>ai_anomaly_detector</code>, <code>ai_personalizer</code>, <code>ai_discovery</code> and the <code>cognitive_services</code> management plane</li>\n</ul>\n<p>Inventory every Azure AI services account in a subscription, with kind and provisioning state:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> kind</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> location</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> provisioning_state</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> azure</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cognitive_services</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">accounts</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> subscription_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;subscription_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>ARM's nested <code>properties</code> envelope is flattened at query time, so attributes like <code>provisioning_state</code> are ordinary columns - no JSON extraction needed for the common case.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"more-new-and-expanded-coverage\">More new and expanded coverage<a href=\"https://stackql.io/blog/providers/azure-provider-update-july-2026#more-new-and-expanded-coverage\" class=\"hash-link\" aria-label=\"Direct link to More new and expanded coverage\" title=\"Direct link to More new and expanded coverage\" translate=\"no\">​</a></h2>\n<ul>\n<li class=\"\"><strong>Communication</strong> - the full Azure Communication Services surface: email, SMS, chat, calling automation, phone numbers, rooms, job router, advanced messaging and identity (9 services)</li>\n<li class=\"\"><strong>Databases</strong> - Azure NetApp Files, Azure Cache for Redis, Azure Managed Redis, Azure DocumentDB (MongoDB compatibility), Azure HorizonDB, MySQL and PostgreSQL flexible servers, Azure Data Explorer (Kusto)</li>\n<li class=\"\"><strong>Compute and containers</strong> - Compute Fleet, Compute Schedule, AKS (<code>container_service</code>), Kubernetes Fleet Manager, deployment safeguards, Container Registry tasks and data plane, Azure Red Hat OpenShift, Azure VMware Solution</li>\n<li class=\"\"><strong>Observability</strong> - Azure Monitor log query, metrics query and logs ingestion data planes, Azure Monitor workspaces (managed Prometheus), health models</li>\n<li class=\"\"><strong>Governance</strong> - Microsoft Purview catalog, data map, scanning, sharing and workflow APIs; a consolidated <code>resource</code> service spanning deployments, policy, locks, template specs and subscriptions</li>\n<li class=\"\"><strong>Maps</strong> - geocoding, routing, rendering, geolocation, timezone and weather (6 services)</li>\n<li class=\"\"><strong>Hybrid</strong> - Azure Arc-enabled servers, Kubernetes, VMware vSphere and System Center VMM, Arc gateway, Azure Local</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/azure-provider-update-july-2026#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>The provider uses Azure's standard credential chain - an <code>az login</code> session works as-is, or set service principal credentials:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export AZURE_TENANT_ID=&lt;tenant_id&gt;</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export AZURE_CLIENT_ID=&lt;client_id&gt;</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export AZURE_CLIENT_SECRET=&lt;client_secret&gt;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/azure-provider-update-july-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the providers from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull azure</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull azure_extras</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull azure_isv</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull azure_stack</span><br></div></code></pre></div></div>\n<p>Then explore - it's just SQL:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> location</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> provisioning_state</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> vm_id</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> azure</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">compute</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">virtual_machines</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> subscription_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;subscription_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://azure-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">azure-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/azure-provider-update-july-2026",
            "title": "Azure Provider Update - July 2026",
            "summary": "Major update to the StackQL Azure provider - 268 services covering the ARM control plane and Azure data planes in one provider, with expanded AI coverage including Azure AI Foundry, AI Language, Document Intelligence, Content Safety and more, available in the StackQL Provider Registry now.",
            "date_modified": "2026-07-16T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "azure",
                "provider",
                "arm",
                "azure ai",
                "ai foundry",
                "key vault",
                "cosmos db",
                "data plane",
                "cloud inventory",
                "finops"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/anthropic-providers-update-july-2026",
            "content_html": "<p>We've released an update to the StackQL providers for the Anthropic platform:</p>\n<ul>\n<li class=\"\"><a href=\"https://anthropic-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>anthropic</code></strong></a> - the Claude API surface: messages, models, batches, files, agents, deployments, environments, sessions, skills, memory stores, user profiles, and vaults (11 services, 26 resources, 103 operations)</li>\n<li class=\"\"><a href=\"https://anthropic-admin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>anthropic_admin</code></strong></a> <strong>[new]</strong> - the Admin API surface: organization, users, invites, workspaces, API keys, usage and cost reports, rate limits, and Claude Code analytics (6 services, 11 resources)</li>\n</ul>\n<p>Both providers expose a SQL-first surface: authentication is handled automatically, Push down support using the <code>LIMIT</code> clause and built in pagination handling.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"inference-as-a-query\">Inference as a query<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-july-2026#inference-as-a-query\" class=\"hash-link\" aria-label=\"Direct link to Inference as a query\" title=\"Direct link to Inference as a query\" translate=\"no\">​</a></h2>\n<p>Inference using Claude is accessible via <code>SELECT</code> for instance:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">model</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stop_reason</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">content</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$[0].text'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> assistant_message</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">usage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$.output_tokens'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">AS</span><span class=\"token plain\"> output_tokens</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">messages</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">messages</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> model </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'claude-sonnet-5'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> max_tokens </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">2048</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> messages </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'[</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  {</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"role\": \"user\",</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">    \"content\": \"how does stackql work?\"</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">  }</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">]'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> system </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'You are a technical assistant. Answer in one short paragraph.'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> thinking </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'{\"type\": \"disabled\"}'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Token counting works the same way via <code>anthropic.messages.token_counts</code> - free of charge.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"model-capabilities-view\">Model capabilities view<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-july-2026#model-capabilities-view\" class=\"hash-link\" aria-label=\"Direct link to Model capabilities view\" title=\"Direct link to Model capabilities view\" translate=\"no\">​</a></h2>\n<p>The provider ships a convenience view that fans the per-model capability matrix out of the <code>capabilities</code> JSON column into flat columns:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> display_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> thinking</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> adaptive</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> xhigh</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> max_input_tokens</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> max_tokens</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">models</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">vw_model_capabilities</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>One row per model with boolean flags for batch, citations, code execution, context management, effort tiers (<code>low</code> through <code>xhigh</code>), image and PDF input, structured outputs, and thinking modes - useful for picking a model programmatically instead of reading release notes.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"the-admin-provider---your-anthropic-org-as-data\">The admin provider - your Anthropic org as data<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-july-2026#the-admin-provider---your-anthropic-org-as-data\" class=\"hash-link\" aria-label=\"Direct link to The admin provider - your Anthropic org as data\" title=\"Direct link to The admin provider - your Anthropic org as data\" translate=\"no\">​</a></h2>\n<p>The <code>anthropic_admin</code> provider presents the organization management surface as SQL.</p>\n<p>Enumerate workspaces and who's in them:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> data_residency</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> user_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> workspace_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> workspace_role</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">members</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> workspace_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;workspace_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Audit users and API keys across the org:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> email</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> role</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">organization</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">users</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> workspace_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> partial_key_hint</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">api_keys</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">api_keys</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Pull usage reports as time-bucketed rows - <code>results</code> is a JSON column you can break down with <code>JSON_EACH</code>, and reports can be grouped and filtered by model, workspace, API key, service tier, and more:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> starting_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> ending_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> results</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">usage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">usage_reports</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> starting_at </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-07-01T00:00:00Z'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">\"group_by[]\"</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'model'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Cost reporting and Claude Code adoption analytics work the same way:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> starting_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> ending_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> results</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cost</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">cost_reports</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> starting_at </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-07-01T00:00:00Z'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> starting_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> ending_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> results</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> anthropic_admin</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">usage</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">claude_code_reports</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> starting_at </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'2026-07-01T00:00:00Z'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Because it's all SQL, you can join usage to workspaces, materialize daily cost snapshots into a database, or point a BI tool at StackQL's Postgres wire protocol server and build an org-wide Claude spend dashboard without writing a line of integration code.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-july-2026#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>The two providers use different key types, which are disjoint by design:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"># anthropic - workspace-scoped Claude API key</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export ANTHROPIC_API_KEY=sk-ant-api...</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"># anthropic_admin - org-scoped Admin API key (created by org admins)</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export ANTHROPIC_ADMIN_KEY=sk-ant-admin...</span><br></div></code></pre></div></div>\n<p>Admin keys are available to organization accounts only and can be provisioned by users with the admin role in the <a href=\"https://console.anthropic.com/settings/admin-keys\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">Console</a>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/anthropic-providers-update-july-2026#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the providers from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull anthropic</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull anthropic_admin</span><br></div></code></pre></div></div>\n<p>Provider docs are at <a href=\"https://anthropic-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">anthropic-provider.stackql.io</a> and <a href=\"https://anthropic-admin-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">anthropic-admin-provider.stackql.io</a>. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/anthropic-providers-update-july-2026",
            "title": "Anthropic Providers Update - July 2026",
            "summary": "Latest release of the StackQL Anthropic providers - anthropic for the Claude API (messages, agents, sessions, skills, files, vaults and more) and anthropic_admin for enterprise organization management, usage and cost reporting, and Claude Code analytics - are available in the StackQL Provider Registry now.",
            "date_modified": "2026-07-10T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "anthropic",
                "claude",
                "provider",
                "admin api",
                "usage reporting",
                "cost reporting",
                "claude code",
                "agents",
                "enterprise"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/updated-cloudflare-provider-available",
            "content_html": "<p>We've released the latest version of the <a class=\"\" href=\"https://stackql.io/providers\"><strong>StackQL Cloudflare provider</strong></a>, including the full Cloudflare V4 API surface under SQL with <strong>108 services</strong>, <strong>1259 resources</strong>, and <strong>2840 operations</strong>.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"service-highlights\">Service highlights<a href=\"https://stackql.io/blog/providers/updated-cloudflare-provider-available#service-highlights\" class=\"hash-link\" aria-label=\"Direct link to Service highlights\" title=\"Direct link to Service highlights\" translate=\"no\">​</a></h2>\n<p>Key services in this release include:</p>\n<table><thead><tr><th>Service</th><th style=\"text-align:right\">Resources</th><th style=\"text-align:right\">Operations</th><th>What it covers</th></tr></thead><tbody><tr><td><code>zero_trust</code></td><td style=\"text-align:right\">155</td><td style=\"text-align:right\">427</td><td>Access apps, gateway, tunnels, identity providers, device posture</td></tr><tr><td><code>radar</code></td><td style=\"text-align:right\">266</td><td style=\"text-align:right\">273</td><td>Internet measurement: BGP, traffic, attacks, AS info, quality</td></tr><tr><td><code>cloudforce_one</code></td><td style=\"text-align:right\">56</td><td style=\"text-align:right\">130</td><td>Threat intel: requests, priorities, scans, threat events</td></tr><tr><td><code>ai</code></td><td style=\"text-align:right\">114</td><td style=\"text-align:right\">116</td><td>Workers AI inference across 100+ models</td></tr><tr><td><code>workers</code></td><td style=\"text-align:right\">39</td><td style=\"text-align:right\">107</td><td>Scripts, deployments, KV, Durable Objects, queues, cron triggers</td></tr><tr><td><code>magic_transit</code></td><td style=\"text-align:right\">21</td><td style=\"text-align:right\">90</td><td>Magic WAN: sites, connectors, GRE/IPsec tunnels, routes</td></tr><tr><td><code>zones</code></td><td style=\"text-align:right\">26</td><td style=\"text-align:right\">64</td><td>Zone lifecycle, settings, SSL/TLS, page rules, custom hostnames</td></tr><tr><td><code>realtime_kit</code></td><td style=\"text-align:right\">27</td><td style=\"text-align:right\">63</td><td>RealtimeKit meetings, sessions, recordings, presets</td></tr><tr><td><code>dns</code></td><td style=\"text-align:right\">19</td><td style=\"text-align:right\">58</td><td>DNS records, zone transfers, firewall, analytics</td></tr><tr><td><code>load_balancers</code></td><td style=\"text-align:right\">12</td><td style=\"text-align:right\">54</td><td>Pools, monitors, regions, search</td></tr><tr><td><code>aisearch</code></td><td style=\"text-align:right\">20</td><td style=\"text-align:right\">48</td><td>AI Search indexes, ingest jobs, models</td></tr><tr><td><code>email_security</code></td><td style=\"text-align:right\">15</td><td style=\"text-align:right\">47</td><td>Area 1: alerts, allow/block policies, investigation</td></tr><tr><td><code>firewall</code></td><td style=\"text-align:right\">10</td><td style=\"text-align:right\">47</td><td>WAF rules, packages, lockdowns, access rules, UA rules</td></tr><tr><td><code>streams</code></td><td style=\"text-align:right\">13</td><td style=\"text-align:right\">47</td><td>Stream video uploads, live inputs, signed URLs, captions</td></tr><tr><td><code>api_gateway</code></td><td style=\"text-align:right\">17</td><td style=\"text-align:right\">43</td><td>API discovery, schemas, operations, settings</td></tr><tr><td><code>r2</code></td><td style=\"text-align:right\">17</td><td style=\"text-align:right\">42</td><td>Buckets, lifecycle, CORS, custom domains, event notifications</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/updated-cloudflare-provider-available#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>Authenticate with a Cloudflare API token via the <code>CLOUDFLARE_API_TOKEN</code> environment variable:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export CLOUDFLARE_API_TOKEN=...</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"example-queries\">Example queries<a href=\"https://stackql.io/blog/providers/updated-cloudflare-provider-available#example-queries\" class=\"hash-link\" aria-label=\"Direct link to Example queries\" title=\"Direct link to Example queries\" translate=\"no\">​</a></h2>\n<p>List your zones:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">plan</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> cloudflare</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">zones</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">zones</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;account_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Inspect Workers scripts in an account:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> modified_on</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> usage_model</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> cloudflare</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workers</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">scripts</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;account_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>List DNS records for a zone:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> content</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> ttl</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> proxied</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> cloudflare</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">dns</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">records</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> zone_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;zone_id&gt;'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Pull a Radar BGP summary:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> cloudflare</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">radar</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">routes_stats</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"binary-and-non-json-responses\">Binary and non-JSON responses<a href=\"https://stackql.io/blog/providers/updated-cloudflare-provider-available#binary-and-non-json-responses\" class=\"hash-link\" aria-label=\"Direct link to Binary and non-JSON responses\" title=\"Direct link to Binary and non-JSON responses\" translate=\"no\">​</a></h2>\n<p>A number of Cloudflare endpoints return binary or plain-text payloads - PDF LOAs, PNG screenshots, raw script source, CSV exports. The provider wraps these as a one-row table with a <code>contents</code> column so they're still SELECT-able:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> contents</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> cloudflare</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">browser_rendering</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">screenshot</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'&lt;account_id&gt;'</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> url </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'https://example.com'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get started<a href=\"https://stackql.io/blog/providers/updated-cloudflare-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get started\" title=\"Direct link to Get started\" translate=\"no\">​</a></h2>\n<p>Pull the provider from the public registry:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull cloudflare</span><br></div></code></pre></div></div>\n<p>Then start querying. Let us know what you build. Star us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/updated-cloudflare-provider-available",
            "title": "Cloudflare Provider - May 2026",
            "summary": "Initial release of the StackQL Cloudflare provider with 108 services, 1259 resources, and 2840 operations spanning Zero Trust, Workers, R2, DNS, Zones, Radar, AI, Stream, Magic Transit, and more.",
            "date_modified": "2026-05-27T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "cloudflare",
                "provider",
                "zero trust",
                "workers",
                "r2",
                "dns",
                "radar",
                "ai",
                "stream",
                "magic transit"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/confluent-provider-may-2026-update",
            "content_html": "<p>We've released an update to the <a href=\"https://confluent-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL Confluent provider</strong></a> adding eight new services and 40 additional resources across existing services.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-services\">New Services<a href=\"https://stackql.io/blog/providers/confluent-provider-may-2026-update#new-services\" class=\"hash-link\" aria-label=\"Direct link to New Services\" title=\"Direct link to New Services\" translate=\"no\">​</a></h2>\n<p>The eight new services added in this update are:</p>\n<table><thead><tr><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>ccl</code></td><td>Custom Code Logging - manage log topics that capture stdout/stderr and worker process logs from custom connectors running in Confluent Cloud</td></tr><tr><td><code>ccpm</code></td><td>Custom Connect Plugin Management - upload, version, and manage custom connector plugins at the environment level, including plugin version resources for JAR/ZIP artifacts</td></tr><tr><td><code>endpoints</code></td><td>Manage PrivateLink access points and private network endpoints used to reach Confluent Cloud clusters and serverless products over private networking</td></tr><tr><td><code>pipelines</code></td><td>Manage Stream Designer pipelines - the visual SQL/ksqlDB pipeline builder for connecting sources, transforms, and sinks across Kafka topics</td></tr><tr><td><code>share_group</code></td><td>Manage Kafka share groups (KIP-932 / Queues for Kafka), which provide queue-like consumption semantics with per-message acknowledgement and consumer parallelism beyond partition count</td></tr><tr><td><code>streams_group</code></td><td>Manage Kafka Streams groups - the broker-side coordination resource for Kafka Streams applications introduced alongside the next-generation consumer rebalance protocol</td></tr><tr><td><code>tableflow</code></td><td>Materialize Kafka topics as Apache Iceberg or Delta Lake tables, including catalog integrations, storage configuration, and table maintenance settings</td></tr><tr><td><code>usm</code></td><td>Unified Stream Manager - register and govern self-managed Confluent Platform clusters from Confluent Cloud, including agent deployment and hybrid cluster monitoring</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"updates\">Updates<a href=\"https://stackql.io/blog/providers/confluent-provider-may-2026-update#updates\" class=\"hash-link\" aria-label=\"Direct link to Updates\" title=\"Direct link to Updates\" translate=\"no\">​</a></h2>\n<p>This release also adds 40 additional resources across existing services, expanding coverage for:</p>\n<ul>\n<li class=\"\"><code>kafka</code> - additional cluster configuration and topic-level resources</li>\n<li class=\"\"><code>connect</code> - new connector status, offset, and task management resources</li>\n<li class=\"\"><code>flink</code> - expanded coverage for Flink statements, compute pools, and artifacts</li>\n<li class=\"\"><code>iam</code> - new resources for service accounts, identity providers, and role bindings</li>\n<li class=\"\"><code>networking</code> - additional resources for transit gateways, peerings, and DNS forwarders</li>\n<li class=\"\"><code>schema_registry</code> - new resources for schema exporters, modes, and compatibility</li>\n<li class=\"\"><code>billing</code> - new cost and usage resources</li>\n<li class=\"\"><code>metrics</code> - additional query and descriptor resources</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/confluent-provider-may-2026-update#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the latest Confluent provider:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull confluent</span><br></div></code></pre></div></div>\n<p>Visit us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a> and let us know how you're using it.</p>",
            "url": "https://stackql.io/blog/providers/confluent-provider-may-2026-update",
            "title": "Confluent Provider Update - May 2026",
            "summary": "Update to the StackQL Confluent provider adding eight new services including ccl, ccpm, endpoints, pipelines, share_group, streams_group, tableflow, and usm, along with 40 additional resources across existing services.",
            "date_modified": "2026-05-08T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "confluent",
                "provider",
                "kafka",
                "tableflow",
                "stream-designer"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/github-provider-april-2026-update",
            "content_html": "<p>We've released an update to the <a href=\"https://github-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL GitHub provider</strong></a> adding new services and expanding coverage across several existing ones.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-services\">New Services<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#new-services\" class=\"hash-link\" aria-label=\"Direct link to New Services\" title=\"Direct link to New Services\" translate=\"no\">​</a></h2>\n<p>Some of the newly added services of note include:</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"agent_tasks\">agent_tasks<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#agent_tasks\" class=\"hash-link\" aria-label=\"Direct link to agent_tasks\" title=\"Direct link to agent_tasks\" translate=\"no\">​</a></h3>\n<p>The <code>agent_tasks</code> service exposes GitHub's AI agent task API, allowing you to query and manage agent task runs within a repository. Resources include:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>agent_tasks</code></td><td>List, get, and manage agent task runs scoped to a repository</td></tr><tr><td><code>agent_task_steps</code></td><td>Retrieve individual step-level detail for an agent task run</td></tr><tr><td><code>agent_task_labels</code></td><td>Manage labels assigned to agent tasks</td></tr></tbody></table>\n<p>This covers the audit and observability side of AI agent operations in GitHub - useful for tracking what agent tasks have run, their status, and step-level output.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"campaigns\">campaigns<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#campaigns\" class=\"hash-link\" aria-label=\"Direct link to campaigns\" title=\"Direct link to campaigns\" translate=\"no\">​</a></h3>\n<p>The <code>campaigns</code> service covers GitHub's security campaign management, part of GitHub Advanced Security. Resources include:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>campaigns</code></td><td>Create, list, get, update, and close security campaigns scoped to an organization</td></tr><tr><td><code>campaign_repositories</code></td><td>List repositories participating in a campaign</td></tr></tbody></table>\n<p>Security campaigns let you coordinate remediation of code scanning or secret scanning alerts across an org. This service lets you query campaign state and participation programmatically.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"classroom\">classroom<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#classroom\" class=\"hash-link\" aria-label=\"Direct link to classroom\" title=\"Direct link to classroom\" translate=\"no\">​</a></h3>\n<p>The <code>classroom</code> service brings GitHub Classroom into StackQL. Resources include:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>classrooms</code></td><td>List and get classrooms accessible to the authenticated user</td></tr><tr><td><code>assignments</code></td><td>List and get assignments within a classroom</td></tr><tr><td><code>accepted_assignments</code></td><td>Query student-accepted assignment repositories</td></tr><tr><td><code>assignment_grades</code></td><td>Retrieve grade data for accepted assignments</td></tr></tbody></table>\n<p>This is useful for institutions managing GitHub Classroom at scale - querying assignment completion or generating reports across multiple classrooms.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"hosted_compute\">hosted_compute<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#hosted_compute\" class=\"hash-link\" aria-label=\"Direct link to hosted_compute\" title=\"Direct link to hosted_compute\" translate=\"no\">​</a></h3>\n<p>The <code>hosted_compute</code> service covers GitHub's hosted compute networking resources, relevant to organizations using GitHub-hosted runners with custom network configurations. Resources include:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>hosted_compute_networks</code></td><td>Manage hosted compute network configurations at the org level</td></tr><tr><td><code>hosted_compute_network_settings</code></td><td>Query and update settings for a hosted compute network</td></tr></tbody></table>\n<p>This is relevant if you're using GitHub's hosted compute with Azure private networking or similar integrations.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"private_registries\">private_registries<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#private_registries\" class=\"hash-link\" aria-label=\"Direct link to private_registries\" title=\"Direct link to private_registries\" translate=\"no\">​</a></h3>\n<p>The <code>private_registries</code> service exposes org-level private registry configurations - credentials and settings stored in GitHub for use by Actions workflows. Resources include:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>org_private_registries</code></td><td>List, get, create, update, and delete private registry configurations for an organization</td></tr></tbody></table>\n<p>This allows you to audit which private registries (npm, Docker Hub, Maven, etc.) are configured at the org level without going through the GitHub UI.</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"enterprise_teams\">enterprise_teams<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#enterprise_teams\" class=\"hash-link\" aria-label=\"Direct link to enterprise_teams\" title=\"Direct link to enterprise_teams\" translate=\"no\">​</a></h3>\n<p>The <code>enterprise_teams</code> service provides enterprise-scoped team management, distinct from org-level teams. Resources include:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>enterprise_teams</code></td><td>List and get teams at the enterprise level</td></tr><tr><td><code>enterprise_team_members</code></td><td>Query membership for enterprise teams</td></tr></tbody></table>\n<p>This is useful for enterprises managing teams that span multiple organizations.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"updates\">Updates<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#updates\" class=\"hash-link\" aria-label=\"Direct link to Updates\" title=\"Direct link to Updates\" translate=\"no\">​</a></h2>\n<p>Notable updates to existing services include:</p>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"actions\">actions<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#actions\" class=\"hash-link\" aria-label=\"Direct link to actions\" title=\"Direct link to actions\" translate=\"no\">​</a></h3>\n<p>New resources added to the <code>actions</code> service:</p>\n<ul>\n<li class=\"\"><code>hosted_runners</code> - query and manage GitHub-hosted runner configurations at the org or repo level</li>\n<li class=\"\"><code>runner_group_network_configurations</code> - network config details for runner groups</li>\n</ul>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"orgs\">orgs<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#orgs\" class=\"hash-link\" aria-label=\"Direct link to orgs\" title=\"Direct link to orgs\" translate=\"no\">​</a></h3>\n<ul>\n<li class=\"\">New <code>org_roles</code> and <code>org_role_assignments</code> resources for querying custom org role definitions and their assignments</li>\n</ul>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"repos\">repos<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#repos\" class=\"hash-link\" aria-label=\"Direct link to repos\" title=\"Direct link to repos\" translate=\"no\">​</a></h3>\n<ul>\n<li class=\"\">New <code>repo_rules_suites</code> resource for querying rule suite evaluation history (useful for auditing branch protection rule evaluations)</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/github-provider-april-2026-update#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the latest GitHub provider:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull github</span><br></div></code></pre></div></div>\n<p>Visit us on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a> and let us know how you're using it.</p>",
            "url": "https://stackql.io/blog/providers/github-provider-april-2026-update",
            "title": "GitHub Provider Update - April 2026",
            "summary": "Update to the StackQL GitHub provider adding six new services including agent_tasks, campaigns, classroom, hosted_compute, private_registries, and enterprise_teams, along with resource additions across existing services.",
            "date_modified": "2026-04-18T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "github",
                "provider",
                "github actions",
                "github classroom",
                "hosted compute"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-databricks-providers-available",
            "content_html": "<p>Updated StackQL providers for Databricks are now available: <a href=\"https://databricks-account-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>databricks_account</code></strong></a> and <a href=\"https://databricks-workspace-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong><code>databricks_workspace</code></strong></a>, giving you SQL access to the full Databricks control plane across account-level and workspace-level operations.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"provider-structure\">Provider Structure<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#provider-structure\" class=\"hash-link\" aria-label=\"Direct link to Provider Structure\" title=\"Direct link to Provider Structure\" translate=\"no\">​</a></h2>\n<p>The following updated providers are available:</p>\n<table><thead><tr><th>Provider</th><th>Scope</th><th>Services</th></tr></thead><tbody><tr><td><code>databricks_account</code></td><td>Account</td><td>8</td></tr><tr><td><code>databricks_workspace</code></td><td>Workspace</td><td>26</td></tr></tbody></table>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"coverage\">Coverage<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#coverage\" class=\"hash-link\" aria-label=\"Direct link to Coverage\" title=\"Direct link to Coverage\" translate=\"no\">​</a></h2>\n<p>There are over <strong>30 services</strong>, <strong>300+ resources</strong>, and <strong>983 operations</strong> spanning IAM, compute, catalog, billing, jobs, ML, serving, sharing, vector search, and more.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"example-queries\">Example Queries<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#example-queries\" class=\"hash-link\" aria-label=\"Direct link to Example Queries\" title=\"Direct link to Example Queries\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"list-workspaces-in-an-account\">List workspaces in an account<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#list-workspaces-in-an-account\" class=\"hash-link\" aria-label=\"Direct link to List workspaces in an account\" title=\"Direct link to List workspaces in an account\" translate=\"no\">​</a></h3>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  workspace_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  workspace_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  workspace_status</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  aws_region</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  compute_mode</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  deployment_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">datetime</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">creation_time</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">/</span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1000</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'unixepoch'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> creation_date_time</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">provisioning</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">workspaces</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ebfcc5a9-9d49-4c93-b651-b3ee6cf1c9ce'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"query-account-users-and-roles\">Query account users and roles<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#query-account-users-and-roles\" class=\"hash-link\" aria-label=\"Direct link to Query account users and roles\" title=\"Direct link to Query account users and roles\" translate=\"no\">​</a></h3>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  id </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> user_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  displayName </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> display_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  userName </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> user_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  active</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  IIF</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">JSON_EXTRACT</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">roles</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'$[0].value'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'account_admin'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'true'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'false'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> is_account_admin</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">iam</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">account_users</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ebfcc5a9-9d49-4c93-b651-b3ee6cf1c9ce'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"list-catalogs-in-a-workspace\">List catalogs in a workspace<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#list-catalogs-in-a-workspace\" class=\"hash-link\" aria-label=\"Direct link to List catalogs in a workspace\" title=\"Direct link to List catalogs in a workspace\" translate=\"no\">​</a></h3>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  full_name</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  catalog_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">comment</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">datetime</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">created_at</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">/</span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1000</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'unixepoch'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> created_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  created_by</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">datetime</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\">updated_at</span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">/</span><span class=\"token number\" style=\"color:rgb(247, 140, 108)\">1000</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'unixepoch'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">as</span><span class=\"token plain\"> updated_at</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  updated_by</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  enable_predictive_optimization</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">catalog</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">catalogs</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> deployment_name </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'dbc-36ff48e3-4a69'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"download-billable-usage-to-csv\">Download billable usage to CSV<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#download-billable-usage-to-csv\" class=\"hash-link\" aria-label=\"Direct link to Download billable usage to CSV\" title=\"Direct link to Download billable usage to CSV\" translate=\"no\">​</a></h3>\n<p>This one is worth calling out. You can pull billable usage data for a given period and write it straight to a CSV file:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">./stackql exec \\</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  -o text \\</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  --hideheaders \\</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  -f billable_usage.csv \\</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  \"SELECT contents</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  FROM databricks_account.billing.billable_usage</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  WHERE start_month = '2025-12'</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  AND end_month = '2026-01'</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  AND account_id = 'your-account-id'\"</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"authentication\">Authentication<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#authentication\" class=\"hash-link\" aria-label=\"Direct link to Authentication\" title=\"Direct link to Authentication\" translate=\"no\">​</a></h2>\n<p>Both providers authenticate using OAuth2 with a Databricks service principal. Set the following environment variables:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export DATABRICKS_ACCOUNT_ID=\"your-account-id\"</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export DATABRICKS_CLIENT_ID=\"your-client-id\"</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">export DATABRICKS_CLIENT_SECRET=\"your-client-secret\"</span><br></div></code></pre></div></div>\n<p>These are the same variables used by Terraform, the Databricks SDKs, and the Databricks CLI.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/new-databricks-providers-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the providers:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull databricks_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">registry pull databricks_workspace</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Start querying via the <code>shell</code> or <code>exec</code>:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> databricks_account</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">iam</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">account_groups </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> account_id </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'your-account-id'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<p>Full documentation is available at <a href=\"https://databricks-account-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">databricks-account-provider.stackql.io</a> and <a href=\"https://databricks-workspace-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">databricks-workspace-provider.stackql.io</a>. Let us know what you think on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-databricks-providers-available",
            "title": "New Databricks Providers for StackQL Released",
            "summary": "Updated providers for Databricks released covering account and workspace operations, with over 30 services, 300 resources, and nearly 1,000 operations queryable using SQL.",
            "date_modified": "2026-02-12T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "databricks",
                "provider",
                "infrastructure-as-code"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/new-awscc-provider-available",
            "content_html": "<p>We've released a new dedicated <a href=\"https://awscc-provider.stackql.io/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>StackQL AWS Cloud Control provider</strong></a>, providing full CRUDL operations across AWS services via the Cloud Control API including purpose-built resource definitions leveraging Cloud Control's consistent schema.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"resource-naming-convention\">Resource Naming Convention<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#resource-naming-convention\" class=\"hash-link\" aria-label=\"Direct link to Resource Naming Convention\" title=\"Direct link to Resource Naming Convention\" translate=\"no\">​</a></h2>\n<p>Resources follow a clear pattern to differentiate operations:</p>\n<table><thead><tr><th>Resource Pattern</th><th>Operations</th><th>Use Case</th></tr></thead><tbody><tr><td><code>{resource}</code> (e.g., <code>s3.buckets</code>)</td><td><code>SELECT</code>, <code>INSERT</code>, <code>UPDATE</code>, <code>DELETE</code></td><td>Full CRUD with complete resource properties</td></tr><tr><td><code>{resource}_list_only</code> (e.g., <code>s3.buckets_list_only</code>)</td><td><code>SELECT</code></td><td>Fast enumeration of resource identifiers</td></tr></tbody></table>\n<br>\n<p>This separation means listing thousands of resources won't trigger rate limits from individual <code>GET</code> calls:</p>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- Fast enumeration (list operation only)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> bucket_name </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> awscc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">buckets_list_only </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\" style=\"display:inline-block\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token comment\" style=\"color:rgb(99, 119, 119);font-style:italic\">-- Full resource details (get operation)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">*</span><span class=\"token plain\"> </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> awscc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">buckets </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token plain\"> </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> data__Identifier </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-bucket'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"provider-coverage\">Provider Coverage<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#provider-coverage\" class=\"hash-link\" aria-label=\"Direct link to Provider Coverage\" title=\"Direct link to Provider Coverage\" translate=\"no\">​</a></h2>\n<p>The <code>awscc</code> provider includes:</p>\n<ul>\n<li class=\"\"><strong>237 services</strong> and <strong>2371 resources</strong> covering the breadth of AWS</li>\n<li class=\"\"><strong>Full CRUDL support</strong> for all Cloud Control compatible resources</li>\n<li class=\"\"><strong>Consistent schema</strong> derived from AWS CloudFormation resource specifications</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"example-operations\">Example Operations<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#example-operations\" class=\"hash-link\" aria-label=\"Direct link to Example Operations\" title=\"Direct link to Example Operations\" translate=\"no\">​</a></h2>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"create-an-s3-bucket\">Create an S3 Bucket<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#create-an-s3-bucket\" class=\"hash-link\" aria-label=\"Direct link to Create an S3 Bucket\" title=\"Direct link to Create an S3 Bucket\" translate=\"no\">​</a></h3>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INSERT</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">INTO</span><span class=\"token plain\"> awscc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">s3</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">buckets </span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">(</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  BucketName</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  region</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">)</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-new-bucket'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"query-ec2-instances\">Query EC2 Instances<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#query-ec2-instances\" class=\"hash-link\" aria-label=\"Direct link to Query EC2 Instances\" title=\"Direct link to Query EC2 Instances\" translate=\"no\">​</a></h3>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">SELECT</span><span class=\"token plain\"> </span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  instance_id</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  instance_type</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">,</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">  tags</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> awscc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">ec2</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">instances</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'ap-southeast-2'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> data__Identifier </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'i-1234567890abcdef0'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h3 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"delete-a-resource\">Delete a Resource<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#delete-a-resource\" class=\"hash-link\" aria-label=\"Direct link to Delete a Resource\" title=\"Direct link to Delete a Resource\" translate=\"no\">​</a></h3>\n<div class=\"language-sql codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-sql codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">DELETE</span><span class=\"token plain\"> </span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">FROM</span><span class=\"token plain\"> awscc</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">lambda</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">.</span><span class=\"token plain\">functions</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token keyword\" style=\"color:rgb(127, 219, 202)\">WHERE</span><span class=\"token plain\"> data__Identifier </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'my-function'</span><span class=\"token plain\"></span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\"></span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">AND</span><span class=\"token plain\"> region </span><span class=\"token operator\" style=\"color:rgb(127, 219, 202)\">=</span><span class=\"token plain\"> </span><span class=\"token string\" style=\"color:rgb(173, 219, 103)\">'us-east-1'</span><span class=\"token punctuation\" style=\"color:rgb(199, 146, 234)\">;</span><br></div></code></pre></div></div>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"enhanced-documentation\">Enhanced Documentation<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#enhanced-documentation\" class=\"hash-link\" aria-label=\"Direct link to Enhanced Documentation\" title=\"Direct link to Enhanced Documentation\" translate=\"no\">​</a></h2>\n<p>The provider documentation at <a href=\"https://awscc.stackql.io/providers/awscc/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\">awscc.stackql.io</a> now features:</p>\n<ul>\n<li class=\"\"><strong>Interactive schema explorer</strong> with expandable nested property trees</li>\n<li class=\"\"><strong>Complete field documentation</strong> including complex object structures</li>\n<li class=\"\"><strong>Ready-to-use SQL examples</strong> for <code>SELECT</code>, <code>INSERT</code>, and <code>DELETE</code> operations</li>\n<li class=\"\"><strong>IAM permissions reference</strong> for each resource operation</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/new-awscc-provider-available#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Pull the new provider:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull awscc</span><br></div></code></pre></div></div>\n<p>Query your AWS resources:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql shell</span><br></div><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">&gt;&gt; SELECT region, bucket_name FROM awscc.s3.buckets_list_only WHERE region = 'us-east-1';</span><br></div></code></pre></div></div>\n<p>Let us know your thoughts! Visit us and give us a star on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/new-awscc-provider-available",
            "title": "New Dedicated AWS Cloud Control Provider Released",
            "summary": "Introducing the standalone StackQL AWS Cloud Control provider with full CRUDL support, optimized resource naming, and comprehensive coverage of AWS Cloud Control API resources.",
            "date_modified": "2026-01-19T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "aws",
                "awscc",
                "cloud control",
                "provider",
                "infrastructure-as-code"
            ]
        },
        {
            "id": "https://stackql.io/blog/providers/google-provider-december-2025-update",
            "content_html": "<p>We've released a major update to the <a class=\"\" href=\"https://stackql.io/providers\"><strong>StackQL Google provider</strong></a> with a new service, enhanced AI/ML capabilities, and improvements across 177 service files.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"new-service-speech-to-text-v2\">New Service: Speech-to-Text v2<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#new-service-speech-to-text-v2\" class=\"hash-link\" aria-label=\"Direct link to New Service: Speech-to-Text v2\" title=\"Direct link to New Service: Speech-to-Text v2\" translate=\"no\">​</a></h2>\n<p>The <code>speechv2</code> service brings Cloud Speech-to-Text API v2 to StackQL with 6 resources:</p>\n<table><thead><tr><th>Resource</th><th>Description</th></tr></thead><tbody><tr><td><code>recognizers</code></td><td>Manage speech recognition configurations with create, list, get, patch, delete, undelete, recognize, and batch_recognize methods</td></tr><tr><td><code>custom_classes</code></td><td>Create custom vocabulary classes for improved recognition accuracy</td></tr><tr><td><code>phrase_sets</code></td><td>Define phrase hints to boost recognition of specific terms</td></tr><tr><td><code>config</code></td><td>Manage location-level Speech-to-Text configuration</td></tr><tr><td><code>locations</code></td><td>Query available service locations</td></tr><tr><td><code>operations</code></td><td>Track long-running operations</td></tr></tbody></table>\n<p>Key features include support for multiple audio encodings (WAV, FLAC, MP3, OGG, WebM, MP4/AAC), translation capabilities, denoiser config, and KMS encryption support.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"vertex-ai--ai-platform\">Vertex AI / AI Platform<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#vertex-ai--ai-platform\" class=\"hash-link\" aria-label=\"Direct link to Vertex AI / AI Platform\" title=\"Direct link to Vertex AI / AI Platform\" translate=\"no\">​</a></h2>\n<p>The largest update in this release with 87,000+ line changes introduces powerful new RAG and evaluation capabilities:</p>\n<ul>\n<li class=\"\"><strong>RAG Resources</strong>: <code>rag_corpora</code>, <code>rag_files</code>, <code>rag_engine_config</code> for Retrieval-Augmented Generation</li>\n<li class=\"\"><strong>Conversational AI</strong>: New <code>chat</code> resource</li>\n<li class=\"\"><strong>Model Evaluation</strong>: <code>evaluation_sets</code> and <code>evaluation_items</code> for systematic model assessment</li>\n<li class=\"\"><strong>New Resources</strong>: <code>science</code>, <code>invoke</code>, and <code>openapi</code> resources</li>\n<li class=\"\"><strong>Performance</strong>: Enhanced <code>cache_config</code> for caching configurations</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"discovery-engine\">Discovery Engine<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#discovery-engine\" class=\"hash-link\" aria-label=\"Direct link to Discovery Engine\" title=\"Direct link to Discovery Engine\" translate=\"no\">​</a></h2>\n<p>Major enhancements (50,000+ line changes) for search and conversational AI:</p>\n<ul>\n<li class=\"\">New <code>assistants</code> resource</li>\n<li class=\"\">New <code>sitemaps</code> resource for site search</li>\n<li class=\"\">New <code>custom_models</code> resource</li>\n<li class=\"\">Enhanced <code>sessions</code> and <code>answers</code> for conversational search</li>\n<li class=\"\">New <code>authorized_views</code> and <code>authorized_view_sets</code> for access control</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"contact-center-ai-insights\">Contact Center AI Insights<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#contact-center-ai-insights\" class=\"hash-link\" aria-label=\"Direct link to Contact Center AI Insights\" title=\"Direct link to Contact Center AI Insights\" translate=\"no\">​</a></h2>\n<p>Quality assurance and analytics improvements (20,000+ line changes):</p>\n<ul>\n<li class=\"\">New <code>qa_questions</code> and <code>qa_question_tags</code> for quality assurance workflows</li>\n<li class=\"\">New <code>analysis_rules</code> resource</li>\n<li class=\"\">New <code>segments</code> resource</li>\n<li class=\"\">New <code>authorized_views</code> with IAM policy support</li>\n<li class=\"\">New <code>datasets</code> and <code>views</code> resources</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"bigquery\">BigQuery<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#bigquery\" class=\"hash-link\" aria-label=\"Direct link to BigQuery\" title=\"Direct link to BigQuery\" translate=\"no\">​</a></h2>\n<p>Enhanced governance and access control (18,000+ line changes):</p>\n<ul>\n<li class=\"\">New <code>routines_iam_policies</code> for stored procedure/function IAM</li>\n<li class=\"\">Enhanced <code>row_access_policies</code></li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"healthcare-api\">Healthcare API<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#healthcare-api\" class=\"hash-link\" aria-label=\"Direct link to Healthcare API\" title=\"Direct link to Healthcare API\" translate=\"no\">​</a></h2>\n<p>Expanded metrics and data mapping (15,000+ line changes):</p>\n<ul>\n<li class=\"\">New <code>data_mapper_workspaces_iam_policies</code></li>\n<li class=\"\">Enhanced metrics: <code>hl7_v2_store_metrics</code>, <code>dicom_store_metrics</code>, <code>series_metrics</code>, <code>study_metrics</code></li>\n<li class=\"\">New <code>instances_storage_info</code> resource</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"cloud-spanner\">Cloud Spanner<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#cloud-spanner\" class=\"hash-link\" aria-label=\"Direct link to Cloud Spanner\" title=\"Direct link to Cloud Spanner\" translate=\"no\">​</a></h2>\n<p>Backup and security enhancements (14,000+ line changes):</p>\n<ul>\n<li class=\"\">New <code>backup_schedules</code> with IAM support</li>\n<li class=\"\">New <code>databases_split_points</code> resource</li>\n<li class=\"\">New <code>database_roles</code> with IAM policies</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"cloud-sql-admin\">Cloud SQL Admin<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#cloud-sql-admin\" class=\"hash-link\" aria-label=\"Direct link to Cloud SQL Admin\" title=\"Direct link to Cloud SQL Admin\" translate=\"no\">​</a></h2>\n<p>New integration and management features (12,000+ line changes):</p>\n<ul>\n<li class=\"\">New <code>instances_entra_id_certificate</code> for Microsoft Entra ID integration</li>\n<li class=\"\">New <code>instances_disk_shrink_config</code></li>\n<li class=\"\">New <code>instances_latest_recovery_time</code></li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"gke-on-prem\">GKE On-Prem<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#gke-on-prem\" class=\"hash-link\" aria-label=\"Direct link to GKE On-Prem\" title=\"Direct link to GKE On-Prem\" translate=\"no\">​</a></h2>\n<p>Enhanced IAM across VMware and Bare Metal clusters (9,000+ line changes):</p>\n<ul>\n<li class=\"\">Enhanced VMware cluster resources with IAM policies</li>\n<li class=\"\">Enhanced Bare Metal cluster resources with IAM policies</li>\n<li class=\"\">New <code>vmware_node_pools</code> and <code>bare_metal_node_pools</code> with IAM</li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"developer-connect\">Developer Connect<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#developer-connect\" class=\"hash-link\" aria-label=\"Direct link to Developer Connect\" title=\"Direct link to Developer Connect\" translate=\"no\">​</a></h2>\n<p>Git integration improvements (3,500+ line changes):</p>\n<ul>\n<li class=\"\">New <code>git_repository_links_git_refs</code> resource</li>\n<li class=\"\">New <code>users_self</code> and <code>users_access_token</code> resources</li>\n<li class=\"\">New token resources: <code>read_token</code>, <code>read_write_token</code></li>\n</ul>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"text-to-speech\">Text-to-Speech<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#text-to-speech\" class=\"hash-link\" aria-label=\"Direct link to Text-to-Speech\" title=\"Direct link to Text-to-Speech\" translate=\"no\">​</a></h2>\n<p>Enhanced <code>voices</code> and <code>text</code> resources with new capabilities.</p>\n<h2 class=\"anchor anchorTargetStickyNavbar_Vzrq\" id=\"get-started\">Get Started<a href=\"https://stackql.io/blog/providers/google-provider-december-2025-update#get-started\" class=\"hash-link\" aria-label=\"Direct link to Get Started\" title=\"Direct link to Get Started\" translate=\"no\">​</a></h2>\n<p>Update to the latest Google provider:</p>\n<div class=\"language-bash codeBlockContainer_Ckt0 theme-code-block\" style=\"--prism-color:#d6deeb;--prism-background-color:#011627\"><div class=\"codeBlockContent_QJqH\"><pre tabindex=\"0\" class=\"prism-code language-bash codeBlock_bY9V thin-scrollbar\" style=\"color:#d6deeb;background-color:#011627\"><code class=\"codeBlockLines_e6Vv\"><div class=\"token-line\" style=\"color:#d6deeb\"><span class=\"token plain\">stackql registry pull google</span><br></div></code></pre></div></div>\n<p>Let us know your thoughts! Visit us and give us a star on <a href=\"https://github.com/stackql/stackql\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"\"><strong>GitHub</strong></a>.</p>",
            "url": "https://stackql.io/blog/providers/google-provider-december-2025-update",
            "title": "Google Provider Update - December 2025",
            "summary": "Major update to the StackQL Google provider featuring a new Speech-to-Text v2 service, enhanced Vertex AI with RAG capabilities, and significant improvements across BigQuery, Spanner, and 15+ other Google Cloud services.",
            "date_modified": "2025-12-12T00:00:00.000Z",
            "author": {
                "name": "Jeffrey Aven",
                "url": "https://www.linkedin.com/in/jeffreyaven/"
            },
            "tags": [
                "stackql",
                "google cloud",
                "gcp",
                "provider",
                "vertex ai",
                "speech-to-text",
                "bigquery",
                "spanner"
            ]
        }
    ]
}