KQL Assistant
Editing support for Kusto Query Language (KQL) on Azure Monitor, Log Analytics, Microsoft Sentinel, and related platforms.
Syntax validation · Schema-aware IntelliSense · Formatting · Quick fixes · Multi-query organization
KQL Assistant is a language support extension: highlighting, diagnostics, completions, hover text, formatting, and lightweight project organization for .kql / .kusto files. It ships a large offline table/column catalog (700+ tables) so you get validation and suggestions without signing in to Azure.
Validation is offline, not execution: diagnostics use parser-backed query structure plus the bundled (or user-supplied) schema to catch many typos, scope mistakes, and structural issues. They do not prove a query will run in your workspace. Always run queries in Azure to confirm.
Out of scope: this extension does not execute queries. It does not connect to an Azure Data Explorer cluster or a Log Analytics workspace. Run queries in the Azure portal, Microsoft Sentinel, Fabric, or another tool that supports execution against your data plane.
Editing and syntax
- Syntax highlighting, bracket/quote behavior, comments, folding
- Real-time diagnostics (debounced while typing): brackets and strings, pipes, SQL-style patterns (
select/from), table/column names against schema, multiline join keys,lettable bindings, and query-block scope - Information hints when column checks are limited (
lookup)
IntelliSense and schemas
- Completions for 719+ bundled tables, operators, chart types, and 100+ functions
- Column suggestions (with type and description) from the same query scope used by diagnostics
- Optional custom schema via
kqlAssistant.userSchemaPathfor tenant-specific tables (merged over bundled data) - Hover documentation for operators and functions; hover on table names and column names when the schema and context apply
- Signature help while typing function arguments
Productivity
- Format Document and Format Selection
- Code actions (lightbulb): typos, SQL-style fixes, brackets, missing
| - Optional markdown headers (
# Category #,## Rule ##) with folding, outline navigation, and KQL: Select Current Query / KQL: Copy Current Query - Inline CodeLens on headers (copy/select, line counts) where supported
- Open the Extensions view (
Ctrl+Shift+X/Cmd+Shift+X) - Search for KQL Assistant
- Install
Or open the Marketplace listing.
git clone https://github.com/petstuk/kql-assistant.git
cd kql-assistant
npm install
npm run compile- Development: press
F5in VS Code (Extension Development Host) - VSIX:
npm run packagethen
code --install-extension kql-assistant-0.9.0.vsix
- Open or create a file with extension
.kqlor.kusto - Start from a table name, then chain operators with
| - Use Format Document (
Shift+Alt+F) and KQL: Check Syntax when you want a full offline validation pass (does not run against Azure)
Use markdown-style headers so folds, outline, and CodeLens stay aligned:
# Category Name #— group## Rule or query name ##— one query block
Example:
# Identity #
## Suspicious sign-ins ##
SigninLogs
| where ResultType != 0
| project TimeGenerated, UserPrincipalName, IPAddress
## Another rule ##
SigninLogs
| summarize c = count() by bin(TimeGenerated, 1h)Fold arrows in the gutter collapse sections; use the Outline view to jump between blocks.
| Command | Action |
|---|---|
| KQL: Check Syntax | Re-run offline diagnostics; message clarifies this is not execution validation |
| KQL: Select Current Query | Select the query section around the cursor (respects header boundaries) |
| KQL: Copy Current Query | Copy query body to the clipboard (without the header line) |
Open via Command Palette (Ctrl+Shift+P / Cmd+Shift+P).
| Setting | Default | Description |
|---|---|---|
kqlAssistant.enableDiagnostics |
true |
Turn syntax/schema diagnostics on or off |
kqlAssistant.diagnosticLevel |
error |
error, warning, or information |
kqlAssistant.userSchemaPath |
(empty) | Optional JSON file with custom tables/columns (same shape as bundled schemas/all-tables.json); merged over bundled schemas |
In Settings, search for KQL Assistant.
There are 30+ snippets: type a prefix (e.g. timerange, join, failedlogins, agg) and press Tab. The full set is defined in snippets/kql.json in this repository.
- Hover operators, functions, tables, and columns (when context is known) for documentation
- Lightbulb fixes appear on diagnostics from KQL Assistant
- Format Document normalizes pipes, spacing, and commas (see also Format Selection for a range)
StormEvents
| where State == "TEXAS"
| project StartTime, EventType, DamageProperty
| take 10
StormEvents
| summarize EventCount = count(), TotalDamage = sum(DamageProperty) by State
| order by TotalDamage desc
StormEvents
| where StartTime >= ago(30d)
| extend Month = startofmonth(StartTime)
| summarize count() by Month, EventType
| render timechartKQL is large; the extension focuses on common keywords, tabular operators, aggregation helpers (count, sum, dcount, make_list, …), and scalar functions (ago, bin, parse_json, tostring, …). Completions and hovers cover a substantial subset; see KQL reference for the full language.
- Validation is offline parser-backed structure + schema — not the Kusto compiler; a clean file does not guarantee the query runs in your environment
- Join validation covers common single-line and multiline
onkeys; complex join shapes are still partial - Column checks remain limited for
lookup(an information diagnostic is shown where checks are skipped) - Heavy use of subqueries,
dynamic, or macros may produce imperfect diagnostics - Function parameter types are not deeply validated
- Schemas are not fetched from Azure automatically; use
kqlAssistant.userSchemaPathfor a local JSON export of custom tables
Issues and pull requests are welcome. See CONTRIBUTING.md for bug reports, feature ideas, and development setup.
MIT — see LICENSE.
Built using Microsoft’s KQL documentation and community practice for Log Analytics and Sentinel queries.
- Parser-backed query understanding: diagnostics, completions, and hovers now share a QueryModel for query blocks, pipe steps, aliases,
lettable bindings, multiline join keys,project-away, and simplemv-expand.
- Trust & scope: Check Syntax and post-save feedback aligned with what the extension actually validates; optional
userSchemaPathfor custom tables; information diagnostics when column checks are limited; single-line join key validation; debounced live diagnostics; unit tests and CI.
- Column validation fixes:
project-alias columns (e.g.OfficeTime = TimeGenerated) are no longer flagged as unknown. Columns from multi-line join subqueries (inner table columns plus any aliases projected inside the subquery) are now correctly recognised in downstream operators. Schema revert: five columns incorrectly added toOfficeActivityare removed.
- Documentation: clearer Marketplace README; full history in CHANGELOG.md.
- Full-schema table completions; schema-backed hover for tables and columns; single shared schema load; quick fix alignment for SQL-style messages and bracket/
fromfixes.
- CodeLens line/rule counts on headers; redundant header hover removed.
Earlier versions: CHANGELOG.md.