Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Optimizer Streamlit App

Streamlit App

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Features

  • Optimize SQL queries using various optimization rules from sqlglot
  • Lint SQL queries with sqlfmt
  • Customizable optimization rules

Usage

  1. Enter your SQL query in the left editor.
  2. Select the optimization rules you want to apply.
  3. Choose whether to preserve CTEs or combine them and/or lint the query with sqlfmt.
  4. Click the "Optimize SQL" button.
  5. The optimized and linted SQL query will appear in the right editor.

Examples

For the given sample query:

WITH users AS (
SELECT *
FROM users_table),
orders AS (
SELECT *
FROM orders_table),
combined AS (
SELECT users.id, users.name, orders.order_id, orders.total
FROM users
JOIN orders ON users.id = orders.user_id)
SELECT combined.id, combined.name, combined.order_id, combined.total
FROM combined

Applying all rules except canonical will expand the select * expressions in the initial CTEs, which has been shown to improve performance on some data warehouses. Removing the `qualify_tables rule will also yield a cleaner result:

WITH users AS (
SELECT
users_table.id AS id,
users_table.name AS name
FROM users_table
), orders AS (
SELECT
orders_table.order_id AS order_id,
orders_table.total AS total,
orders_table.user_id AS user_id
FROM orders_table
)
SELECT
users.id AS id,
users.name AS name,
orders.order_id AS order_id,
orders.total AS total
FROM users
JOIN orders
ON users.id = orders.user_id

About

A web app to optimize and lint SQL queries using sqlglot and sqlfmt.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages