<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://stackql.io/blog</id>
    <title>StackQL Blog Feed</title>
    <updated>2026-06-04T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://stackql.io/blog"/>
    <subtitle>Cloud operations, security and automation using SQL</subtitle>
    <icon>https://stackql.io/favicon.ico</icon>
    <rights>Copyright © 2026 StackQL Studios</rights>
    <entry>
        <title type="html"><![CDATA[Autonomous Edge Defense with AI Agents and SQL]]></title>
        <id>https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql</id>
        <link href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql"/>
        <updated>2026-06-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[An agentic loop that observes Cloudflare edge traffic, tightens rate limits in response, and writes an auditable decision trail to Kafka - all through one SQL interface.]]></summary>
        <content type="html"><![CDATA[<p>Edge defense is a natural fit for an agentic loop: traffic patterns shift constantly, rate-limit thresholds need to follow, and every adjustment should leave an auditable trail. The hard part is usually the plumbing - one API for analytics, another for the rate-limit control plane, another for the durable log.</p>
<p><strong>edgepilot</strong> collapses all of that to SQL. Two Claude agents - a recon agent and an action agent - observe a live Cloudflare zone, tighten its rate-limit rule when traffic warrants, and write a decision record to a Confluent Kafka topic. Neither agent knows anything about Cloudflare's GraphQL Analytics API, Cloudflare's rulesets engine, or Confluent's Kafka REST proxy. They know SQL. The <strong><a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class="">StackQL MCP server</a></strong> does the rest.</p>
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;margin-bottom:1.5rem"><iframe style="position:absolute;top:0;left:0;width:100%;height:100%" src="https://www.youtube.com/embed/btCUiq1v29c?si=DI8HG7HvDc4zVh5R" title="edgepilot - two AI agents, one SQL interface, two clouds" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-setup">The setup<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#the-setup" class="hash-link" aria-label="Direct link to The setup" title="Direct link to The setup" translate="no">​</a></h2>
<p>The demo runs against a throwaway Cloudflare zone (<code>stackql.xyz</code>) and a freshly provisioned Confluent Cloud Kafka cluster. A small load generator drives synthetic traffic - some normal browsers, some AI-crawler user agents - at the zone so the analytics tables have something real to report.</p>
<!-- -->
<p>Both agents speak to a single MCP server - StackQL running in stdio mode - and that server fans out to whichever provider the query targets. The agents never see API URLs, auth headers, GraphQL query strings, or Kafka REST endpoints. They see tables.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-recon-agent">The recon agent<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#the-recon-agent" class="hash-link" aria-label="Direct link to The recon agent" title="Direct link to The recon agent" translate="no">​</a></h2>
<p>The recon agent runs three SELECTs. Notice that nothing in these queries hints that one is a managed cluster API, one is a GraphQL analytics endpoint, and one is a rulesets PUT/GET pair.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-find-the-active-kafka-cluster">🔍 Find the active Kafka cluster<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#-find-the-active-kafka-cluster" class="hash-link" aria-label="Direct link to 🔍 Find the active Kafka cluster" title="Direct link to 🔍 Find the active Kafka cluster" translate="no">​</a></h3>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Query</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Results</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><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"> kafka_cluster_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">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)">'$.region'</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"> 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">  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">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)">'$.cloud'</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"> cloud_provider</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">  SPLIT_PART</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">SPLIT_PART</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">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)">'$.http_endpoint'</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 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 number" style="color:rgb(247, 140, 108)">2</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 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 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"> kafka_endpoint_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"> confluent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">managed_kafka_clusters</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"> environment </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-xxxxx'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">|------------------|-----------|----------------|-------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| kafka_cluster_id | region    | cloud_provider | kafka_endpoint_id |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|------------------|-----------|----------------|-------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| lkc-abc123       | us-east-1 | aws            | pkc-xyz9w         |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|------------------|-----------|----------------|-------------------|</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-read-live-zone-analytics">📊 Read live zone analytics<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#-read-live-zone-analytics" class="hash-link" aria-label="Direct link to 📊 Read live zone analytics" title="Direct link to 📊 Read live zone analytics" translate="no">​</a></h3>
<p>This one talks to Cloudflare's GraphQL Analytics API under the hood. The agent sees a table.</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Query</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Results</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><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)">datetime</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> client_country_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> edge_response_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">       client_request_http_method_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> requests</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> bytes</span><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">http_requests_adaptive_groups</span><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_tag </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 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-06-04T09:30: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">   until    </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-06-04T10:00:00Z'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">|----------------------|---------------------|----------------------|---------------------------------|----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| datetime             | client_country_name | edge_response_status | client_request_http_method_name | requests | bytes  |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------|---------------------|----------------------|---------------------------------|----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 2026-06-04T09:31:00Z | United States       | 200                  | GET                             | 412      | 184320 |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------|---------------------|----------------------|---------------------------------|----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 2026-06-04T09:31:00Z | Germany             | 200                  | GET                             | 87       | 39424  |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------|---------------------|----------------------|---------------------------------|----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 2026-06-04T09:32:00Z | United States       | 429                  | GET                             | 23       | 9728   |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------|---------------------|----------------------|---------------------------------|----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 2026-06-04T09:34:00Z | Singapore           | 200                  | POST                            | 19       | 8442   |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------|---------------------|----------------------|---------------------------------|----------|--------|</span><br></div></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-inspect-the-current-rate-limit-rule">🛡️ Inspect the current rate-limit rule<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#%EF%B8%8F-inspect-the-current-rate-limit-rule" class="hash-link" aria-label="Direct link to 🛡️ Inspect the current rate-limit rule" title="Direct link to 🛡️ Inspect the current rate-limit rule" translate="no">​</a></h3>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Query</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Results</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><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">rules</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].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"> rule_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">rules</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].description'</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"> description</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">rules</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].ratelimit.requests_per_period'</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"> threshold</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">rules</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].ratelimit.period'</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</span><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">rulesets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">phases</span><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 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">   ruleset_phase </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)">'http_ratelimit'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">|----------------------------------|----------------------------------|----------------------------------------|-----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| id                               | rule_id                          | description                            | threshold | period |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------------------|----------------------------------|----------------------------------------|-----------|--------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 1a2b3c4d5e6f7890abcdef1234567890 | 9f8e7d6c5b4a3210fedcba9876543210 | edgepilot demo rule (managed by sqld)  | 100       | 10     |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|----------------------------------|----------------------------------|----------------------------------------|-----------|--------|</span><br></div></code></pre></div></div></div></div></div>
<p>The recon agent hands these results to the action agent as a short plain-text report.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-action-agent">The action agent<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#the-action-agent" class="hash-link" aria-label="Direct link to The action agent" title="Direct link to The action agent" translate="no">​</a></h2>
<p>The action agent does two things: tighten the rate limit on Cloudflare, then write a decision record to Confluent Kafka. Both are mutations, expressed as standard SQL.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-tighten-the-cloudflare-rate-limit">✏️ Tighten the Cloudflare rate limit<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#%EF%B8%8F-tighten-the-cloudflare-rate-limit" class="hash-link" aria-label="Direct link to ✏️ Tighten the Cloudflare rate limit" title="Direct link to ✏️ Tighten the Cloudflare rate limit" translate="no">​</a></h3>
<p>StackQL implements <code>REPLACE</code> against Cloudflare's modern rulesets PUT endpoint. The agent doesn't have to know that under the covers this is a full-document replace of every rule in the <code>http_ratelimit</code> phase entrypoint.</p>
<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)">REPLACE</span><span class="token plain"> cloudflare</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">rulesets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">phases</span><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"> rules </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)">    "action": "block",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">    "ratelimit": {</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">      "characteristics": ["ip.src", "cf.colo.id"],</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">      "period": 10,</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">      "requests_per_period": 30,</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">      "mitigation_timeout": 10</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)">    "expression": "len(http.request.uri.path) gt 0",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">    "description": "edgepilot demo rule (managed by stackql-deploy)",</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">    "enabled": true</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 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 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">   ruleset_phase </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)">'http_ratelimit'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-log-the-decision-to-kafka">📨 Log the decision to Kafka<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#-log-the-decision-to-kafka" class="hash-link" aria-label="Direct link to 📨 Log the decision to Kafka" title="Direct link to 📨 Log the decision to Kafka" translate="no">​</a></h3>
<p>And the action agent publishes a record to Confluent Kafka - again, as plain SQL. No producer client, no AVRO schema registry plumbing, no REST endpoint to look up. StackQL resolves the cluster's data-plane endpoint from the cluster id and posts the record.</p>
<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"> kafka</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">kafka</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">records</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">  cluster_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> kafka_endpoint_id</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"> cloud_provider</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">  topic_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)">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 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)">'lkc-abc123'</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)">'pkc-xyz9w'</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><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)">'aws'</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)">'edge-autopilot-decisions'</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)">'{"type":"STRING","data":"edgepilot.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">  </span><span class="token string" style="color:rgb(173, 219, 103)">'{"type":"JSON","data":{"agent":"action","action":"tighten_rate_limit","threshold":30,"reasoning":"elevated bot traffic, dropping threshold from 100 to 30","timestamp":"2026-06-04T10:00:00Z"}}'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>The record appears live in the <strong>Confluent Cloud UI -&gt; Topics -&gt; edge-autopilot-decisions -&gt; Messages</strong> tab.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-this-works-as-an-agentic-loop">Why this works as an agentic loop<a href="https://stackql.io/blog/autonomous-edge-defense-ai-agents-sql#why-this-works-as-an-agentic-loop" class="hash-link" aria-label="Direct link to Why this works as an agentic loop" title="Direct link to Why this works as an agentic loop" translate="no">​</a></h2>
<p>Edge defense has three properties that make it well-suited to agents, and three properties that usually make it painful to wire up. SQL-over-MCP collapses the painful side:</p>
<ul>
<li class=""><em>The observe step (analytics), the act step (rate-limit control plane), and the audit step (durable log) normally each have their own SDK, auth model, and request shape. Here they're the same shape: a query.</em></li>
<li class=""><em>LLMs are reliable SQL generators - far more reliable than they are at chaining three provider-specific SDK calls correctly. Constrain the schema and the agent will stay on the rails.</em></li>
<li class=""><em>Adding a new signal source (WAF events, R2 logs, Workers analytics) or a new action surface (a different CDN, a different broker) is a registry pull, not a refactor of the agent loop.</em></li>
</ul>
<p>The whole loop - observe, decide, act, audit - takes about 30 to 60 seconds to run.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>The full demo, including infrastructure provisioning via <a href="https://github.com/stackql/stackql-deploy" target="_blank" rel="noopener noreferrer" class=""><strong><code>stackql-deploy</code></strong></a>, the load generator, and a Claude Desktop variant, is at <a href="https://github.com/stackql/edgepilot" target="_blank" rel="noopener noreferrer" class=""><strong><code>stackql/edgepilot</code></strong></a>.</p></div></div>
<p>Try wiring StackQL into your own agent loop:</p>
<ul>
<li class=""><em>Pick any provider in the <a href="https://registry.stackql.io/" target="_blank" rel="noopener noreferrer" class="">StackQL registry</a> and pull it.</em></li>
<li class=""><em>Point an MCP-aware client (Claude Desktop, Cline, or your own SDK loop) at the StackQL MCP server.</em></li>
<li class=""><em>Let the model discover the schema via <code>SHOW METHODS</code> and <code>DESCRIBE</code> - no fine-tuning, no provider-specific prompting.</em></li>
</ul>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="mcp" term="mcp"/>
        <category label="anthropic" term="anthropic"/>
        <category label="cloudflare" term="cloudflare"/>
        <category label="confluent" term="confluent"/>
        <category label="kafka" term="kafka"/>
        <category label="ai-agents" term="ai-agents"/>
        <category label="agentic" term="agentic"/>
        <category label="edge-security" term="edge-security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cloudflare Provider - May 2026]]></title>
        <id>https://stackql.io/blog/updated-cloudflare-provider-available</id>
        <link href="https://stackql.io/blog/updated-cloudflare-provider-available"/>
        <updated>2026-05-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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.]]></summary>
        <content type="html"><![CDATA[<p>We've released the latest version of the <a href="https://stackql.io/docs/providers" target="_blank" rel="noopener noreferrer" class=""><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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="service-highlights">Service highlights<a href="https://stackql.io/blog/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>
<p>Key services in this release include:</p>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authentication">Authentication<a href="https://stackql.io/blog/updated-cloudflare-provider-available#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">​</a></h2>
<p>Authenticate with a Cloudflare API token via the <code>CLOUDFLARE_API_TOKEN</code> environment variable:</p>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-queries">Example queries<a href="https://stackql.io/blog/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>
<p>List your zones:</p>
<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_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>
<p>Inspect Workers scripts in an account:</p>
<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>
<p>List DNS records for a zone:</p>
<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>
<p>Pull a Radar BGP summary:</p>
<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">bgp_routes_stats</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="binary-and-non-json-responses">Binary and non-JSON responses<a href="https://stackql.io/blog/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>
<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>
<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"> data__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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="https://stackql.io/blog/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>
<p>Pull the provider from the public registry:</p>
<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>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="cloudflare" term="cloudflare"/>
        <category label="provider" term="provider"/>
        <category label="zero trust" term="zero trust"/>
        <category label="workers" term="workers"/>
        <category label="r2" term="r2"/>
        <category label="dns" term="dns"/>
        <category label="radar" term="radar"/>
        <category label="ai" term="ai"/>
        <category label="stream" term="stream"/>
        <category label="magic transit" term="magic transit"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Confluent Provider Update - May 2026]]></title>
        <id>https://stackql.io/blog/confluent-provider-may-2026-update</id>
        <link href="https://stackql.io/blog/confluent-provider-may-2026-update"/>
        <updated>2026-05-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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.]]></summary>
        <content type="html"><![CDATA[<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-services">New Services<a href="https://stackql.io/blog/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>
<p>The eight new services added in this update are:</p>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="updates">Updates<a href="https://stackql.io/blog/confluent-provider-may-2026-update#updates" class="hash-link" aria-label="Direct link to Updates" title="Direct link to Updates" translate="no">​</a></h2>
<p>This release also adds 40 additional resources across existing services, expanding coverage for:</p>
<ul>
<li class=""><code>kafka</code> - additional cluster configuration and topic-level resources</li>
<li class=""><code>connect</code> - new connector status, offset, and task management resources</li>
<li class=""><code>flink</code> - expanded coverage for Flink statements, compute pools, and artifacts</li>
<li class=""><code>iam</code> - new resources for service accounts, identity providers, and role bindings</li>
<li class=""><code>networking</code> - additional resources for transit gateways, peerings, and DNS forwarders</li>
<li class=""><code>schema_registry</code> - new resources for schema exporters, modes, and compatibility</li>
<li class=""><code>billing</code> - new cost and usage resources</li>
<li class=""><code>metrics</code> - additional query and descriptor resources</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get Started<a href="https://stackql.io/blog/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>
<p>Pull the latest Confluent provider:</p>
<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>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="confluent" term="confluent"/>
        <category label="provider" term="provider"/>
        <category label="kafka" term="kafka"/>
        <category label="tableflow" term="tableflow"/>
        <category label="stream-designer" term="stream-designer"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitHub Provider Update - April 2026]]></title>
        <id>https://stackql.io/blog/github-provider-april-2026-update</id>
        <link href="https://stackql.io/blog/github-provider-april-2026-update"/>
        <updated>2026-04-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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.]]></summary>
        <content type="html"><![CDATA[<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-services">New Services<a href="https://stackql.io/blog/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>
<p>Some of the newly added services of note include:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="agent_tasks">agent_tasks<a href="https://stackql.io/blog/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>
<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>
<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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="campaigns">campaigns<a href="https://stackql.io/blog/github-provider-april-2026-update#campaigns" class="hash-link" aria-label="Direct link to campaigns" title="Direct link to campaigns" translate="no">​</a></h3>
<p>The <code>campaigns</code> service covers GitHub's security campaign management, part of GitHub Advanced Security. Resources include:</p>
<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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="classroom">classroom<a href="https://stackql.io/blog/github-provider-april-2026-update#classroom" class="hash-link" aria-label="Direct link to classroom" title="Direct link to classroom" translate="no">​</a></h3>
<p>The <code>classroom</code> service brings GitHub Classroom into StackQL. Resources include:</p>
<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>
<p>This is useful for institutions managing GitHub Classroom at scale - querying assignment completion or generating reports across multiple classrooms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hosted_compute">hosted_compute<a href="https://stackql.io/blog/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>
<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>
<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>
<p>This is relevant if you're using GitHub's hosted compute with Azure private networking or similar integrations.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="private_registries">private_registries<a href="https://stackql.io/blog/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>
<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>
<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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="enterprise_teams">enterprise_teams<a href="https://stackql.io/blog/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>
<p>The <code>enterprise_teams</code> service provides enterprise-scoped team management, distinct from org-level teams. Resources include:</p>
<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>
<p>This is useful for enterprises managing teams that span multiple organizations.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="updates">Updates<a href="https://stackql.io/blog/github-provider-april-2026-update#updates" class="hash-link" aria-label="Direct link to Updates" title="Direct link to Updates" translate="no">​</a></h2>
<p>Notable updates to existing services include:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="actions">actions<a href="https://stackql.io/blog/github-provider-april-2026-update#actions" class="hash-link" aria-label="Direct link to actions" title="Direct link to actions" translate="no">​</a></h3>
<p>New resources added to the <code>actions</code> service:</p>
<ul>
<li class=""><code>hosted_runners</code> - query and manage GitHub-hosted runner configurations at the org or repo level</li>
<li class=""><code>runner_group_network_configurations</code> - network config details for runner groups</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="orgs">orgs<a href="https://stackql.io/blog/github-provider-april-2026-update#orgs" class="hash-link" aria-label="Direct link to orgs" title="Direct link to orgs" translate="no">​</a></h3>
<ul>
<li class="">New <code>org_roles</code> and <code>org_role_assignments</code> resources for querying custom org role definitions and their assignments</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="repos">repos<a href="https://stackql.io/blog/github-provider-april-2026-update#repos" class="hash-link" aria-label="Direct link to repos" title="Direct link to repos" translate="no">​</a></h3>
<ul>
<li class="">New <code>repo_rules_suites</code> resource for querying rule suite evaluation history (useful for auditing branch protection rule evaluations)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get Started<a href="https://stackql.io/blog/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>
<p>Pull the latest GitHub provider:</p>
<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>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="github" term="github"/>
        <category label="provider" term="provider"/>
        <category label="github actions" term="github actions"/>
        <category label="github classroom" term="github classroom"/>
        <category label="hosted compute" term="hosted compute"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[stackql-deploy 2.0 - Rewritten in Rust]]></title>
        <id>https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite</id>
        <link href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite"/>
        <updated>2026-03-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[stackql-deploy 2.0 is a full rewrite in Rust - single static binary, no Python runtime, embedded StackQL server, and same CLI interface.]]></summary>
        <content type="html"><![CDATA[<p><code>stackql-deploy</code> 2.0 is a full rewrite in Rust. The Python package (<code>stackql-deploy</code> on PyPi) is archived at <code>1.9.4</code>. CLI interface and stack file format are unchanged - no migration required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-rust">Why Rust<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#why-rust" class="hash-link" aria-label="Direct link to Why Rust" title="Direct link to Why Rust" translate="no">​</a></h2>
<p>The move to Rust was primarily about distribution and operational simplicity. Rust also brings stronger guarantees around performance and memory safety. Running everything in-process without Foreign Function Interface (FFI) boundaries simplifies the architecture while maintaining predictable resource usage.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="embedded-postgres-wire-protocol-server">Embedded Postgres Wire Protocol Server<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#embedded-postgres-wire-protocol-server" class="hash-link" aria-label="Direct link to Embedded Postgres Wire Protocol Server" title="Direct link to Embedded Postgres Wire Protocol Server" translate="no">​</a></h2>
<p>The most significant functional change in 2.0 is that <code>stackql-deploy</code> now runs the StackQL engine as an embedded in-process server over a local postgres wire protocol connection rather than shelling out to the StackQL binary as an external process.</p>
<p>There is nothing to start, stop, or configure. The server is lifecycle-managed by <code>stackql-deploy</code> itself and binds to <code>localhost</code> only - no port is exposed on the network, no inbound firewall rules needed in CI.</p>
<p>The previous model spawned a new StackQL process per operation. The embedded server keeps a persistent connection for the duration of a deployment run. For stacks with many resources, the reduction in process spawn overhead is noticeable - particularly on Windows where process creation is expensive.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="additional-features-added">Additional Features Added<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#additional-features-added" class="hash-link" aria-label="Direct link to Additional Features Added" title="Direct link to Additional Features Added" translate="no">​</a></h2>
<p>In addition to added the architectural change to use the embedded server, several other workflow improvements were added including:</p>
<ul>
<li class=""><strong>Enabling resource scoped variable exports in <code>/*+ exists */</code> queries</strong>: When an exists query returns a named field (e.g. <code>vpc_id</code>) instead of <code>count</code>, the value is captured as a resource-scoped variable (<code>this.vpc_id</code>) and made available to all subsequent queries for that resource (e.g. statecheck, exports). This eliminates the need for redundant lookups to resolve resource identifiers between query stages.</li>
<li class=""><strong>Support for capturing <code>RETURNING</code> payloads from DML operations</strong>: <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code> statements can include a <code>RETURNING</code> clause. Fields from the response can be mapped to resource-scoped variables via <code>return_vals</code> in the manifest, keyed by operation (<code>create</code>, <code>update</code>, <code>delete</code>). This allows identifiers assigned by the provider during creation to be used immediately without a round-trip query.</li>
<li class=""><strong>Additional template filters</strong>: Including the <code>to_aws_tag_filters</code> filter, which converts <code>global_tags</code> to the AWS Resource Groups Tagging API <code>TagFilters</code> format, and type-preserving YAML-to-JSON serialization that maintains string types through the rendering pipeline.</li>
<li class=""><strong>Improved logging and exception handling</strong>: Enhanced visibility simplifying troubleshooting.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installation">Installation<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation" translate="no">​</a></h2>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Linux / macOS</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Windows</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">GitHub Releases</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">GitHub Actions</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Cargo</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><style data-emotion="css 1nv5oh">.css-1nv5oh{border:1px solid #e0e0e0;border-radius:4px;padding:24px;margin-bottom:16px;}</style><div class="MuiBox-root css-1nv5oh"><p>The canonical install URL detects your OS and redirects to the latest release asset automatically.  You can also download directly from your browser at <a href="https://get-stackql-deploy.io/" target="_blank" rel="noopener noreferrer" class=""><strong>get-stackql-deploy.io</strong></a>.</p><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">curl -L https://get-stackql-deploy.io | tar xzf -</span><br></div></code></pre></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><style data-emotion="css 1nv5oh">.css-1nv5oh{border:1px solid #e0e0e0;border-radius:4px;padding:24px;margin-bottom:16px;}</style><div class="MuiBox-root css-1nv5oh"><p>Use the PowerShell script below or download directly from your browser at <a href="https://get-stackql-deploy.io/" target="_blank" rel="noopener noreferrer" class=""><strong>get-stackql-deploy.io</strong></a>.</p><div class="language-powershell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-powershell codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token function" style="color:rgb(130, 170, 255)">Invoke-WebRequest</span><span class="token plain"> https:</span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token operator" style="color:rgb(127, 219, 202)">/</span><span class="token function" style="color:rgb(130, 170, 255)">get-stackql</span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain">deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">io </span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain">OutFile stackql-deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">zip</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)">Expand-Archive</span><span class="token plain"> stackql-deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">zip </span><span class="token operator" style="color:rgb(127, 219, 202)">-</span><span class="token plain">DestinationPath </span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><br></div></code></pre></div></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><style data-emotion="css 1nv5oh">.css-1nv5oh{border:1px solid #e0e0e0;border-radius:4px;padding:24px;margin-bottom:16px;}</style><div class="MuiBox-root css-1nv5oh"><p>Pre-built binaries are attached to every release on the <a href="https://github.com/stackql/stackql-deploy/releases" target="_blank" rel="noopener noreferrer" class="">releases page</a>. A <code>SHA256SUMS</code> file is included for verification.</p><table><thead><tr><th>Platform</th><th>Asset</th></tr></thead><tbody><tr><td>Linux x86_64</td><td><code>stackql-deploy-linux-x86_64.tar.gz</code></td></tr><tr><td>Linux arm64</td><td><code>stackql-deploy-linux-arm64.tar.gz</code></td></tr><tr><td>macOS Universal (Apple Silicon + Intel)</td><td><code>stackql-deploy-macos-universal.tar.gz</code></td></tr><tr><td>Windows x86_64</td><td><code>stackql-deploy-windows-x86_64.zip</code></td></tr></tbody></table></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><style data-emotion="css 1nv5oh">.css-1nv5oh{border:1px solid #e0e0e0;border-radius:4px;padding:24px;margin-bottom:16px;}</style><div class="MuiBox-root css-1nv5oh"><p>Use the <a href="https://github.com/marketplace/actions/stackql-deploy" target="_blank" rel="noopener noreferrer" class=""><code>stackql/stackql-deploy-action</code></a> to run <code>build</code> or <code>test</code> commands in your CI pipeline. Provider credentials are passed via environment variables sourced from GitHub Actions Secrets.</p><p><strong>Deploy a stack:</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token key atrule" style="color:rgb(255, 203, 139)">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">  </span><span class="token key atrule" style="color:rgb(255, 203, 139)">deploy</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 key atrule" style="color:rgb(255, 203, 139)">runs-on</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> ubuntu</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">latest</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule" style="color:rgb(255, 203, 139)">env</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 key atrule" style="color:rgb(255, 203, 139)">GOOGLE_CREDENTIALS</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</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"> secrets.GOOGLE_CREDENTIALS </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><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule" style="color:rgb(255, 203, 139)">steps</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 punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:rgb(255, 203, 139)">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> actions/checkout@v4</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><span class="token key atrule" style="color:rgb(255, 203, 139)">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> stackql/stackql</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">action@v2</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule" style="color:rgb(255, 203, 139)">with</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 key atrule" style="color:rgb(255, 203, 139)">command</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)">'build'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">stack_dir</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)">'examples/my-stack'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">stack_env</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)">'prod'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">env_vars</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)">'GOOGLE_PROJECT=my-project'</span><br></div></code></pre></div></div><p><strong>Deploy and capture outputs:</strong></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml 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">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:rgb(255, 203, 139)">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Deploy Stack</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule" style="color:rgb(255, 203, 139)">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> stackql</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">deploy</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule" style="color:rgb(255, 203, 139)">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> stackql/stackql</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">action@v2</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule" style="color:rgb(255, 203, 139)">with</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 key atrule" style="color:rgb(255, 203, 139)">command</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)">'build'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">stack_dir</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)">'examples/my-stack'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">stack_env</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)">'prod'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">output_file</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)">'deployment-outputs.json'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule" style="color:rgb(255, 203, 139)">env_vars</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)">'GOOGLE_PROJECT=my-project'</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 punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:rgb(255, 203, 139)">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Use outputs</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule" style="color:rgb(255, 203, 139)">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token scalar string" style="color:rgb(173, 219, 103)"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token scalar string" style="color:rgb(173, 219, 103)">          echo '${{ steps.stackql-deploy.outputs.deployment_outputs }}' | jq .</span><br></div></code></pre></div></div><p>See the <a href="https://github.com/stackql/stackql-deploy-action" target="_blank" rel="noopener noreferrer" class=""><strong>stackql-deploy-action repo</strong></a> or the <a href="https://github.com/marketplace/actions/stackql-deploy" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub Action Marketplace</strong></a> for the full input/output reference.</p></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><style data-emotion="css 1nv5oh">.css-1nv5oh{border:1px solid #e0e0e0;border-radius:4px;padding:24px;margin-bottom:16px;}</style><div class="MuiBox-root css-1nv5oh"><p>If you have the Rust toolchain installed (<code>rustup</code> is the recommended way to get it on any platform), <code>cargo install</code> builds and installs the binary directly from <a href="https://crates.io/crates/stackql-deploy" target="_blank" rel="noopener noreferrer" class="">crates.io</a>.</p><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">cargo install stackql-deploy</span><br></div></code></pre></div></div></div></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage">Usage<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no">​</a></h2>
<p>The CLI interface is unchanged from the Python version:</p>
<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"># deploy a stack</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql-deploy build my-stack prod \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --e GOOGLE_PROJECT=${GOOGLE_PROJECT}</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"># test a stack</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql-deploy test my-stack prod \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --e GOOGLE_PROJECT=${GOOGLE_PROJECT}</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"># tear down a stack</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql-deploy teardown my-stack prod \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --e GOOGLE_PROJECT=${GOOGLE_PROJECT}</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"># dry run</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">stackql-deploy build my-stack prod \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --e GOOGLE_PROJECT=${GOOGLE_PROJECT} \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --dry-run</span><br></div></code></pre></div></div>
<p>Stack files and <code>stackql_manifest.yml</code> structure are unaffected - no migration work needed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-package-deprecation">Python Package Deprecation<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#python-package-deprecation" class="hash-link" aria-label="Direct link to Python Package Deprecation" title="Direct link to Python Package Deprecation" translate="no">​</a></h2>
<p><code>stackql-deploy 1.9.4</code> on PyPi is the final Python release. The Python source repository is archived. If you have <code>pip install stackql-deploy</code> in any scripts or CI pipelines, replace it with one of the install methods above. The <code>1.9.4</code> package remains on PyPi and installable, but will not receive updates.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="links">Links<a href="https://stackql.io/blog/stackql-deploy-2-0-rust-rewrite#links" class="hash-link" aria-label="Direct link to Links" title="Direct link to Links" translate="no">​</a></h2>
<ul>
<li class="">GitHub: <a href="https://github.com/stackql/stackql-deploy" target="_blank" rel="noopener noreferrer" class="">github.com/stackql/stackql-deploy</a></li>
<li class="">crates.io: <a href="https://crates.io/crates/stackql-deploy" target="_blank" rel="noopener noreferrer" class="">crates.io/crates/stackql-deploy</a></li>
<li class="">StackQL docs: <a href="https://stackql.io/docs" target="_blank" rel="noopener noreferrer" class="">stackql.io/docs</a></li>
</ul>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="stackql-deploy" term="stackql-deploy"/>
        <category label="rust" term="rust"/>
        <category label="infrastructure-as-code" term="infrastructure-as-code"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Run StackQL Queries from the Databricks Web Terminal]]></title>
        <id>https://stackql.io/blog/stackql-in-databricks-web-terminal</id>
        <link href="https://stackql.io/blog/stackql-in-databricks-web-terminal"/>
        <updated>2026-02-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Run StackQL SQL queries against your Databricks workspace directly from the Databricks web terminal.]]></summary>
        <content type="html"><![CDATA[<p>If you have access to a Databricks workspace, you can run StackQL queries directly from the Databricks Web Terminal using your Databricks identity.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works">How It Works<a href="https://stackql.io/blog/stackql-in-databricks-web-terminal#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<p>Download the latest release of <code>stackql</code>, then run the convenience script included (similar scripts are included for other cloud provider terminals - e.g. AWS Cloud Shell).</p>
<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">curl -L https://bit.ly/stackql-zip -O &amp;&amp; unzip stackql-zip</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">sh stackql-databricks-shell.sh</span><br></div></code></pre></div></div>
<video controls="" width="100%" preload="metadata"><source src="https://pub-690c90d9ca2e4ad09b9455b620bd429f.r2.dev/databricks-stackql-web-terminal-demo.mp4" type="video/mp4"></video>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-queries">Example Queries<a href="https://stackql.io/blog/stackql-in-databricks-web-terminal#example-queries" class="hash-link" aria-label="Direct link to Example Queries" title="Direct link to Example Queries" translate="no">​</a></h2>
<p>Here are the sample queries run in the video, just change the <code>deployment_name</code> for your workspace.</p>
<p><strong>User entitlements</strong></p>
<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">  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">  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">  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">  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">  entitlement</span><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">iam</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">vw_user_entitlements</span><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-74aa95f7-8c7e'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p><strong>All workspace settings</strong></p>
<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"></span><br></div><div class="token-line" style="color:#d6deeb"><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)">'dbc-74aa95f7-8c7e'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p><strong>Tag policies filtered by key prefix</strong></p>
<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">  tag_key </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)">key</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">  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"> databricks_workspace</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">tag_policies</span><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-74aa95f7-8c7e'</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)">LIKE</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'class%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p><strong>Catalog count by type</strong></p>
<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">  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 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"> num_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)">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-74aa95f7-8c7e'</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"> catalog_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provider-coverage">Provider Coverage<a href="https://stackql.io/blog/stackql-in-databricks-web-terminal#provider-coverage" class="hash-link" aria-label="Direct link to Provider Coverage" title="Direct link to Provider Coverage" translate="no">​</a></h2>
<p>The <code>databricks_workspace</code> provider covers workspace related services, the <code>databricks_account</code> provider covers account-level operations including provisioning, billing, and account IAM.</p>
<p>The web terminal flow covers workspace-scoped queries using the token of the logged-in user. For account-level queries (provisioning, billing, account IAM), you need a Databricks service principal with account admin rights and OAuth2 credentials:</p>
<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>
<p>These are the same variables used by the Databricks CLI and Terraform provider, so if you already have those configured the auth story is identical.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get Started<a href="https://stackql.io/blog/stackql-in-databricks-web-terminal#get-started" class="hash-link" aria-label="Direct link to Get Started" title="Direct link to Get Started" translate="no">​</a></h2>
<p>Full provider documentation:</p>
<ul>
<li class=""><a href="https://databricks-workspace-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Databricks Workspace Provider for StackQL</strong></a></li>
<li class=""><a href="https://databricks-account-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Databricks Account Provider for StackQL</strong></a></li>
</ul>
<p>Visti <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>StackQL on GitHub</strong></a>.</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="databricks" term="databricks"/>
        <category label="sql" term="sql"/>
        <category label="databricks workspace" term="databricks workspace"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Databricks Providers for StackQL Released]]></title>
        <id>https://stackql.io/blog/new-databricks-providers-available</id>
        <link href="https://stackql.io/blog/new-databricks-providers-available"/>
        <updated>2026-02-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Updated providers for Databricks released covering account and workspace operations, with over 30 services, 300 resources, and nearly 1,000 operations queryable using SQL.]]></summary>
        <content type="html"><![CDATA[<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provider-structure">Provider Structure<a href="https://stackql.io/blog/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>
<p>The following updated providers are available:</p>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="coverage">Coverage<a href="https://stackql.io/blog/new-databricks-providers-available#coverage" class="hash-link" aria-label="Direct link to Coverage" title="Direct link to Coverage" translate="no">​</a></h2>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-queries">Example Queries<a href="https://stackql.io/blog/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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="list-workspaces-in-an-account">List workspaces in an account<a href="https://stackql.io/blog/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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="query-account-users-and-roles">Query account users and roles<a href="https://stackql.io/blog/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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="list-catalogs-in-a-workspace">List catalogs in a workspace<a href="https://stackql.io/blog/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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="download-billable-usage-to-csv">Download billable usage to CSV<a href="https://stackql.io/blog/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>
<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>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authentication">Authentication<a href="https://stackql.io/blog/new-databricks-providers-available#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">​</a></h2>
<p>Both providers authenticate using OAuth2 with a Databricks service principal. Set the following environment variables:</p>
<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>
<p>These are the same variables used by Terraform, the Databricks SDKs, and the Databricks CLI.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get Started<a href="https://stackql.io/blog/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>
<p>Pull the providers:</p>
<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>
<p>Start querying via the <code>shell</code> or <code>exec</code>:</p>
<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>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="databricks" term="databricks"/>
        <category label="provider" term="provider"/>
        <category label="infrastructure-as-code" term="infrastructure-as-code"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Dedicated AWS Cloud Control Provider Released]]></title>
        <id>https://stackql.io/blog/new-awscc-provider-available</id>
        <link href="https://stackql.io/blog/new-awscc-provider-available"/>
        <updated>2026-01-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Introducing the standalone StackQL AWS Cloud Control provider with full CRUDL support, optimized resource naming, and comprehensive coverage of AWS Cloud Control API resources.]]></summary>
        <content type="html"><![CDATA[<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="resource-naming-convention">Resource Naming Convention<a href="https://stackql.io/blog/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>
<p>Resources follow a clear pattern to differentiate operations:</p>
<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>
<br>
<p>This separation means listing thousands of resources won't trigger rate limits from individual <code>GET</code> calls:</p>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provider-coverage">Provider Coverage<a href="https://stackql.io/blog/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>
<p>The <code>awscc</code> provider includes:</p>
<ul>
<li class=""><strong>237 services</strong> and <strong>2371 resources</strong> covering the breadth of AWS</li>
<li class=""><strong>Full CRUDL support</strong> for all Cloud Control compatible resources</li>
<li class=""><strong>Consistent schema</strong> derived from AWS CloudFormation resource specifications</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-operations">Example Operations<a href="https://stackql.io/blog/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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-an-s3-bucket">Create an S3 Bucket<a href="https://stackql.io/blog/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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="query-ec2-instances">Query EC2 Instances<a href="https://stackql.io/blog/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>
<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>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="delete-a-resource">Delete a Resource<a href="https://stackql.io/blog/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>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enhanced-documentation">Enhanced Documentation<a href="https://stackql.io/blog/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>
<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>
<ul>
<li class=""><strong>Interactive schema explorer</strong> with expandable nested property trees</li>
<li class=""><strong>Complete field documentation</strong> including complex object structures</li>
<li class=""><strong>Ready-to-use SQL examples</strong> for <code>SELECT</code>, <code>INSERT</code>, and <code>DELETE</code> operations</li>
<li class=""><strong>IAM permissions reference</strong> for each resource operation</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get Started<a href="https://stackql.io/blog/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>
<p>Pull the new provider:</p>
<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>
<p>Query your AWS resources:</p>
<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>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="aws" term="aws"/>
        <category label="awscc" term="awscc"/>
        <category label="cloud control" term="cloud control"/>
        <category label="provider" term="provider"/>
        <category label="infrastructure-as-code" term="infrastructure-as-code"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[StackQL Joins the Linux Foundation and Agentic AI Foundation]]></title>
        <id>https://stackql.io/blog/stackql-joins-linux-foundation-agentic-ai-foundation</id>
        <link href="https://stackql.io/blog/stackql-joins-linux-foundation-agentic-ai-foundation"/>
        <updated>2026-01-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[StackQL Studios joins the Linux Foundation and Agentic AI Foundation as a Silver Member.]]></summary>
        <content type="html"><![CDATA[<a href="https://aaif.io/members/"><img src="https://stackql.io/img/aaif_memberbadge_silver.svg" alt="AAIF Member" style="height:90px;margin-right:15px"></a>
<a href="https://www.linuxfoundation.org/about/members"><img src="https://stackql.io/img/LF_MemberLevel_silver.svg" alt="Linux Foundation Member" style="height:90px"></a>
<p>StackQL Studios has joined the Linux Foundation and the Agentic AI Foundation (AAIF) as a Silver Member.</p>
<p>As agentic AI moves from experimentation toward production workloads, we believe the infrastructure layer matters. Open, interoperable standards will be essential for AI agents to work reliably across cloud providers, data platforms, and enterprise systems.</p>
<p>StackQL provides a SQL-based interface for querying, provisioning, and managing cloud infrastructure across providers. Our work on the <a href="https://github.com/stackql/stackql-ai" target="_blank" rel="noopener noreferrer" class="">StackQL MCP Server</a> brings this capability to AI agents through the Model Context Protocol, enabling agents to interact with cloud resources using natural language while maintaining the governance and auditability that production systems require.</p>
<p>Joining AAIF aligns with our long-standing commitment to open-source infrastructure tooling. We look forward to contributing to the foundation's work on MCP, agent runtimes, and the broader ecosystem of standards that will shape how AI agents interact with the systems they manage.</p>
<p>More information about the Agentic AI Foundation is available at <a href="https://aaif.io/" target="_blank" rel="noopener noreferrer" class="">aaif.io</a>.</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="open-source" term="open-source"/>
        <category label="linux-foundation" term="linux-foundation"/>
        <category label="agentic-ai" term="agentic-ai"/>
        <category label="mcp" term="mcp"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Google Provider Update - December 2025]]></title>
        <id>https://stackql.io/blog/google-provider-december-2025-update</id>
        <link href="https://stackql.io/blog/google-provider-december-2025-update"/>
        <updated>2025-12-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[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.]]></summary>
        <content type="html"><![CDATA[<p>We've released a major update to the <a href="https://stackql.io/docs/providers" target="_blank" rel="noopener noreferrer" class=""><strong>StackQL Google provider</strong></a> with a new service, enhanced AI/ML capabilities, and improvements across 177 service files.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-service-speech-to-text-v2">New Service: Speech-to-Text v2<a href="https://stackql.io/blog/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>
<p>The <code>speechv2</code> service brings Cloud Speech-to-Text API v2 to StackQL with 6 resources:</p>
<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>
<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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="vertex-ai--ai-platform">Vertex AI / AI Platform<a href="https://stackql.io/blog/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>
<p>The largest update in this release with 87,000+ line changes introduces powerful new RAG and evaluation capabilities:</p>
<ul>
<li class=""><strong>RAG Resources</strong>: <code>rag_corpora</code>, <code>rag_files</code>, <code>rag_engine_config</code> for Retrieval-Augmented Generation</li>
<li class=""><strong>Conversational AI</strong>: New <code>chat</code> resource</li>
<li class=""><strong>Model Evaluation</strong>: <code>evaluation_sets</code> and <code>evaluation_items</code> for systematic model assessment</li>
<li class=""><strong>New Resources</strong>: <code>science</code>, <code>invoke</code>, and <code>openapi</code> resources</li>
<li class=""><strong>Performance</strong>: Enhanced <code>cache_config</code> for caching configurations</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="discovery-engine">Discovery Engine<a href="https://stackql.io/blog/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>
<p>Major enhancements (50,000+ line changes) for search and conversational AI:</p>
<ul>
<li class="">New <code>assistants</code> resource</li>
<li class="">New <code>sitemaps</code> resource for site search</li>
<li class="">New <code>custom_models</code> resource</li>
<li class="">Enhanced <code>sessions</code> and <code>answers</code> for conversational search</li>
<li class="">New <code>authorized_views</code> and <code>authorized_view_sets</code> for access control</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="contact-center-ai-insights">Contact Center AI Insights<a href="https://stackql.io/blog/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>
<p>Quality assurance and analytics improvements (20,000+ line changes):</p>
<ul>
<li class="">New <code>qa_questions</code> and <code>qa_question_tags</code> for quality assurance workflows</li>
<li class="">New <code>analysis_rules</code> resource</li>
<li class="">New <code>segments</code> resource</li>
<li class="">New <code>authorized_views</code> with IAM policy support</li>
<li class="">New <code>datasets</code> and <code>views</code> resources</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bigquery">BigQuery<a href="https://stackql.io/blog/google-provider-december-2025-update#bigquery" class="hash-link" aria-label="Direct link to BigQuery" title="Direct link to BigQuery" translate="no">​</a></h2>
<p>Enhanced governance and access control (18,000+ line changes):</p>
<ul>
<li class="">New <code>routines_iam_policies</code> for stored procedure/function IAM</li>
<li class="">Enhanced <code>row_access_policies</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="healthcare-api">Healthcare API<a href="https://stackql.io/blog/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>
<p>Expanded metrics and data mapping (15,000+ line changes):</p>
<ul>
<li class="">New <code>data_mapper_workspaces_iam_policies</code></li>
<li class="">Enhanced metrics: <code>hl7_v2_store_metrics</code>, <code>dicom_store_metrics</code>, <code>series_metrics</code>, <code>study_metrics</code></li>
<li class="">New <code>instances_storage_info</code> resource</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cloud-spanner">Cloud Spanner<a href="https://stackql.io/blog/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>
<p>Backup and security enhancements (14,000+ line changes):</p>
<ul>
<li class="">New <code>backup_schedules</code> with IAM support</li>
<li class="">New <code>databases_split_points</code> resource</li>
<li class="">New <code>database_roles</code> with IAM policies</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cloud-sql-admin">Cloud SQL Admin<a href="https://stackql.io/blog/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>
<p>New integration and management features (12,000+ line changes):</p>
<ul>
<li class="">New <code>instances_entra_id_certificate</code> for Microsoft Entra ID integration</li>
<li class="">New <code>instances_disk_shrink_config</code></li>
<li class="">New <code>instances_latest_recovery_time</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gke-on-prem">GKE On-Prem<a href="https://stackql.io/blog/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>
<p>Enhanced IAM across VMware and Bare Metal clusters (9,000+ line changes):</p>
<ul>
<li class="">Enhanced VMware cluster resources with IAM policies</li>
<li class="">Enhanced Bare Metal cluster resources with IAM policies</li>
<li class="">New <code>vmware_node_pools</code> and <code>bare_metal_node_pools</code> with IAM</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="developer-connect">Developer Connect<a href="https://stackql.io/blog/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>
<p>Git integration improvements (3,500+ line changes):</p>
<ul>
<li class="">New <code>git_repository_links_git_refs</code> resource</li>
<li class="">New <code>users_self</code> and <code>users_access_token</code> resources</li>
<li class="">New token resources: <code>read_token</code>, <code>read_write_token</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="text-to-speech">Text-to-Speech<a href="https://stackql.io/blog/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>
<p>Enhanced <code>voices</code> and <code>text</code> resources with new capabilities.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get Started<a href="https://stackql.io/blog/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>
<p>Update to the latest Google provider:</p>
<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>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="google cloud" term="google cloud"/>
        <category label="gcp" term="gcp"/>
        <category label="provider" term="provider"/>
        <category label="vertex ai" term="vertex ai"/>
        <category label="speech-to-text" term="speech-to-text"/>
        <category label="bigquery" term="bigquery"/>
        <category label="spanner" term="spanner"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Window Functions and CTEs Now Available in StackQL]]></title>
        <id>https://stackql.io/blog/window-functions-and-ctes-now-available</id>
        <link href="https://stackql.io/blog/window-functions-and-ctes-now-available"/>
        <updated>2025-12-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Window functions and Common Table Expressions (CTEs) are now available in StackQL for advanced analytics across cloud and SaaS resources.]]></summary>
        <content type="html"><![CDATA[<p>Window functions and Common Table Expressions (CTEs) are now generally available in StackQL. These features work with both the embedded SQLite backend and PostgreSQL backend.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="window-functions">Window Functions<a href="https://stackql.io/blog/window-functions-and-ctes-now-available#window-functions" class="hash-link" aria-label="Direct link to Window Functions" title="Direct link to Window Functions" translate="no">​</a></h2>
<p>Window functions allow you to perform calculations across sets of rows related to the current row. Supported functions include:</p>
<ul>
<li class=""><strong>Ranking</strong>: <code>ROW_NUMBER()</code>, <code>RANK()</code>, <code>DENSE_RANK()</code>, <code>NTILE()</code></li>
<li class=""><strong>Offset</strong>: <code>LAG()</code>, <code>LEAD()</code>, <code>FIRST_VALUE()</code>, <code>LAST_VALUE()</code>, <code>NTH_VALUE()</code></li>
<li class=""><strong>Distribution</strong>: <code>PERCENT_RANK()</code>, <code>CUME_DIST()</code></li>
<li class=""><strong>Aggregates as window functions</strong>: <code>SUM()</code>, <code>COUNT()</code>, <code>AVG()</code>, etc. with <code>OVER</code> clause</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-ranking-contributors">Example: Ranking Contributors<a href="https://stackql.io/blog/window-functions-and-ctes-now-available#example-ranking-contributors" class="hash-link" aria-label="Direct link to Example: Ranking Contributors" title="Direct link to Example: Ranking Contributors" translate="no">​</a></h3>
<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">    login</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">    contributions</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">    DENSE_RANK</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)">OVER</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</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"> contributions </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><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> rank</span><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"> 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">contributors</span><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"> owner </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)">'stackql'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> repo </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)">'stackql'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-running-totals">Example: Running Totals<a href="https://stackql.io/blog/window-functions-and-ctes-now-available#example-running-totals" class="hash-link" aria-label="Direct link to Example: Running Totals" title="Direct link to Example: Running Totals" translate="no">​</a></h3>
<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">    login</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">    contributions</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">contributions</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)">OVER</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</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"> contributions </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><span class="token keyword" style="color:rgb(127, 219, 202)">as</span><span class="token plain"> running_total</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"> contributions </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">contributions</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)">OVER</span><span class="token plain"> </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 punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</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"> pct_of_total</span><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"> 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">contributors</span><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"> owner </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)">'stackql'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> repo </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)">'stackql'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-table-expressions-ctes">Common Table Expressions (CTEs)<a href="https://stackql.io/blog/window-functions-and-ctes-now-available#common-table-expressions-ctes" class="hash-link" aria-label="Direct link to Common Table Expressions (CTEs)" title="Direct link to Common Table Expressions (CTEs)" translate="no">​</a></h2>
<p>CTEs let you define temporary named result sets using the <code>WITH</code> clause. This simplifies complex queries by breaking them into logical components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-aggregating-across-multiple-resources">Example: Aggregating Across Multiple Resources<a href="https://stackql.io/blog/window-functions-and-ctes-now-available#example-aggregating-across-multiple-resources" class="hash-link" aria-label="Direct link to Example: Aggregating Across Multiple Resources" title="Direct link to Example: Aggregating Across Multiple Resources" translate="no">​</a></h3>
<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)">WITH</span><span class="token plain"> all_contributors </span><span class="token keyword" style="color:rgb(127, 219, 202)">AS</span><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"> login</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> contributions</span><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"> 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">contributors</span><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"> owner </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)">'stackql'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> repo </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)">'stackql'</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)">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"> login</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> contributions</span><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"> 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">contributors</span><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"> owner </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)">'stackql'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">AND</span><span class="token plain"> repo </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)">'stackql-deploy'</span><span class="token plain"></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">    DENSE_RANK</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)">OVER</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</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 function" style="color:rgb(130, 170, 255)">SUM</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">contributions</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)">DESC</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"> rank</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">    login</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">contributions</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_contributions</span><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"> all_contributors</span><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"> login</span><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"> total_contributions </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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="documentation">Documentation<a href="https://stackql.io/blog/window-functions-and-ctes-now-available#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>Full documentation is available:</p>
<ul>
<li class=""><a class="" href="https://stackql.io/docs/language-spec/functions/window/row_number">Window Functions</a></li>
<li class=""><a class="" href="https://stackql.io/docs/language-spec/with">WITH (CTEs)</a></li>
<li class=""><a class="" href="https://stackql.io/docs/language-spec/select">SELECT</a></li>
</ul>
<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>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="analytics" term="analytics"/>
        <category label="window functions" term="window functions"/>
        <category label="cte" term="cte"/>
        <category label="sql" term="sql"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[StackQL Provider Development Skill for Claude]]></title>
        <id>https://stackql.io/blog/stackql-provider-development-skill-for-claude</id>
        <link href="https://stackql.io/blog/stackql-provider-development-skill-for-claude"/>
        <updated>2025-11-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A Claude Skill for developing StackQL providers, covering OpenAPI extensions, resource definitions, SQL verb mappings, and more.]]></summary>
        <content type="html"><![CDATA[<p>We've published a Claude Skill for <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>StackQL</strong></a> provider development. It provides Claude with the context needed to help you build providers using the <a href="https://github.com/stackql/any-sdk" target="_blank" rel="noopener noreferrer" class=""><strong>any-sdk</strong></a> library (interface used by StackQL to interact with the cloud providers).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-in-the-skill">What's in the Skill<a href="https://stackql.io/blog/stackql-provider-development-skill-for-claude#whats-in-the-skill" class="hash-link" aria-label="Direct link to What's in the Skill" title="Direct link to What's in the Skill" translate="no">​</a></h2>
<p>The skill covers the full provider development workflow:</p>
<ul>
<li class=""><strong>Provider document structure</strong> - The <code>provider.yaml</code> schema and service document layout</li>
<li class=""><strong>OpenAPI extensions</strong> - All <code>x-stackQL-*</code> extensions including <code>x-stackQL-resources</code>, <code>x-stackQL-config</code>, <code>x-stackQL-objectKey</code>, and others</li>
<li class=""><strong>Resource and method definitions</strong> - How to define resources, map methods to operations, and configure responses</li>
<li class=""><strong>SQL verb mappings</strong> - Connecting REST operations to <code>SELECT</code>, <code>INSERT</code>, <code>UPDATE</code>, and <code>DELETE</code></li>
<li class=""><strong>Authentication patterns</strong> - API keys, service accounts, OAuth, and custom auth schemes</li>
<li class=""><strong>Pagination handling</strong> - Request/response token configuration</li>
<li class=""><strong>Response processing</strong> - JSONPath extraction, transformations, and schema handling</li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>What is a Claude Skill?</div><div class="admonitionContent_BuS1"><p>A Claude Skill is a markdown file that provides Claude with specialized knowledge for a particular domain or task. When you add a skill to your project, Claude can reference it during conversations to give more accurate, context-aware responses.</p><p><strong>To use this skill:</strong></p><ol>
<li class="">Download the skill file (<a href="https://github.com/stackql/any-sdk/raw/refs/heads/main/.claude/skills/stackql-provider-development.md" target="_blank" rel="noopener noreferrer" class=""><strong>stackql-provider-development.md</strong></a>)</li>
<li class="">In Claude, go to your Project settings</li>
<li class="">Add the skill file to your Project Knowledge</li>
</ol><p>Once added, Claude will automatically apply this knowledge when you're working on StackQL provider development.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="download">Download<a href="https://stackql.io/blog/stackql-provider-development-skill-for-claude#download" class="hash-link" aria-label="Direct link to Download" title="Direct link to Download" translate="no">​</a></h2>
<p>Grab the skill from the any-sdk repository:</p>
<p><strong><a href="https://github.com/stackql/any-sdk/raw/refs/heads/main/.claude/skills/stackql-provider-development.md" target="_blank" rel="noopener noreferrer" class="">Download stackql-provider-development.md</a></strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage">Usage<a href="https://stackql.io/blog/stackql-provider-development-skill-for-claude#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no">​</a></h2>
<p>With the skill loaded, you can ask Claude things like:</p>
<ul>
<li class=""><em>"Create a provider definition for this API"</em></li>
<li class=""><em>"How do I map this endpoint to a SELECT operation?"</em></li>
<li class=""><em>"What's the correct objectKey syntax for this nested response?"</em></li>
<li class=""><em>"Help me configure pagination for this API"</em></li>
</ul>
<p>Claude will have the full context of StackQL's OpenAPI extensions and provider patterns to work from.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example">Example<a href="https://stackql.io/blog/stackql-provider-development-skill-for-claude#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
<p>Here's a sample interaction after loading the skill:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text 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">You: I have an API endpoint GET /users that returns {"data": {"users": [...]}}. </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">     How do I set up the resource?</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">Claude: For that response structure, you'd configure the method like this:</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">methods:</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  list:</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    operation:</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      $ref: '#/paths/~1users/get'</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">    response:</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      mediaType: application/json</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      openAPIDocKey: '200'</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">      objectKey: $.data.users</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">The objectKey uses JSONPath to extract the users array from the nested response.</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="resources">Resources<a href="https://stackql.io/blog/stackql-provider-development-skill-for-claude#resources" class="hash-link" aria-label="Direct link to Resources" title="Direct link to Resources" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/stackql/stackql-provider-registry" target="_blank" rel="noopener noreferrer" class="">StackQL Provider Registry</a></li>
<li class=""><a href="https://github.com/stackql/any-sdk" target="_blank" rel="noopener noreferrer" class="">any-sdk documentation</a></li>
<li class=""><a href="https://stackql.io/docs" target="_blank" rel="noopener noreferrer" class="">StackQL documentation</a></li>
</ul>
<p>⭐ Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a></p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="claude" term="claude"/>
        <category label="ai" term="ai"/>
        <category label="provider development" term="provider development"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Markdown-KV Output Format Available in pystackql]]></title>
        <id>https://stackql.io/blog/markdownkv-output-format-available-in-pystackql</id>
        <link href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql"/>
        <updated>2025-11-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[New output format in pystackql optimizes cloud infrastructure data for LLM processing based on research showing accuracy improvement over CSV.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://github.com/stackql/pystackql" target="_blank" rel="noopener noreferrer" class=""><strong>pystackql</strong></a> now includes a <code>markdownkv</code> output format optimized for LLM processing of control plane and data plane data from cloud providers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="background">Background<a href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql#background" class="hash-link" aria-label="Direct link to Background" title="Direct link to Background" translate="no">​</a></h2>
<p>Recent research from <a href="https://www.improvingagents.com/blog/best-input-data-format-for-llms" target="_blank" rel="noopener noreferrer" class=""><strong>ImprovingAgents.com</strong></a> tested 11 data formats to determine which ones LLMs parse most accurately. Using 1,000 synthetic employee records and 1,000 randomized queries, they measured how well different formats preserved data integrity through LLM processing.</p>
<p>The results:</p>
<table><thead><tr><th>Format</th><th>Accuracy</th><th>95% CI</th></tr></thead><tbody><tr><td>Markdown-KV</td><td>60.7%</td><td>57.6%–63.7%</td></tr><tr><td>JSON</td><td>52.3%</td><td>49.2%–55.4%</td></tr><tr><td>Markdown Tables</td><td>51.9%</td><td>48.8%–55.0%</td></tr><tr><td>JSONL</td><td>45.0%</td><td>41.9%–48.1%</td></tr><tr><td>CSV</td><td>44.3%</td><td>41.2%–47.4%</td></tr></tbody></table>
<br>
<br>
<p>Markdown-KV showed a 37% improvement over CSV and 16 percentage points over JSON. The tradeoff: it uses approximately 2.7x more tokens than CSV.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-markdown-kv">What is Markdown-KV?<a href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql#what-is-markdown-kv" class="hash-link" aria-label="Direct link to What is Markdown-KV?" title="Direct link to What is Markdown-KV?" translate="no">​</a></h2>
<p>Markdown-KV uses hierarchical markdown headers with code blocks for key-value pairs:</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><span class="token title important punctuation" style="color:rgb(199, 146, 234)">#</span><span class="token title important"> Query Results</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 title important punctuation" style="color:rgb(199, 146, 234)">##</span><span class="token title important"> Record 1</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">id: i-1234567890abcdef0</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">name: prod-web-01</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">region: us-east-1</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">instance_type: t3.large</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">state: running</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" style="display:inline-block"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(199, 146, 234)">##</span><span class="token title important"> Record 2</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">id: i-0987654321fedcba0</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">name: staging-web-01</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">region: us-west-2</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">instance_type: t3.medium</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">state: stopped</span><br></div></code></pre></div></div>
<p>The format combines clear hierarchy, explicit key-value pairs, and readability for both humans and LLMs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage">Usage<a href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no">​</a></h2>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python 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)">from</span><span class="token plain"> pystackql </span><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> StackQL</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">stackql </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> StackQL</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><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"># Query with Markdown-KV output</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">result </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> stackql</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">execute</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 triple-quoted-string string" style="color:rgb(173, 219, 103)">"""</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token triple-quoted-string string" style="color:rgb(173, 219, 103)">    SELECT instanceId, instanceType, state, availabilityZone </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token triple-quoted-string string" style="color:rgb(173, 219, 103)">    FROM aws.ec2.instances </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token triple-quoted-string string" style="color:rgb(173, 219, 103)">    WHERE region = 'us-east-1'</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token triple-quoted-string 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">    output</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token string" style="color:rgb(173, 219, 103)">'markdownkv'</span><span class="token plain"></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" 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"># Use with LLMs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">response </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> llm_client</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">complete</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-interpolation string" style="color:rgb(173, 219, 103)">f"Identify instances that should be stopped:\n\n</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string-interpolation interpolation">result</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token string-interpolation 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 punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<p>Works in server mode too:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python 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 </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> StackQL</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">server_mode</span><span class="token operator" style="color:rgb(127, 219, 202)">=</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">result </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> stackql</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">execute</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)">"SELECT name, region, encryption FROM google.storage.buckets WHERE project = 'my-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">    output</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token string" style="color:rgb(173, 219, 103)">'markdownkv'</span><span class="token plain"></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><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-use-it">When to Use It<a href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql#when-to-use-it" class="hash-link" aria-label="Direct link to When to Use It" title="Direct link to When to Use It" translate="no">​</a></h2>
<p>Markdown-KV is useful when:</p>
<ul>
<li class="">Feeding infrastructure data to LLMs for analysis, security reviews, or recommendations</li>
<li class="">Building RAG pipelines that need to accurately retrieve and reason about infrastructure</li>
<li class="">Accuracy matters more than token efficiency (infrastructure decisions typically do)</li>
<li class="">Query results are focused datasets (most StackQL queries are)</li>
</ul>
<p>The token cost is a real tradeoff, but infrastructure queries typically return targeted result sets, not massive datasets. When you're asking an LLM to analyze your production environment, accuracy matters.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>Update <code>pystackql</code>:</p>
<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">pip install --upgrade pystackql</span><br></div></code></pre></div></div>
<p>Add <code>output='markdownkv'</code> to your execute calls or in the <code>StackQL</code> object instantiation:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python 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">result </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> stackql</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">execute</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"> output</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token string" style="color:rgb(173, 219, 103)">'markdownkv'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="resources">Resources<a href="https://stackql.io/blog/markdownkv-output-format-available-in-pystackql#resources" class="hash-link" aria-label="Direct link to Resources" title="Direct link to Resources" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://www.improvingagents.com/blog/best-input-data-format-for-llms" target="_blank" rel="noopener noreferrer" class="">ImprovingAgents.com research on LLM data formats</a></li>
<li class=""><a href="https://github.com/stackql/pystackql/releases/tag/v3.8.2" target="_blank" rel="noopener noreferrer" class="">pystackql v3.8.2 changelog</a></li>
<li class=""><a href="https://github.com/stackql/pystackql" target="_blank" rel="noopener noreferrer" class="">pystackql documentation</a></li>
<li class=""><a href="https://stackql.io/docs" target="_blank" rel="noopener noreferrer" class="">StackQL documentation</a></li>
</ul>
<p>The Markdown-KV output format is available in <code>pystackql</code> v3.8.2 and later.</p>
<p>⭐ Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="pystackql" term="pystackql"/>
        <category label="llm" term="llm"/>
        <category label="ai" term="ai"/>
        <category label="infrastructure-as-code" term="infrastructure-as-code"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[StackQL MCP Server Now Available]]></title>
        <id>https://stackql.io/blog/stackql-mcp-server-now-available</id>
        <link href="https://stackql.io/blog/stackql-mcp-server-now-available"/>
        <updated>2025-11-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Enable AI agents to query and manage cloud infrastructure using the Model Context Protocol.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>StackQL</strong></a> now supports the <a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Model Context Protocol (MCP)</strong></a>. This integration enables AI agents and assistants to query and manage cloud infrastructure across multiple providers using natural language.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-the-model-context-protocol">What is the Model Context Protocol?<a href="https://stackql.io/blog/stackql-mcp-server-now-available#what-is-the-model-context-protocol" class="hash-link" aria-label="Direct link to What is the Model Context Protocol?" title="Direct link to What is the Model Context Protocol?" translate="no">​</a></h2>
<p>The Model Context Protocol is an open standard that enables AI applications to securely connect to external data sources and tools. By running StackQL as an MCP server, AI agents like Claude, ChatGPT, and other LLM-based assistants can interact with your cloud infrastructure using StackQL's powerful SQL-based query capabilities.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-mcp--stackql">Why MCP + StackQL?<a href="https://stackql.io/blog/stackql-mcp-server-now-available#why-mcp--stackql" class="hash-link" aria-label="Direct link to Why MCP + StackQL?" title="Direct link to Why MCP + StackQL?" translate="no">​</a></h2>
<p>Combining MCP with StackQL creates a powerful interface for AI-assisted infrastructure management:</p>
<ul>
<li class=""><strong>Natural Language Infrastructure Queries</strong>: Ask questions about your cloud resources in plain English and get structured data back</li>
<li class=""><strong>Multi-Cloud Support</strong>: Access resources across AWS, Google Cloud, Azure, and 100+ other providers through a single interface</li>
<li class=""><strong>Secure and Standardized</strong>: MCP provides a secure, standardized way for AI agents to interact with your infrastructure</li>
<li class=""><strong>SQL-Powered Analytics</strong>: Leverage StackQL's full SQL capabilities including joins, aggregations, and complex queries through AI agents</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment-options">Deployment Options<a href="https://stackql.io/blog/stackql-mcp-server-now-available#deployment-options" class="hash-link" aria-label="Direct link to Deployment Options" title="Direct link to Deployment Options" translate="no">​</a></h2>
<p>StackQL's MCP server supports three flexible deployment modes to suit different architectural requirements:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-standalone-mcp-server">1. Standalone MCP Server<a href="https://stackql.io/blog/stackql-mcp-server-now-available#1-standalone-mcp-server" class="hash-link" aria-label="Direct link to 1. Standalone MCP Server" title="Direct link to 1. Standalone MCP Server" translate="no">​</a></h3>
<p>Perfect for development and AI agent integration:</p>
<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 mcp \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.server.type=http \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.config '{"server": {"transport": "http", "address": "127.0.0.1:9912"}}'</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-dual-protocol-server-in-memory">2. Dual-Protocol Server (In-Memory)<a href="https://stackql.io/blog/stackql-mcp-server-now-available#2-dual-protocol-server-in-memory" class="hash-link" aria-label="Direct link to 2. Dual-Protocol Server (In-Memory)" title="Direct link to 2. Dual-Protocol Server (In-Memory)" translate="no">​</a></h3>
<p>Run both MCP and PostgreSQL wire protocol simultaneously with high-performance in-memory communication:</p>
<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 srv \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.server.type=http \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.config '{"server": {"transport": "http", "address": "127.0.0.1:9912"}}' \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --pgsrv.port 5665</span><br></div></code></pre></div></div>
<p>This mode is ideal when you need both AI agent access and traditional database client connectivity.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-reverse-proxy-with-tls">3. Reverse Proxy with TLS<a href="https://stackql.io/blog/stackql-mcp-server-now-available#3-reverse-proxy-with-tls" class="hash-link" aria-label="Direct link to 3. Reverse Proxy with TLS" title="Direct link to 3. Reverse Proxy with TLS" translate="no">​</a></h3>
<p>For production environments requiring distributed deployments and encrypted connections:</p>
<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 srv \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.server.type=reverse_proxy \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.config '{"server": {"tls_cert_file": "/path/to/cert.pem", "tls_key_file": "/path/to/key.pem", "transport": "http", "address": "127.0.0.1:9004"}, "backend": {"dsn": "postgres://stackql:stackql@127.0.0.1:5446?default_query_exec_mode=simple_protocol"}}' \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --pgsrv.port 5446</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="available-mcp-tools">Available MCP Tools<a href="https://stackql.io/blog/stackql-mcp-server-now-available#available-mcp-tools" class="hash-link" aria-label="Direct link to Available MCP Tools" title="Direct link to Available MCP Tools" translate="no">​</a></h2>
<p>When running as an MCP server, StackQL exposes several tools that AI agents can invoke:</p>
<table><thead><tr><th>Tool</th><th>Description</th></tr></thead><tbody><tr><td><code>greet</code></td><td>Test connectivity with the MCP server</td></tr><tr><td><code>list_providers</code></td><td>List all available StackQL providers</td></tr><tr><td><code>list_services</code></td><td>List services for a specific provider</td></tr><tr><td><code>list_resources</code></td><td>List resources within a provider service</td></tr><tr><td><code>list_methods</code></td><td>List available methods for a resource</td></tr><tr><td><code>query_v2</code></td><td>Execute StackQL queries</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="integration-with-claude-desktop">Integration with Claude Desktop<a href="https://stackql.io/blog/stackql-mcp-server-now-available#integration-with-claude-desktop" class="hash-link" aria-label="Direct link to Integration with Claude Desktop" title="Direct link to Integration with Claude Desktop" translate="no">​</a></h2>
<p>To integrate StackQL with Claude Desktop, add this configuration to your MCP settings file (<code>~/Library/Application Support/Claude/claude_desktop_config.json</code> on macOS):</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#d6deeb"><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 property" style="color:rgb(128, 203, 196)">"mcpServers"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><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 property" style="color:rgb(128, 203, 196)">"stackql"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><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 property" style="color:rgb(128, 203, 196)">"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)">"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">      </span><span class="token property" style="color:rgb(128, 203, 196)">"args"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><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 string" style="color:rgb(173, 219, 103)">"mcp"</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)">"--mcp.server.type=http"</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)">"--mcp.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">        </span><span class="token string" style="color:rgb(173, 219, 103)">"{\"server\": {\"transport\": \"http\", \"address\": \"127.0.0.1:9912\"}}"</span><span class="token plain"></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 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 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 punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-use-cases">Example Use Cases<a href="https://stackql.io/blog/stackql-mcp-server-now-available#example-use-cases" class="hash-link" aria-label="Direct link to Example Use Cases" title="Direct link to Example Use Cases" translate="no">​</a></h2>
<p>Once configured, you can ask your AI assistant questions like:</p>
<ul>
<li class="">"Show me all my EC2 instances across all AWS regions"</li>
<li class="">"List all Google Cloud Storage buckets with public access"</li>
<li class="">"Find all Azure virtual machines that haven't been updated in 30 days"</li>
<li class="">"Compare compute costs across AWS, Azure, and GCP"</li>
<li class="">"Show me IAM policies that grant admin access in my Google Cloud projects"</li>
</ul>
<p>The AI agent will use StackQL's MCP server to execute the appropriate queries and return structured results.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-query-flow">Example Query Flow<a href="https://stackql.io/blog/stackql-mcp-server-now-available#example-query-flow" class="hash-link" aria-label="Direct link to Example Query Flow" title="Direct link to Example Query Flow" translate="no">​</a></h2>
<p>Here's how an AI agent interacts with StackQL via MCP:</p>
<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"># AI agent lists available providers</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Tool: list_providers</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Response: ["google", "aws", "azure", "github", ...]</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"># AI agent explores a provider's services</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Tool: list_services</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Args: {"provider": "google"}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Response: ["compute", "storage", "cloudresourcemanager", ...]</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"># AI agent executes a query</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Tool: query_v2</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Args: {"sql": "SELECT name, status FROM google.compute.instances WHERE project = 'my-project' AND zone = 'us-east1-a'"}</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">Response: [{"name": "instance-1", "status": "RUNNING"}, ...]</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/stackql-mcp-server-now-available#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<ol>
<li class="">
<p><strong>Download StackQL</strong> version 0.9.250 or later from <a class="" href="https://stackql.io/install">stackql.io/install</a></p>
</li>
<li class="">
<p><strong>Set up provider authentication</strong>:</p>
</li>
</ol>
<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 GOOGLE_CREDENTIALS=$(cat /path/to/credentials.json)</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">export AWS_ACCESS_KEY_ID=your-access-key</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">export AWS_SECRET_ACCESS_KEY=your-secret-key</span><br></div></code></pre></div></div>
<ol start="3">
<li class=""><strong>Start the MCP server</strong>:</li>
</ol>
<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 mcp \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.server.type=http \</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  --mcp.config '{"server": {"transport": "http", "address": "127.0.0.1:9912"}}'</span><br></div></code></pre></div></div>
<ol start="4">
<li class=""><strong>Configure your AI assistant</strong> to use the StackQL MCP server (see <a class="" href="https://stackql.io/docs/command-line-usage/mcp">MCP documentation</a> for details)</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="documentation">Documentation<a href="https://stackql.io/blog/stackql-mcp-server-now-available#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>For comprehensive documentation on configuring and using the MCP server, including:</p>
<ul>
<li class="">Detailed configuration options</li>
<li class="">TLS/mTLS setup</li>
<li class="">Architecture considerations</li>
<li class="">Testing and troubleshooting</li>
</ul>
<p>Visit the <a class="" href="https://stackql.io/docs/command-line-usage/mcp">MCP command documentation</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-next">What's Next?<a href="https://stackql.io/blog/stackql-mcp-server-now-available#whats-next" class="hash-link" aria-label="Direct link to What's Next?" title="Direct link to What's Next?" translate="no">​</a></h2>
<p>We're actively developing additional MCP capabilities and welcome your feedback. Future enhancements may include:</p>
<ul>
<li class="">Enhanced resource provisioning and lifecycle management through MCP</li>
<li class="">Built-in prompt templates for common infrastructure queries</li>
<li class="">Extended tool catalog for specialized operations</li>
<li class="">Support for additional MCP transport protocols</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out">Try It Out!<a href="https://stackql.io/blog/stackql-mcp-server-now-available#try-it-out" class="hash-link" aria-label="Direct link to Try It Out!" title="Direct link to Try It Out!" translate="no">​</a></h2>
<p>The MCP server feature is available now in StackQL 0.9.250. We'd love to hear about your experiences integrating StackQL with AI agents. Share your use cases, provide feedback, or contribute to the project on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>
<p>⭐ Star us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class="">GitHub</a> and join our community!</p>]]></content>
        <author>
            <name>Kieran Rimmer</name>
            <uri>https://www.linkedin.com/in/kieranrimmer/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="mcp" term="mcp"/>
        <category label="model context protocol" term="model context protocol"/>
        <category label="ai agents" term="ai agents"/>
        <category label="claude" term="claude"/>
        <category label="infrastructure-as-code" term="infrastructure-as-code"/>
        <category label="ai" term="ai"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Latest Datadog Provider for StackQL Available]]></title>
        <id>https://stackql.io/blog/latest-datadog-provider-available</id>
        <link href="https://stackql.io/blog/latest-datadog-provider-available"/>
        <updated>2025-09-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Query and interact with Datadog resources using SQL.]]></summary>
        <content type="html"><![CDATA[<p>Latest release or the <code>datadog</code> provider for StackQL is now available, enabling SQL-based querying and management of Datadog cloud resources.  The new <code>datadog</code> provider includes:</p>
<ul>
<li class="">coverage for the latest Datadog features</li>
<li class="">simplified service organization</li>
<li class="">enhanced user documentation</li>
</ul>
<p>For more see the <a href="https://datadog-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Datadog Provider User Docs</strong></a>.</p>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="datadog" term="datadog"/>
        <category label="iac" term="iac"/>
        <category label="analytics" term="analytics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Latest Linode Provider for StackQL Available]]></title>
        <id>https://stackql.io/blog/latest-linode-provider-available</id>
        <link href="https://stackql.io/blog/latest-linode-provider-available"/>
        <updated>2025-09-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Query and interact with Linode resources using SQL.]]></summary>
        <content type="html"><![CDATA[<p>Latest release or the Linode provider for StackQL is available, enabling SQL-based querying and management of Linode cloud resources.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provider-overview">Provider Overview<a href="https://stackql.io/blog/latest-linode-provider-available#provider-overview" class="hash-link" aria-label="Direct link to Provider Overview" title="Direct link to Provider Overview" translate="no">​</a></h2>
<p>The Linode provider offers comprehensive access to 20 services covering the entire Linode platform, with 136 resources and 425 methods, allowing you to extract data and insights from your Linode environment using familiar SQL syntax.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-services">Key Services<a href="https://stackql.io/blog/latest-linode-provider-available#key-services" class="hash-link" aria-label="Direct link to Key Services" title="Direct link to Key Services" translate="no">​</a></h2>
<p>The provider includes access to:</p>
<ul>
<li class=""><strong>Compute</strong>: Manage Linode instances and configurations</li>
<li class=""><strong>Storage</strong>: Control volumes and object storage</li>
<li class=""><strong>Networking</strong>: Handle IPs, VLANs, VPCs, and firewall rules</li>
<li class=""><strong>Kubernetes</strong>: Administer LKE clusters and node pools</li>
<li class=""><strong>Databases</strong>: Manage Linode's database service</li>
<li class=""><strong>Account &amp; Billing</strong>: Access account information and billing details</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-queries">Example Queries<a href="https://stackql.io/blog/latest-linode-provider-available#example-queries" class="hash-link" aria-label="Direct link to Example Queries" title="Direct link to Example Queries" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-account-information">Get Account Information<a href="https://stackql.io/blog/latest-linode-provider-available#get-account-information" class="hash-link" aria-label="Direct link to Get Account Information" title="Direct link to Get Account Information" translate="no">​</a></h3>
<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">  company</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">  country</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">  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">  balance_uninvoiced</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_since</span><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"> linode</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">account</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">account</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="list-database-engines">List Database Engines<a href="https://stackql.io/blog/latest-linode-provider-available#list-database-engines" class="hash-link" aria-label="Direct link to List Database Engines" title="Direct link to List Database Engines" translate="no">​</a></h3>
<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">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">engine</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">  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"> linode</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">databases</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">engines</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="view-regional-availability">View Regional Availability<a href="https://stackql.io/blog/latest-linode-provider-available#view-regional-availability" class="hash-link" aria-label="Direct link to View Regional Availability" title="Direct link to View Regional Availability" translate="no">​</a></h3>
<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">  available</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)">plan</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 keyword" style="color:rgb(127, 219, 202)">FROM</span><span class="token plain"> linode</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">regions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">availability</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="list-linode-instances">List Linode Instances<a href="https://stackql.io/blog/latest-linode-provider-available#list-linode-instances" class="hash-link" aria-label="Direct link to List Linode Instances" title="Direct link to List Linode Instances" translate="no">​</a></h3>
<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">  label</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><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)">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 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><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  ipv4</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"> linode</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">linode</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><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/latest-linode-provider-available#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>To use the Linode provider, simply register it and set your authentication:</p>
<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">-- Pull the provider</span><span class="token plain"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">registry pull linode</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">-- Set your authentication</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)">SET</span><span class="token plain"> linode</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token keyword" style="color:rgb(127, 219, 202)">global</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">auth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">credentialsenvvar </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)">'LINODE_TOKEN'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="linode" term="linode"/>
        <category label="iac" term="iac"/>
        <category label="analytics" term="analytics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deno Deploy Provider Available]]></title>
        <id>https://stackql.io/blog/deno-deploy-provider-available</id>
        <link href="https://stackql.io/blog/deno-deploy-provider-available"/>
        <updated>2025-09-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Query and interact with Deno Deploy resources using SQL.]]></summary>
        <content type="html"><![CDATA[<p>The new <code>deno</code> provider for StackQL is now available, enabling developers to query and manage Deno Deploy resources using familiar SQL syntax. This provider allows you to interact with Deno Deploy's control plane API, giving you complete control over your organizations, projects, deployments, domains, and KV databases through a consistent SQL interface.</p>
<p>The Deno Deploy provider offers comprehensive coverage of the Deno Deploy API, organized into logical services that mirror Deno's resource structure:</p>
<table><thead><tr><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>organization</code></td><td>Manage organizations and analytics</td></tr><tr><td><code>project</code></td><td>Create and manage projects within organizations</td></tr><tr><td><code>deployment</code></td><td>Deploy, manage, and monitor serverless applications</td></tr><tr><td><code>domain</code></td><td>Configure and verify custom domains for your applications</td></tr><tr><td><code>database</code></td><td>Manage KV databases and KV database backups for your deployments</td></tr></tbody></table>
<p>With the <code>deno</code> provider for StackQL, you can now include Deno Deploy in your infrastructure-as-code workflows, analytics dashboards, and cross-cloud orchestration processes using the same SQL syntax you use for other cloud providers.</p>
<p>For more information on the Deno Deploy provider for StackQL, see the <a href="https://deno-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Deno Deploy Provider Docs</strong></a> which provides detailed documentation for every resource and method, along with ready-to-use SQL examples.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/deno-deploy-provider-available#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>To start using the <code>deno</code> provider, simply pull it from the StackQL registry:</p>
<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 deno</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>You'll need to set up your authentication by exporting your Deno API token:</p>
<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 DENO_DEPLOY_TOKEN="your_deno_api_token"</span><br></div></code></pre></div></div>
<p>Then you can begin querying your Deno Deploy resources:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Projects</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Deployments</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><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">-- List all projects in an organization</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">  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">  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">  description</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">  createdAt</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">  updatedAt</span><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"> deno</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">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"> organizationId </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-org-id'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><p>Results:</p><div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text 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">|-----------------------------|-------------|--------------------------------------|----------------------|-----------------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|          createdAt          | description |                  id                  |         name         |          updatedAt          |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|-----------------------------|-------------|--------------------------------------|----------------------|-----------------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 2022-12-13T04:20:13.379555Z |             | 34f9440f-3275-40e2-b327-2ea65269feb5 | stackql-dev-registry | 2025-09-06T00:47:04.579279Z |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|-----------------------------|-------------|--------------------------------------|----------------------|-----------------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 2022-12-13T04:16:22.054548Z |             | 616de983-3e37-4f44-a99f-b6bb5c59e80a | stackql-registry     | 2025-09-06T01:22:46.872203Z |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|-----------------------------|-------------|--------------------------------------|----------------------|-----------------------------|</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">-- List deployments with key information</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">  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">  description</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)">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">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)">'$[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"> 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 string" style="color:rgb(173, 219, 103)">"databases"</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)">'$.default'</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"> db_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">  createdAt</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">  updatedAt</span><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"> deno</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">deployment</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"> projectId </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-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"> </span><span class="token string" style="color:rgb(173, 219, 103)">"order"</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)">'desc'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><p>Results:</p><div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text 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">|--------------|--------------------------------|---------|----------------------------------------|--------------------------------------|-----------------------------|-----------------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|      id      |          description           | status  |                 domain                 |                db_id                 |          createdAt          |          updatedAt          |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|--------------|--------------------------------|---------|----------------------------------------|--------------------------------------|-----------------------------|-----------------------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| pe60nqshxq3g | Latest deployment              | success | example.com                            | 8971aec3-f72f-44c4-bc9f-0b2a513bd9fc | 2025-09-06T01:22:41.740151Z | 2025-09-06T01:22:49.067315Z |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|--------------|--------------------------------|---------|----------------------------------------|--------------------------------------|-----------------------------|-----------------------------|</span><br></div></code></pre></div></div></div></div></div>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="deno" term="deno"/>
        <category label="deno deploy" term="deno deploy"/>
        <category label="iac" term="iac"/>
        <category label="analytics" term="analytics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Latest DigitalOcean Provider Available]]></title>
        <id>https://stackql.io/blog/latest-digitalocean-provider-available</id>
        <link href="https://stackql.io/blog/latest-digitalocean-provider-available"/>
        <updated>2025-09-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Query and interact with DigitalOcean resources using SQL.]]></summary>
        <content type="html"><![CDATA[<p>The latest <code>digitalocean</code> provider for StackQL is available now (<code>v25.09.00345</code>), featuring a comprehensive reorganization of services and resources that better aligns with DigitalOcean's API structure. This update improves discoverability, logical grouping, and overall usability when working with DigitalOcean resources through StackQL, while adding exciting new capabilities like support for <strong>Gradient AI Platform</strong> through the <code>genai</code> service.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's Changed<a href="https://stackql.io/blog/latest-digitalocean-provider-available#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<p>The updated DigitalOcean provider features a more granular and logical organization of services that mirrors DigitalOcean's API architecture more closely. Here is a summary of the services included in the latest <code>digitalocean</code> provider:</p>
<table><thead><tr><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>account</code></td><td>Manages account information, settings, and team configurations</td></tr><tr><td><code>apps</code></td><td>Manages App Platform deployments for static sites, APIs, and web applications</td></tr><tr><td><code>billing</code></td><td>Handles billing configurations, invoices, and payment methods</td></tr><tr><td><code>compute</code></td><td>Controls virtual machines (Droplets), snapshots, and compute resources</td></tr><tr><td><code>container_registry</code></td><td>Manages container registries and image repositories</td></tr><tr><td><code>databases</code></td><td>Manages managed database services and configurations</td></tr><tr><td><code>genai</code></td><td>Provides access to AI capabilities including the Gradient AI Platform</td></tr><tr><td><code>kubernetes</code></td><td>Controls Kubernetes clusters, node pools, and related resources</td></tr><tr><td><code>monitoring</code></td><td>Manages monitoring solutions, alerts, and metrics</td></tr><tr><td><code>networking</code></td><td>Controls VPCs, load balancers, and network configurations</td></tr><tr><td><code>oneclick</code></td><td>Provides one-click application installations and marketplace solutions</td></tr><tr><td><code>projects</code></td><td>Organizes resources into logical groups for better management and billing</td></tr><tr><td><code>serverless</code></td><td>Manages Functions as a Service (FaaS) for event-driven, scalable computing</td></tr><tr><td><code>spaces</code></td><td>Controls object storage for storing and serving large files and static assets</td></tr><tr><td><code>vpcs</code></td><td>Manages Virtual Private Cloud networks for isolated resource communications</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The improved organization including service and resource naming and mapping will introduce changes to queries against the previous provider version (<code>v24.11.00274</code>). You can pin the previous version in <code>stackql-deploy</code> or via <code>registry pull</code> in the interim while you make necessary query modifications.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enhanced-documentation">Enhanced Documentation<a href="https://stackql.io/blog/latest-digitalocean-provider-available#enhanced-documentation" class="hash-link" aria-label="Direct link to Enhanced Documentation" title="Direct link to Enhanced Documentation" translate="no">​</a></h2>
<p>The new <a href="https://digitalocean-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class=""><strong>DigitalOcean Provider Docs</strong></a> provide comprehensive documentation on how to use the new <code>digitalocean</code> provider including ready-to-use SQL examples for each resource and method. A standout feature is the copy-paste functionality for all SQL queries, making it incredibly easy to:</p>
<ol>
<li class="">
<p><strong>Compose Infrastructure-as-Code workflows</strong>: Each method documentation includes working SQL examples that can be directly copied into your deployment scripts or CI/CD pipelines. Simply click the copy button next to any example to get production-ready SQL code.</p>
</li>
<li class="">
<p><strong>Build analytics dashboards</strong>: Create sophisticated cross-service queries by combining examples from different resources. The documentation's consistent query formatting makes it simple to join related data across multiple DigitalOcean services.</p>
</li>
<li class="">
<p><strong>Develop governance reports</strong>: Copy baseline queries and customize them for your specific compliance needs. The pre-formatted SQL provides the perfect starting point for custom reporting.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gradient-ai-platform-support">Gradient AI Platform Support<a href="https://stackql.io/blog/latest-digitalocean-provider-available#gradient-ai-platform-support" class="hash-link" aria-label="Direct link to Gradient AI Platform Support" title="Direct link to Gradient AI Platform Support" translate="no">​</a></h2>
<p>A standout addition to this release is comprehensive support for DigitalOcean's Gradient AI Platform through the new <code>genai</code> service. This enables developers to:</p>
<ul>
<li class="">Deploy and manage AI models using familiar SQL syntax</li>
<li class="">Monitor AI workloads alongside other cloud resources</li>
<li class="">Incorporate AI capabilities into infrastructure-as-code workflows</li>
<li class="">Create cross-service orchestrations that leverage AI capabilities</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/latest-digitalocean-provider-available#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>To start using the updated <code>digitalocean</code> provider, simply pull the latest version from <code>stackql shell</code> or <code>stackql registry</code> command:</p>
<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 digitalocean</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Then you can begin querying your DigitalOcean resources with SQL:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Droplet inventory</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Kubernetes clusters</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><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">-- List all droplets</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">  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">  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)">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">  size_slug</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">size</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)">'$.vcpus'</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"> vcpus</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">size</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)">'$.memory'</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"> memory</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">size</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)">'$.disk'</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"> disk_size_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">size</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)">'$.price_hourly'</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"> price_hourly</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">size</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)">'$.price_monthly'</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"> price_monthly</span><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"> digitalocean</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">droplets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><p>Results:</p><div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text 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">|-----------|---------------------------------------|--------|------------------------|-------|--------|--------------|--------------|---------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|    id     |                 name                  | status |       size_slug        | vcpus | memory | disk_size_gb | price_hourly | price_monthly |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|-----------|---------------------------------------|--------|------------------------|-------|--------|--------------|--------------|---------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 457265395 | ubuntu-s-1vcpu-1gb-35gb-intel-syd1-01 | active | s-1vcpu-1gb-35gb-intel |     1 |   1024 |           35 |       0.0119 |             8 |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|-----------|---------------------------------------|--------|------------------------|-------|--------|--------------|--------------|---------------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 510398669 | pool-urzofvwy7-l5vvz                  | active | s-2vcpu-4gb            |     2 |   4096 |           80 |      0.03571 |            24 |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|-----------|---------------------------------------|--------|------------------------|-------|--------|--------------|--------------|---------------|</span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">-- List all Kubernetes clusters</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">  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">  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">  cluster_subnet</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><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)">'$.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"> </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  digitalocean</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">kubernetes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">clusters</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div><p>Results:</p><div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text 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">|--------------------------------------|------------------------------------|----------------|--------|---------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|                  id                  |                name                | cluster_subnet | region |  state  |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|--------------------------------------|------------------------------------|----------------|--------|---------|</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">| 52d8fa14-eca0-46c8-80a8-8aae70a2c82a | k8s-1-33-1-do-2-syd1-1753698369839 | 10.150.0.0/16  | syd1   | running |</span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">|--------------------------------------|------------------------------------|----------------|--------|---------|</span><br></div></code></pre></div></div></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-the-app-platform-functions">Using the App Platform Functions<a href="https://stackql.io/blog/latest-digitalocean-provider-available#using-the-app-platform-functions" class="hash-link" aria-label="Direct link to Using the App Platform Functions" title="Direct link to Using the App Platform Functions" translate="no">​</a></h2>
<p>The <code>apps</code> services provide access to DigitalOcean's modern deployment platforms. Here's an example of how to list your deployed applications:</p>
<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">-- List all deployed applications</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">  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">  default_ingress</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_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">  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">  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">  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">  tier_slug</span><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"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  digitalocean</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">apps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-the-genai-service">Using the GenAI Service<a href="https://stackql.io/blog/latest-digitalocean-provider-available#using-the-genai-service" class="hash-link" aria-label="Direct link to Using the GenAI Service" title="Direct link to Using the GenAI Service" translate="no">​</a></h2>
<p>The new <code>genai</code> service provides access to DigitalOcean's Gradient AI Platform capabilities. Here's an example of how to list deployed agents:</p>
<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">-- List all deployed AI agents</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">  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">  uuid</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">  url</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">  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">  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">  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">  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">  temperature</span><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"></span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  digitalocean</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">genai</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">agents</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-cases-for-the-digitalocean-provider">Use Cases for the DigitalOcean Provider<a href="https://stackql.io/blog/latest-digitalocean-provider-available#use-cases-for-the-digitalocean-provider" class="hash-link" aria-label="Direct link to Use Cases for the DigitalOcean Provider" title="Direct link to Use Cases for the DigitalOcean Provider" translate="no">​</a></h2>
<ol>
<li class="">
<p><strong>Infrastructure as Code</strong>: Manage your DigitalOcean resources alongside other cloud providers in a unified IaC approach, see <a href="https://stackql-deploy.io/" target="_blank" rel="noopener noreferrer" class=""><strong><code>stackql-deploy</code></strong></a>.</p>
</li>
<li class="">
<p><strong>Cost Optimization</strong>: Identify unused resources and opportunities for cost savings with queries that expose pricing information across all resource types.</p>
</li>
<li class="">
<p><strong>Security and Compliance</strong>: Audit firewall rules, network configurations, and access patterns to ensure compliance with security policies.</p>
</li>
<li class="">
<p><strong>Performance Monitoring</strong>: Track resource utilization, database performance, and identify optimization opportunities.</p>
</li>
<li class="">
<p><strong>Cross-Provider Orchestration</strong>: Build workflows that span DigitalOcean and other resource providers, enabling sophisticated data and infrastructure pipelines.</p>
</li>
<li class="">
<p><strong>AI-Enhanced Infrastructure</strong>: Leverage the new GenAI service to incorporate AI capabilities into your infrastructure management workflows.</p>
</li>
<li class="">
<p><strong>Automated Reporting</strong>: Create automated reports on DigitalOcean usage, performance, and costs.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provider-metrics">Provider Metrics<a href="https://stackql.io/blog/latest-digitalocean-provider-available#provider-metrics" class="hash-link" aria-label="Direct link to Provider Metrics" title="Direct link to Provider Metrics" translate="no">​</a></h2>
<p>The latest DigitalOcean provider includes:</p>
<ul>
<li class=""><strong>15</strong> services</li>
<li class=""><strong>192</strong> resources</li>
<li class=""><strong>516</strong> total methods</li>
<li class=""><strong>254</strong> selectable methods</li>
</ul>
<p>This comprehensive coverage ensures you can manage and query virtually all aspects of your DigitalOcean infrastructure using familiar SQL syntax.</p>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="digitalocean" term="digitalocean"/>
        <category label="iac" term="iac"/>
        <category label="analytics" term="analytics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Okta Provider Released]]></title>
        <id>https://stackql.io/blog/new-okta-provider-released</id>
        <link href="https://stackql.io/blog/new-okta-provider-released"/>
        <updated>2025-09-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Query and interact with Okta resources using SQL.]]></summary>
        <content type="html"><![CDATA[<p>The latest <code>okta</code> provider for StackQL is available now (<code>v25.09.00341</code>), featuring a comprehensive reorganization of services and resources that better aligns with Okta's API structure. This update improves discoverability, logical grouping, and overall usability when working with Okta resources through StackQL.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's Changed<a href="https://stackql.io/blog/new-okta-provider-released#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<p>The updated Okta provider features a more granular and logical organization of services that mirrors Okta's API architecture more closely.  Here is a summary of the services included in the latest <code>okta</code> provider:</p>
<table><thead><tr><th>Service</th><th>Description</th></tr></thead><tbody><tr><td><code>agentpools</code></td><td>Manages agent pools for on-premises integration and deployment</td></tr><tr><td><code>api_tokens</code></td><td>Handles API token creation, management, and access control</td></tr><tr><td><code>apps</code></td><td>Manages Okta application integration, configuration, and assignments</td></tr><tr><td><code>attack_protection</code></td><td>Configures security controls to prevent various attack vectors</td></tr><tr><td><code>authenticators</code></td><td>Manages authentication methods, factors, and settings</td></tr><tr><td><code>authorizationservers</code></td><td>Controls OAuth 2.0 and OIDC authorization servers and policies</td></tr><tr><td><code>behaviors</code></td><td>Configures end-user behavioral patterns for risk-based authentication</td></tr><tr><td><code>brands</code></td><td>Manages customization of Okta UI appearance and branding</td></tr><tr><td><code>captchas</code></td><td>Configures CAPTCHA settings to prevent automated attacks</td></tr><tr><td><code>device_access</code></td><td>Controls access policies based on device attributes</td></tr><tr><td><code>device_assurances</code></td><td>Manages device trust requirements and verification</td></tr><tr><td><code>device_integrations</code></td><td>Configures integrations with MDM and endpoint security tools</td></tr><tr><td><code>device_posture_checks</code></td><td>Verifies security posture of devices accessing resources</td></tr><tr><td><code>devices</code></td><td>Manages device enrollment, lifecycle, and inventory</td></tr><tr><td><code>directories</code></td><td>Handles directory service connections and synchronization</td></tr><tr><td><code>domains</code></td><td>Manages custom domain configuration for Okta tenant</td></tr><tr><td><code>email_domains</code></td><td>Controls email domains for user provisioning and validation</td></tr><tr><td><code>email_servers</code></td><td>Configures email server settings for notifications</td></tr><tr><td><code>eventhooks</code></td><td>Manages webhook subscriptions for Okta event notifications</td></tr><tr><td><code>features</code></td><td>Controls feature flags and preview feature management</td></tr><tr><td><code>first_party_app_settings</code></td><td>Configures settings for Okta-developed applications</td></tr><tr><td><code>groups</code></td><td>Manages group creation, membership, and rule configuration</td></tr><tr><td><code>hook_keys</code></td><td>Handles encryption keys for securing hook communications</td></tr><tr><td><code>iam</code></td><td>Provides core identity and access management functionality</td></tr><tr><td><code>identity_sources</code></td><td>Manages sources of identity data for user provisioning</td></tr><tr><td><code>idps</code></td><td>Configures external identity providers for federation</td></tr><tr><td><code>inlinehooks</code></td><td>Manages customization points within Okta workflows</td></tr><tr><td><code>integrations</code></td><td>Configures third-party service integrations</td></tr><tr><td><code>logs</code></td><td>Provides access to system logs and audit events</td></tr><tr><td><code>logstreams</code></td><td>Manages streaming of log data to external systems</td></tr><tr><td><code>mappings</code></td><td>Configures attribute mappings between systems</td></tr><tr><td><code>meta</code></td><td>Provides metadata about the Okta API and environment</td></tr><tr><td><code>oauth2</code></td><td>Manages OAuth 2.0 clients, scopes, and tokens</td></tr><tr><td><code>okta_personal_settings</code></td><td>Controls user-specific preferences and settings</td></tr><tr><td><code>org</code></td><td>Manages organization-level settings and configurations</td></tr><tr><td><code>orgs</code></td><td>Handles multi-org deployments and org relationships</td></tr><tr><td><code>policies</code></td><td>Configures authentication, password, and access policies</td></tr><tr><td><code>principal_rate_limits</code></td><td>Manages API rate limits for specific principals</td></tr><tr><td><code>privileged_access</code></td><td>Controls privileged access management settings</td></tr><tr><td><code>push_providers</code></td><td>Configures push notification delivery services</td></tr><tr><td><code>rate_limit_settings</code></td><td>Manages global API rate limit configurations</td></tr><tr><td><code>realm_assignments</code></td><td>Maps users and groups to authentication realms</td></tr><tr><td><code>realms</code></td><td>Configures authentication realms for different user populations</td></tr><tr><td><code>risk</code></td><td>Manages risk-based authentication settings and policies</td></tr><tr><td><code>roles</code></td><td>Controls administrative role assignments and permissions</td></tr><tr><td><code>security</code></td><td>Provides security settings and configurations</td></tr><tr><td><code>security_events_providers</code></td><td>Manages integrations with security event sources</td></tr><tr><td><code>sessions</code></td><td>Controls user session policies and management</td></tr><tr><td><code>ssf</code></td><td>Configures server-side functions for customization</td></tr><tr><td><code>templates</code></td><td>Manages templates for emails, notifications, and forms</td></tr><tr><td><code>threats</code></td><td>Controls threat intelligence settings and configurations</td></tr><tr><td><code>trustedorigins</code></td><td>Manages CORS and redirect configurations</td></tr><tr><td><code>users</code></td><td>Handles user lifecycle, profiles, and credentials</td></tr><tr><td><code>webauthn_registration</code></td><td>Manages WebAuthn/FIDO2 credential registration</td></tr><tr><td><code>zones</code></td><td>Configures network zones for policy application</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The improved organization including service and resource naming and mapping will introduce changes to queries against the previous provider version (<code>v23.03.00121</code>), you can pin the previous version in <code>stackql-deploy</code> or via <code>registry pull</code> in the interim while you make necessary query modifications.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enhanced-documentation">Enhanced Documentation<a href="https://stackql.io/blog/new-okta-provider-released#enhanced-documentation" class="hash-link" aria-label="Direct link to Enhanced Documentation" title="Direct link to Enhanced Documentation" translate="no">​</a></h2>
<p>The new <a href="https://okta-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class=""><strong>Okta Provider Docs</strong></a> provide comprehensive documentation on how to use the new <code>okta</code> provider including ready-to-use SQL examples for each resource and method. A standout feature is the copy-paste functionality for all SQL queries, making it incredibly easy to:</p>
<ol>
<li class="">
<p><strong>Compose Infrastructure-as-Code workflows</strong>: Each method documentation includes working SQL examples that can be directly copied into your deployment scripts or CI/CD pipelines. Simply click the copy button next to any example to get production-ready SQL code.</p>
</li>
<li class="">
<p><strong>Build analytics dashboards</strong>: Create sophisticated cross-service queries by combining examples from different resources. The documentation's consistent query formatting makes it simple to join related data across multiple Okta services.</p>
</li>
<li class="">
<p><strong>Develop governance reports</strong>: Copy baseline queries and customize them for your specific compliance needs. The pre-formatted SQL provides the perfect starting point for custom reporting.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/new-okta-provider-released#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>To start using the updated <code>okta</code> provider, simply pull the latest version from <code>stackql shell</code> or <code>stackql registry</code> command:</p>
<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 okta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Then you can begin querying your Okta resources with SQL:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Group assignments</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">User activity</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Network zones</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">AuthZ servers and scopes</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><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">-- Get all users and their group assignments</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">  u</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><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">u</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)">'$.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">  u</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><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">g</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)">'$.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"> group_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"> </span><br></div><div class="token-line" style="color:#d6deeb"><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 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"> </span><br></div><div class="token-line" style="color:#d6deeb"><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)">group</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">users gu </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> u</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"> gu</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">user_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)">JOIN</span><span class="token plain"> </span><br></div><div class="token-line" style="color:#d6deeb"><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)">group</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">groups g </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> gu</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">group_id </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> g</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"> 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-company'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain">  </span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">-- Report on users login and activity</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">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">activated</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</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">lastLogin</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">lastUpdated</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">passwordChanged</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">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)">'$.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">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)">'$.firstName'</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_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">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)">'$.lastName'</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_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)">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">statusChanged</span><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">users</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">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"> 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-company'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain">  </span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">-- Inventory network zones for security audit</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">  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)">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)">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">  gateways</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">  proxies</span><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"> </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  okta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">networkzone</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"> 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-company'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><br></div></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><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">-- Review authorization servers and scopes</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">  a</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"> auth_server_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">  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"> scope_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">  s</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"> </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  okta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">authorizationserver</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">authorizationservers a</span><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"> </span><br></div><div class="token-line" style="color:#d6deeb"><span class="token plain">  okta</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">authorizationserver</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">scopes s </span><span class="token keyword" style="color:rgb(127, 219, 202)">ON</span><span class="token plain"> a</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">server_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"> 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-company'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><br></div></code></pre></div></div></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-cases-for-the-okta-provider">Use Cases for the Okta Provider<a href="https://stackql.io/blog/new-okta-provider-released#use-cases-for-the-okta-provider" class="hash-link" aria-label="Direct link to Use Cases for the Okta Provider" title="Direct link to Use Cases for the Okta Provider" translate="no">​</a></h2>
<ol>
<li class="">
<p><strong>Infrastructure as Code</strong>: Manage your Okta resources alongside other cloud providers in a unified IaC approach, see <a href="https://stackql-deploy.io/" target="_blank" rel="noopener noreferrer" class=""><strong><code>stackql-deploy</code></strong></a>.</p>
</li>
<li class="">
<p><strong>Cost Optimization</strong>: Identify unused resources and opportunities for cost savings.</p>
</li>
<li class="">
<p><strong>Security and Compliance</strong>: Audit account roles, permissions, and access patterns to ensure compliance with security policies.</p>
</li>
<li class="">
<p><strong>Performance Monitoring</strong>: Track query performance, warehouse utilization, and identify optimization opportunities.</p>
</li>
<li class="">
<p><strong>Cross-Provider Orchestration</strong>: Build workflows that span Okta and other resource providers, enabling sophisticated data and infrastructure pipelines.</p>
</li>
<li class="">
<p><strong>Automated Reporting</strong>: Create automated reports on Okta usage, performance, and costs.</p>
</li>
</ol>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="okta" term="okta"/>
        <category label="iac" term="iac"/>
        <category label="analytics" term="analytics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Updated Google Providers for StackQL Available]]></title>
        <id>https://stackql.io/blog/updated-google-providers-available</id>
        <link href="https://stackql.io/blog/updated-google-providers-available"/>
        <updated>2025-08-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Query and interact with Google resources using SQL.]]></summary>
        <content type="html"><![CDATA[<p>The latest versions of the Google-related providers for StackQL: <code>google</code>, <code>googleadmin</code>, <code>googleworkspace</code>, and <code>firebase</code> are available now. These updates include the latest services, resources and methods available from Google.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-new">What's New<a href="https://stackql.io/blog/updated-google-providers-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>
<p>The latest release introduces several new services to the <code>google</code> provider, expanding your ability to manage and query Google Cloud resources:</p>
<ul>
<li class=""><strong>API Hub</strong>: Centrally manage and discover APIs across your organization</li>
<li class=""><strong>Area Insights</strong>: Access location-based insights and analytics</li>
<li class=""><strong>Cloud Location Finder</strong>: Identify optimal Google Cloud regions for your workloads</li>
<li class=""><strong>Gemini Cloud Assist</strong>: Leverage Google's AI assistant for cloud operations</li>
<li class=""><strong>Managed Kafka</strong>: Work with Google's fully-managed Apache Kafka service</li>
<li class=""><strong>Observability</strong>: Enhanced monitoring and observability services</li>
<li class=""><strong>Parallel Store</strong>: Interact with Google's high-performance storage solution</li>
<li class=""><strong>Parameter Manager</strong>: Manage configuration parameters across services</li>
<li class=""><strong>SaaS Service Management</strong>: Tools for managing SaaS offerings on Google Cloud</li>
<li class=""><strong>Secure Source Manager</strong>: Google's secure, fully-managed source control service</li>
<li class=""><strong>Security Posture</strong>: Assess and improve your cloud security posture</li>
<li class=""><strong>Storage Batch Operations</strong>: Perform batch operations on Cloud Storage resources</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enhanced-documentation">Enhanced Documentation<a href="https://stackql.io/blog/updated-google-providers-available#enhanced-documentation" class="hash-link" aria-label="Direct link to Enhanced Documentation" title="Direct link to Enhanced Documentation" translate="no">​</a></h2>
<p>We've also released enhanced user documentation to help you get the most out of these providers. Check out our comprehensive docs:</p>
<ul>
<li class=""><a href="https://firebase-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class="">Firebase Provider</a></li>
<li class=""><a href="https://google-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class="">Google Provider</a></li>
<li class=""><a href="https://googleadmin-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class="">Google Admin Provider</a></li>
<li class=""><a href="https://googleworkspace-provider.stackql.io/" target="_blank" rel="noopener noreferrer" class="">Google Workspace Provider</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting Started<a href="https://stackql.io/blog/updated-google-providers-available#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>To start using these updated providers, simply pull the latest version from <code>stackql shell</code> or <code>stackql registry</code> command:</p>
<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 google</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 googleadmin</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 googleworkspace</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 firebase</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><br></div></code></pre></div></div>
<p>Then you can begin querying your Google resources with SQL:</p>
<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"> region</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 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"> 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>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-cases-for-the-google-provider">Use Cases for the Google Provider<a href="https://stackql.io/blog/updated-google-providers-available#use-cases-for-the-google-provider" class="hash-link" aria-label="Direct link to Use Cases for the Google Provider" title="Direct link to Use Cases for the Google Provider" translate="no">​</a></h2>
<p>The Google provider for StackQL opens up numerous possibilities:</p>
<ol>
<li class="">
<p><strong>Infrastructure as Code</strong>: Manage your Google resources alongside other cloud providers in a unified IaC approach, see <a href="https://stackql-deploy.io/" target="_blank" rel="noopener noreferrer" class=""><strong><code>stackql-deploy</code></strong></a>.</p>
</li>
<li class="">
<p><strong>Cost Optimization</strong>: Identify unused resources and opportunities for cost savings.</p>
</li>
<li class="">
<p><strong>Security and Compliance</strong>: Audit account roles, permissions, and access patterns to ensure compliance with security policies.</p>
</li>
<li class="">
<p><strong>Performance Monitoring</strong>: Track query performance, warehouse utilization, and identify optimization opportunities.</p>
</li>
<li class="">
<p><strong>Cross-Provider Orchestration</strong>: Build workflows that span Google and other cloud providers, enabling sophisticated data and infrastructure pipelines.</p>
</li>
<li class="">
<p><strong>Automated Reporting</strong>: Create automated reports on Google usage, performance, and costs.</p>
</li>
</ol>
<p>⭐ us on <a href="https://github.com/stackql/stackql" target="_blank" rel="noopener noreferrer" class=""><strong>GitHub</strong></a> and join our community!</p>]]></content>
        <author>
            <name>Jeffrey Aven</name>
            <uri>https://www.linkedin.com/in/jeffreyaven/</uri>
        </author>
        <category label="stackql" term="stackql"/>
        <category label="google" term="google"/>
        <category label="firebase" term="firebase"/>
        <category label="iac" term="iac"/>
        <category label="analytics" term="analytics"/>
    </entry>
</feed>