
Sqldw Consumption Cli
- 118 installs
- 886 repo stars
- Updated July 23, 2026
- microsoft/skills-for-fabric
Execute T-SQL queries against Fabric Data Warehouse, Lakehouse SQL Endpoints, and Mirrored Databases via sqlcmd CLI with Entra ID authentication.
About
sqldw-consumption-cli executes read-only T-SQL queries against Microsoft Fabric data warehouses, lakehouse SQL endpoints, and mirrored databases using the Go-based sqlcmd CLI tool. Supports schema discovery, row counting, SELECT queries, filtering, aggregation, performance monitoring, and CSV/JSON export. Includes agentic data exploration workflows with step-by-step schema discovery. Uses Entra ID authentication via DefaultAzureCredential. Preferred default for lakehouse queries unless PySpark or Spark DataFrames explicitly requested. Covers connection fundamentals, supported T-SQL surface area, cross-database queries, temporary tables, security, and monitoring via DMVs and Query Insights.
- Entra ID auth via sqlcmd Go binary - no ODBC driver required
- Agentic exploration workflow with schema discovery sequence
- Read-only safe on SQL endpoints; DML support on Warehouse
- Performance monitoring via DMVs and Query Insights (30-day history)
- Cross-database queries, views, TVFs, and temp table staging patterns
Sqldw Consumption Cli by the numbers
- 118 all-time installs (skills.sh)
- Ranked #2,848 of 4,386 Backend & APIs skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/microsoft/skills-for-fabric --skill sqldw-consumption-cliAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 118 |
|---|---|
| repo stars | ★ 886 |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 23, 2026 |
| Repository | microsoft/skills-for-fabric ↗ |
What it does
Query Fabric Data Warehouse, Lakehouse SQL Endpoints, and Mirrored Databases via CLI for row counts, schema exploration, filtering, aggregation, and CSV export.
Who is it for?
Developers querying Fabric data warehouses and lakehouse SQL endpoints; agentic data exploration; reporting views; schema discovery; performance diagnostics; CSV/JSON export pipelines.
Skip if: PySpark/Spark DataFrame workflows; write operations on SQL endpoints (read-only); ODBC-dependent legacy tools; MARS-enabled connection strings; building Fabric items/workspaces.
When should I use this skill?
User requests: warehouse/lakehouse query, SQL query, T-SQL, row counts, schema exploration, describe warehouse, generate T-SQL script, warehouse performance, export SQL data, connect to warehouse, lakehouse data explorat
What you get
Users can discover schemas, count rows, filter/aggregate data, monitor query performance, and export results to CSV/JSON via standard sqlcmd commands.
Files
Update Check — ONCE PER SESSION (mandatory)
The first time this skill is used in a session, run the check-updates skill before proceeding.
- GitHub Copilot CLI / VS Code: invoke the check-updates skill.- Claude Code / Cowork / Cursor / Windsurf / Codex: compare local vs remote package.json version.
- Skip if the check was already performed earlier in this session.
CRITICAL NOTES
1. To find the workspace details (including its ID) from workspace name: list all workspaces and, then, use JMESPath filtering
2. To find the item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace and, then, use JMESPath filtering
SQL Endpoint Consumption — CLI Skill
Table of Contents
| Task | Reference | Notes |
|---|---|---|
| Finding Workspaces and Items in Fabric | COMMON-CLI.md § Finding Workspaces and Items in Fabric | Mandatory — READ link first [needed for finding workspace id by its name or item id by its name, item type, and workspace id] |
| Fabric Topology & Key Concepts | COMMON-CORE.md § Fabric Topology & Key Concepts | |
| Environment URLs | COMMON-CORE.md § Environment URLs | |
| Authentication & Token Acquisition | COMMON-CORE.md § Authentication & Token Acquisition | Wrong audience = 401; read before any auth issue |
| Core Control-Plane REST APIs | COMMON-CORE.md § Core Control-Plane REST APIs | Includes pagination, LRO polling, and rate-limiting patterns |
| OneLake Data Access | COMMON-CORE.md § OneLake Data Access | Requires storage.azure.com token, not Fabric token |
| Job Execution | COMMON-CORE.md § Job Execution | |
| Capacity Management | COMMON-CORE.md § Capacity Management | |
| Gotchas, Best Practices & Troubleshooting | COMMON-CORE.md § Gotchas, Best Practices & Troubleshooting | |
| Tool Selection Rationale | COMMON-CLI.md § Tool Selection Rationale | |
| Authentication Recipes | COMMON-CLI.md § Authentication Recipes | az login flows and token acquisition |
Fabric Control-Plane API via az rest | COMMON-CLI.md § Fabric Control-Plane API via az rest | Always pass `--resource`; includes pagination and LRO helpers |
OneLake Data Access via curl | COMMON-CLI.md § OneLake Data Access via curl | Use curl not az rest (different token audience) |
| SQL / TDS Data-Plane Access | COMMON-CLI.md § SQL / TDS Data-Plane Access | sqlcmd (Go) connect, query, CSV export |
| Job Execution (CLI) | COMMON-CLI.md § Job Execution | |
| OneLake Shortcuts | COMMON-CLI.md § OneLake Shortcuts | |
| Capacity Management (CLI) | COMMON-CLI.md § Capacity Management | |
| Composite Recipes | COMMON-CLI.md § Composite Recipes | |
| Gotchas & Troubleshooting (CLI-Specific) | COMMON-CLI.md § Gotchas & Troubleshooting (CLI-Specific) | az rest audience, shell escaping, token expiry |
| Quick Reference | COMMON-CLI.md § Quick Reference | az rest template + token audience/tool matrix |
| Item-Type Capability Matrix | SQLDW-CONSUMPTION-CORE.md § Item-Type Capability Matrix | Read first — shows what's read-only (SQLEP) vs read-write (DW) |
| Connection Fundamentals | SQLDW-CONSUMPTION-CORE.md § Connection Fundamentals | TDS, port 1433, Entra-only, no MARS |
| Supported T-SQL Surface Area (Consumption Focus) | SQLDW-CONSUMPTION-CORE.md § Supported T-SQL Surface Area | Read before writing T-SQL — includes data types (no nvarchar/datetime/money) |
| Read-Side Objects You Can Create | SQLDW-CONSUMPTION-CORE.md § Read-Side Objects You Can Create | Views, TVFs, scalar UDFs, procedures |
| Temporary Tables | SQLDW-CONSUMPTION-CORE.md § Temporary Tables | Use DISTRIBUTION = ROUND_ROBIN for INSERT INTO SELECT support |
| Cross-Database Queries | SQLDW-CONSUMPTION-CORE.md § Cross-Database Queries | 3-part naming, same workspace |
| Security for Consumption | SQLDW-CONSUMPTION-CORE.md § Security for Consumption | GRANT/DENY, RLS, CLS, DDM |
| Monitoring and Diagnostics | SQLDW-CONSUMPTION-CORE.md § Monitoring and Diagnostics | Includes query labels; DMVs (live) + queryinsights.* (30-day history) |
| Performance: Best Practices and Troubleshooting | SQLDW-CONSUMPTION-CORE.md § Performance: Best Practices and Troubleshooting | Statistics, caching, clustering, query tips |
| REST API: Refresh SQL Endpoint Metadata | SQLDW-CONSUMPTION-CORE.md § REST API: Refresh SQL Endpoint Metadata | Force metadata sync when SQLEP data is stale after ETL |
| System Catalog Queries (Metadata Exploration) | SQLDW-CONSUMPTION-CORE.md § System Catalog Queries | sys.tables, sys.columns, sys.views, sys.stats |
| Common Consumption Patterns (End-to-End Examples) | SQLDW-CONSUMPTION-CORE.md § Common Consumption Patterns | Reporting views, cross-DB analytics, temp table staging |
| Gotchas and Troubleshooting Reference | SQLDW-CONSUMPTION-CORE.md § Gotchas and Troubleshooting Reference | 18 numbered issues with cause + resolution |
| Quick Reference: Consumption Capabilities by Scenario | SQLDW-CONSUMPTION-CORE.md § Quick Reference: Consumption Capabilities | Scenario → approach lookup |
| Schema and Object Discovery | discovery-queries.md § Schema and Object Discovery | Tables, columns, views, functions, procedures, cross-DB |
| Security Discovery | discovery-queries.md § Security Discovery | |
| Statistics and Performance Metadata | discovery-queries.md § Statistics and Performance Metadata | |
| Bash — Data Export | script-templates.md § Bash — Data Export | Query to CSV + parameterized date range export |
| Bash — Schema Discovery Report | script-templates.md § Bash — Schema Discovery Report | |
| Bash — Performance Investigation | script-templates.md § Bash — Performance Investigation | |
| PowerShell Templates | script-templates.md § PowerShell Templates | Query to CSV + schema discovery |
| Tool Stack | SKILL.md § Tool Stack | |
| Connection | SKILL.md § Connection | |
| Agentic Exploration ("Chat With My Data") | SKILL.md § Agentic Exploration | Start here for data exploration |
| Script Generation | consumption-cli-quickref.md § Script Generation | Formatting flags, piped input, parameterized queries |
| Monitoring and Performance | consumption-cli-quickref.md § Monitoring and Performance | Active queries DMV, KILL syntax |
| Gotchas, Rules, Troubleshooting | SKILL.md § Gotchas, Rules, Troubleshooting | MUST DO / AVOID / PREFER checklists |
| Agent Integration Notes | consumption-cli-quickref.md § Agent Integration Notes | Per-agent CLI tips |
---
Tool Stack
| Tool | Role | Install |
|---|---|---|
sqlcmd (Go) | Primary: Execute T-SQL. Standalone binary, no ODBC driver, built-in Entra ID auth via DefaultAzureCredential. | winget install sqlcmd / brew install sqlcmd / apt-get install sqlcmd |
az CLI | Auth (az login), token acquisition, Fabric REST for endpoint discovery. | Pre-installed in most dev environments |
jq | Parse JSON from az rest | Pre-installed or trivial |
Agent check — verify before first SQL operation:
```bash
sqlcmd --version 2>/dev/null || echo "INSTALL: winget install sqlcmd OR brew install sqlcmd"
```
---
Connection
Discover the SQL Endpoint FQDN
Per COMMON-CLI.md Discovering Connection Parameters via REST:
WS_ID="<workspaceId>"
ITEM_ID="<warehouseOrLakehouseId>"
# Warehouse
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/warehouses/$ITEM_ID" \
--query "properties.connectionString" --output tsv
# Lakehouse SQL endpoint
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/lakehouses/$ITEM_ID" \
--query "properties.sqlEndpointProperties.connectionString" --output tsvResult: <uniqueId>.datawarehouse.fabric.microsoft.com
Connect with sqlcmd (Go)
# Interactive session (Entra login via browser if needed)
sqlcmd -S "<endpoint>.datawarehouse.fabric.microsoft.com" -d "<DatabaseName>" -G
# Non-interactive one-shot query
sqlcmd -S "<endpoint>.datawarehouse.fabric.microsoft.com" -d "<DatabaseName>" -G \
-Q "SELECT TOP 10 * FROM dbo.FactSales"
# Explicit ActiveDirectoryDefault (uses az login session)
sqlcmd -S "<endpoint>.datawarehouse.fabric.microsoft.com" -d "<DatabaseName>" \
--authentication-method ActiveDirectoryDefault \
-Q "SELECT TOP 10 * FROM dbo.FactSales"
# Service principal (CI/CD)
SQLCMDPASSWORD="<clientSecret>" \
sqlcmd -S "<endpoint>.datawarehouse.fabric.microsoft.com" -d "<DatabaseName>" \
--authentication-method ActiveDirectoryServicePrincipal \
-U "<appId>" \
-Q "SELECT COUNT(*) FROM dbo.FactSales"Reusable Connection Variables
# Set once at script top
FABRIC_SERVER="<endpoint>.datawarehouse.fabric.microsoft.com"
FABRIC_DB="<DatabaseName>"
SQLCMD="sqlcmd -S $FABRIC_SERVER -d $FABRIC_DB -G"
# Use throughout
$SQLCMD -Q "SELECT TOP 5 * FROM dbo.DimProduct"
$SQLCMD -i myscript.sqlPowerShell / Windows CMD
# PowerShell
$s = "<endpoint>.datawarehouse.fabric.microsoft.com"; $db = "<DatabaseName>"
sqlcmd -S $s -d $db -G -Q "SELECT TOP 10 * FROM dbo.FactSales"
# CMD: use set S=... and %S% / %DB% instead of $variables---
Agentic Exploration ("Chat With My Data")
Schema Discovery Sequence
Run these in order to understand what's in the endpoint. See references/discovery-queries.md for extended discovery queries.
# 1. List schemas
$SQLCMD -Q "SELECT schema_name FROM information_schema.schemata ORDER BY schema_name" -W
# 2. List tables and views
$SQLCMD -Q "SELECT table_schema, table_name, table_type FROM information_schema.tables ORDER BY table_schema, table_name" -W
# 3. Columns for a table
$SQLCMD -Q "SELECT column_name, data_type, character_maximum_length, is_nullable FROM information_schema.columns WHERE table_schema='dbo' AND table_name='FactSales' ORDER BY ordinal_position" -W
# 4. Preview rows
$SQLCMD -Q "SELECT TOP 5 * FROM dbo.FactSales" -W
# 5. Row counts
$SQLCMD -Q "SELECT s.name AS [schema], t.name AS [table], SUM(p.rows) AS row_count FROM sys.tables t JOIN sys.schemas s ON t.schema_id=s.schema_id JOIN sys.partitions p ON t.object_id=p.object_id AND p.index_id IN (0,1) GROUP BY s.name, t.name ORDER BY row_count DESC" -W
# 6. Programmability objects (views, functions, procedures)
$SQLCMD -Q "SELECT name, type_desc FROM sys.objects WHERE type IN ('V','FN','IF','P','TF') ORDER BY type_desc, name" -WAgentic Workflow
1. Discover → Run Steps 1–3 to understand available tables/columns. 2. Sample → SELECT TOP 5 on relevant tables. 3. Formulate → Write T-SQL using SQLDW-CONSUMPTION-CORE.md Supported T-SQL Surface Area. 4. Execute → $SQLCMD -Q "...". 5. Iterate → Refine based on results. 6. Present → Show results or generate a reusable script (Script Generation section).
---
Gotchas, Rules, Troubleshooting
For full T-SQL/platform gotchas: SQLDW-CONSUMPTION-CORE.md Gotchas and Troubleshooting Reference and COMMON-CLI.md Gotchas & Troubleshooting (CLI-Specific).
MUST DO
- Always `-d <DatabaseName>` — FQDN alone is insufficient.
- Always `-G` or `--authentication-method` — SQL auth not supported on Fabric.
- `az login` first —
ActiveDirectoryDefaultuses az session. No session → cryptic failure. - `SET NOCOUNT ON;` in scripts — suppresses row-count messages that corrupt output.
- Label queries with
OPTION (LABEL = 'AGENTCLI_...')for Query Insights tracing.
AVOID
- ODBC sqlcmd (
/opt/mssql-tools/bin/sqlcmd) — requires ODBC driver. Use Go version. - Omitting `-W` in scripts — trailing spaces corrupt CSV.
- DML on SQLEP — Lakehouse/Mirrored DB endpoints are read-only. DML only on Warehouse.
- MARS — not supported. Remove
MultipleActiveResultSetsfrom connection strings. - Hardcoded FQDNs — discover via REST API (Discover the SQL Endpoint FQDN).
PREFER
- `sqlcmd (Go) -G` over curl+token for SQL queries.
- `-Q` (non-interactive exit) for agentic use.
- Piped input for multi-statement batches or queries with quotes.
- `-i file.sql` for complex queries — avoids shell escaping.
- `-F vertical` for exploration of wide tables.
- Env vars (
FABRIC_SERVER,FABRIC_DB) for script reuse. - `az rest` for Fabric REST API — use sqlcmd only for T-SQL.
TROUBLESHOOTING
| Symptom | Cause | Fix |
|---|---|---|
Login failed for user '<token-identified principal>' | Wrong DB name or no access | Verify -d matches item name exactly (case-sensitive) |
Cannot open server | Wrong FQDN or network | Re-discover via REST API; check port 1433 |
Login timeout expired | Port 1433 blocked | nc -zv <endpoint> 1433; check firewall/VPN |
ActiveDirectoryDefault failure | az login expired or wrong tenant | az login --tenant <tenantId> |
| Garbled CSV output | Missing -W or wrong -s | Add -W -s"," -w 4000 |
(N rows affected) in file | No SET NOCOUNT ON | Prepend SET NOCOUNT ON; |
Invalid object name 'queryinsights...' | New warehouse < 2 min old | Wait ~2 minutes |
| No rows but data exists | RLS filtering | Check USER_NAME(), verify RLS policies |
sqlcmd not found | Go version not installed | winget install sqlcmd / brew install sqlcmd |
Consumption CLI Quick Reference
Concise sqlcmd output formatting, monitoring queries, and agent tips. For full T-SQL patterns, see SQLDW-CONSUMPTION-CORE.md. For full reusable scripts, see script-templates.md.
All examples assume reusable connection variables are set:
FABRIC_SERVER="<endpoint>.datawarehouse.fabric.microsoft.com"
FABRIC_DB="<WarehouseName>"
SQLCMD="sqlcmd -S $FABRIC_SERVER -d $FABRIC_DB -G"Script Generation
Bash Template
See script-templates.md for full bash and PowerShell templates.
Key pattern for script generation:
#!/usr/bin/env bash
set -euo pipefail
FABRIC_SERVER="${FABRIC_SERVER:?Set FABRIC_SERVER env var}"
FABRIC_DB="${FABRIC_DB:?Set FABRIC_DB env var}"
command -v sqlcmd >/dev/null 2>&1 || { echo "ERROR: sqlcmd not found. Install: winget install sqlcmd"; exit 1; }
az account show >/dev/null 2>&1 || { echo "Run 'az login' first."; exit 1; }
sqlcmd -S "$FABRIC_SERVER" -d "$FABRIC_DB" -G \
-Q "SET NOCOUNT ON; SELECT * FROM dbo.FactSales WHERE SaleDate >= '2025-01-01'" \
-W -s"," -h-1 -o results.csv
echo "Results written to results.csv"sqlcmd Output Formatting Flags
| Flag | Purpose | When |
|---|---|---|
-W | Trim trailing spaces | Always |
-s"," | Column separator | CSV export |
-s"\t" | Tab separator | TSV export |
-h-1 | No headers/dashes | Clean CSV body |
-h 1 | Headers, no dashes | CSV with headers |
-w 4000 | Line width | Wide tables |
-o file | Output to file | Export |
-i file.sql | Input from file | Complex queries |
-F vertical | One column per row | Exploration |
SET NOCOUNT ON; | Suppress row-affected messages | Always in scripts |
Piped Input
# Pipe SQL from stdin
echo "SELECT TOP 5 * FROM dbo.FactSales" | sqlcmd -S "$FABRIC_SERVER" -d "$FABRIC_DB" -G
# Here-doc for multi-statement
cat <<'SQL' | sqlcmd -S "$FABRIC_SERVER" -d "$FABRIC_DB" -G
SET NOCOUNT ON;
SELECT COUNT(*) AS TotalRows FROM dbo.FactSales;
SELECT TOP 3 ProductID, SUM(Amount) AS Total FROM dbo.FactSales GROUP BY ProductID ORDER BY Total DESC;
SQLParameterized Queries (sqlcmd Variables)
sqlcmd -S "$FABRIC_SERVER" -d "$FABRIC_DB" -G \
-v StartDate="2025-01-01" EndDate="2025-06-30" \
-Q "SET NOCOUNT ON; SELECT * FROM dbo.FactSales WHERE SaleDate BETWEEN '$(StartDate)' AND '$(EndDate)'" -WMonitoring and Performance
For full query catalog see SQLDW-CONSUMPTION-CORE.md § Monitoring and Diagnostics and script-templates.md § Performance Investigation.
# Active queries
$SQLCMD -Q "SELECT request_id, session_id, command, status, total_elapsed_time/1000 AS elapsed_sec FROM sys.dm_exec_requests WHERE status='running' ORDER BY total_elapsed_time DESC" -W
# Kill a stuck session (Admin role)
$SQLCMD -Q "KILL '<distributed_statement_id>'"Agent Integration Notes
- GitHub Copilot CLI:
gh copilot suggest -t shellforsqlcmdone-liners; ensure-Gand-din output; use "explain" mode for errors. - Claude Code / Cowork: run
sqlcmd -Q "..."viabashtool; follow the Agentic Workflow in SKILL.md; produce scripts using script-templates.md. - Always verify
sqlcmdavailability before first SQL operation.
Extended Discovery Queries
Queries for deep schema exploration beyond the basics in SKILL.md Schema Discovery Sequence. All queries work on Warehouse, Lakehouse SQLEP, and Mirrored DB SQLEP.
Schema and Object Discovery
Table and Column Metadata
# All columns across all tables with types
$SQLCMD -Q "
SELECT t.table_schema, t.table_name, c.column_name,
c.data_type, c.character_maximum_length,
c.numeric_precision, c.numeric_scale, c.is_nullable
FROM information_schema.tables t
JOIN information_schema.columns c
ON t.table_schema = c.table_schema AND t.table_name = c.table_name
WHERE t.table_type = 'BASE TABLE'
ORDER BY t.table_schema, t.table_name, c.ordinal_position" -W
# Tables with row counts and column counts
$SQLCMD -Q "
SELECT s.name AS [schema], t.name AS [table],
COUNT(DISTINCT c.column_id) AS col_count,
SUM(p.rows) AS row_count
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1)
GROUP BY s.name, t.name
ORDER BY row_count DESC" -W
# Constraints (PK, FK, UNIQUE)
$SQLCMD -Q "
SELECT tc.constraint_type, tc.table_schema, tc.table_name,
tc.constraint_name, kcu.column_name
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
ORDER BY tc.table_schema, tc.table_name, tc.constraint_type" -W
# Foreign key relationships (useful for JOIN hints)
$SQLCMD -Q "
SELECT
fk.name AS fk_name,
OBJECT_SCHEMA_NAME(fk.parent_object_id) + '.' + OBJECT_NAME(fk.parent_object_id) AS child_table,
COL_NAME(fkc.parent_object_id, fkc.parent_column_id) AS child_column,
OBJECT_SCHEMA_NAME(fk.referenced_object_id) + '.' + OBJECT_NAME(fk.referenced_object_id) AS parent_table,
COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) AS parent_column
FROM sys.foreign_keys fk
JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
ORDER BY child_table, fk_name" -WView and Function Definitions
# View definitions (source SQL)
$SQLCMD -Q "
SELECT s.name AS [schema], v.name AS [view],
m.definition
FROM sys.views v
JOIN sys.schemas s ON v.schema_id = s.schema_id
JOIN sys.sql_modules m ON v.object_id = m.object_id
ORDER BY s.name, v.name" -W
# Function definitions
$SQLCMD -Q "
SELECT s.name AS [schema], o.name AS [function], o.type_desc,
m.definition
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
JOIN sys.sql_modules m ON o.object_id = m.object_id
WHERE o.type IN ('FN','IF','TF')
ORDER BY s.name, o.name" -W
# Stored procedure definitions
$SQLCMD -Q "
SELECT s.name AS [schema], p.name AS [procedure],
m.definition
FROM sys.procedures p
JOIN sys.schemas s ON p.schema_id = s.schema_id
JOIN sys.sql_modules m ON p.object_id = m.object_id
ORDER BY s.name, p.name" -W
# Procedure parameters
$SQLCMD -Q "
SELECT OBJECT_SCHEMA_NAME(p.object_id) AS [schema],
OBJECT_NAME(p.object_id) AS [procedure],
p.name AS param_name,
TYPE_NAME(p.user_type_id) AS data_type,
p.max_length, p.is_output
FROM sys.parameters p
JOIN sys.procedures pr ON p.object_id = pr.object_id
WHERE p.parameter_id > 0
ORDER BY [schema], [procedure], p.parameter_id" -WCross-Database Discovery
# List all accessible databases in the workspace
$SQLCMD -Q "SELECT name, create_date FROM sys.databases ORDER BY name" -W
# Tables in another database (3-part name)
$SQLCMD -Q "SELECT table_schema, table_name FROM OtherDatabase.information_schema.tables ORDER BY table_schema, table_name" -WSecurity Discovery
# Current user identity
$SQLCMD -Q "SELECT USER_NAME() AS current_user, SUSER_SNAME() AS login_name" -W
# Database principals
$SQLCMD -Q "
SELECT name, type_desc, authentication_type_desc
FROM sys.database_principals
WHERE type NOT IN ('R')
ORDER BY name" -W
# Role memberships
$SQLCMD -Q "
SELECT r.name AS role_name, m.name AS member_name
FROM sys.database_role_members drm
JOIN sys.database_principals r ON drm.role_principal_id = r.principal_id
JOIN sys.database_principals m ON drm.member_principal_id = m.principal_id
ORDER BY r.name, m.name" -W
# Object-level permissions
$SQLCMD -Q "
SELECT
dp.state_desc + ' ' + dp.permission_name AS permission,
OBJECT_SCHEMA_NAME(dp.major_id) + '.' + OBJECT_NAME(dp.major_id) AS [object],
prin.name AS grantee
FROM sys.database_permissions dp
JOIN sys.database_principals prin ON dp.grantee_principal_id = prin.principal_id
WHERE dp.major_id > 0
ORDER BY [object], grantee" -WStatistics and Performance Metadata
# Statistics on tables
$SQLCMD -Q "
SELECT OBJECT_SCHEMA_NAME(s.object_id) AS [schema],
OBJECT_NAME(s.object_id) AS [table],
s.name AS stat_name,
COL_NAME(sc.object_id, sc.column_id) AS column_name,
STATS_DATE(s.object_id, s.stats_id) AS last_updated
FROM sys.stats s
JOIN sys.stats_columns sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id
ORDER BY [schema], [table], stat_name" -W
# Data clustering info (DW only) — see SQLDW-CONSUMPTION-CORE.md § Performance for full query
$SQLCMD -Q "SELECT OBJECT_SCHEMA_NAME(ic.object_id) AS [schema], OBJECT_NAME(ic.object_id) AS [table], COL_NAME(ic.object_id, ic.column_id) AS cluster_column FROM sys.index_columns ic JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE i.type_desc = 'CLUSTERED COLUMNSTORE' ORDER BY [schema], [table], ic.key_ordinal" -WScript Templates
Self-contained templates for generating reusable query scripts.
Bash — Data Export
Query to CSV
#!/usr/bin/env bash
set -euo pipefail
# --- Configuration ---
FABRIC_SERVER="${FABRIC_SERVER:?Set FABRIC_SERVER env var (e.g. xxx.datawarehouse.fabric.microsoft.com)}"
FABRIC_DB="${FABRIC_DB:?Set FABRIC_DB env var (e.g. MyWarehouse)}"
OUTPUT_FILE="${1:-results.csv}"
# --- Prerequisites ---
command -v sqlcmd >/dev/null 2>&1 || { echo "ERROR: sqlcmd (Go) not found. Install: winget install sqlcmd OR brew install sqlcmd"; exit 1; }
az account show >/dev/null 2>&1 || { echo "ERROR: Not logged in. Run: az login"; exit 1; }
# --- Query ---
QUERY=$(cat <<'SQL'
SET NOCOUNT ON;
SELECT
ProductID,
ProductName,
Category,
Price
FROM dbo.DimProduct
ORDER BY ProductName;
SQL
)
echo "$QUERY" | sqlcmd -S "$FABRIC_SERVER" -d "$FABRIC_DB" -G \
-W -s"," -w 4000 -h 1 \
-o "$OUTPUT_FILE"
echo "✓ Written to $OUTPUT_FILE ($(wc -l < "$OUTPUT_FILE") lines)"Parameterized Date Range Export
#!/usr/bin/env bash
set -euo pipefail
FABRIC_SERVER="${FABRIC_SERVER:?}"
FABRIC_DB="${FABRIC_DB:?}"
START_DATE="${1:?Usage: $0 <start_date> <end_date> [output_file]}"
END_DATE="${2:?Usage: $0 <start_date> <end_date> [output_file]}"
OUTPUT_FILE="${3:-export_${START_DATE}_${END_DATE}.csv}"
command -v sqlcmd >/dev/null 2>&1 || { echo "ERROR: sqlcmd not found."; exit 1; }
az account show >/dev/null 2>&1 || { echo "Run 'az login' first."; exit 1; }
sqlcmd -S "$FABRIC_SERVER" -d "$FABRIC_DB" -G \
-v StartDate="$START_DATE" EndDate="$END_DATE" \
-Q "SET NOCOUNT ON; SELECT * FROM dbo.FactSales WHERE SaleDate BETWEEN '\$(StartDate)' AND '\$(EndDate)'" \
-W -s"," -w 4000 -h 1 \
-o "$OUTPUT_FILE"
echo "✓ Exported to $OUTPUT_FILE"Bash — Schema Discovery Report
#!/usr/bin/env bash
set -euo pipefail
FABRIC_SERVER="${FABRIC_SERVER:?}"
FABRIC_DB="${FABRIC_DB:?}"
SQLCMD="sqlcmd -S $FABRIC_SERVER -d $FABRIC_DB -G"
command -v sqlcmd >/dev/null 2>&1 || { echo "ERROR: sqlcmd not found."; exit 1; }
az account show >/dev/null 2>&1 || { echo "Run 'az login' first."; exit 1; }
echo "=== SCHEMAS ==="
$SQLCMD -Q "SELECT schema_name FROM information_schema.schemata ORDER BY schema_name" -W
echo ""
echo "=== TABLES (with row counts) ==="
$SQLCMD -Q "
SELECT s.name AS [schema], t.name AS [table], SUM(p.rows) AS rows
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1)
GROUP BY s.name, t.name
ORDER BY rows DESC" -W
echo ""
echo "=== VIEWS ==="
$SQLCMD -Q "SELECT SCHEMA_NAME(schema_id) AS [schema], name FROM sys.views ORDER BY [schema], name" -W
echo ""
echo "=== STORED PROCEDURES ==="
$SQLCMD -Q "SELECT SCHEMA_NAME(schema_id) AS [schema], name FROM sys.procedures ORDER BY [schema], name" -W
echo ""
echo "=== FUNCTIONS ==="
$SQLCMD -Q "SELECT SCHEMA_NAME(schema_id) AS [schema], name, type_desc FROM sys.objects WHERE type IN ('FN','IF','TF') ORDER BY [schema], name" -WBash — Performance Investigation
#!/usr/bin/env bash
set -euo pipefail
FABRIC_SERVER="${FABRIC_SERVER:?}"
FABRIC_DB="${FABRIC_DB:?}"
HOURS="${1:-24}"
SQLCMD="sqlcmd -S $FABRIC_SERVER -d $FABRIC_DB -G"
command -v sqlcmd >/dev/null 2>&1 || { echo "ERROR: sqlcmd not found."; exit 1; }
az account show >/dev/null 2>&1 || { echo "Run 'az login' first."; exit 1; }
echo "=== ACTIVE QUERIES ==="
$SQLCMD -Q "SELECT request_id, session_id, command, status, total_elapsed_time/1000 AS elapsed_sec FROM sys.dm_exec_requests WHERE status='running' ORDER BY total_elapsed_time DESC" -W
echo ""
echo "=== TOP 20 SLOWEST QUERIES (last ${HOURS}h) ==="
$SQLCMD -Q "
SELECT TOP 20
distributed_statement_id,
login_name,
COALESCE(label,'') AS label,
total_elapsed_time_ms,
data_scanned_remote_storage_mb,
LEFT(command, 120) AS command_preview
FROM queryinsights.exec_requests_history
WHERE start_time >= DATEADD(HOUR, -${HOURS}, GETUTCDATE())
ORDER BY total_elapsed_time_ms DESC" -W
echo ""
echo "=== TOP 10 MOST FREQUENT ==="
$SQLCMD -Q "
SELECT TOP 10
query_hash,
execution_count,
median_total_elapsed_time_ms,
LEFT(last_query_text, 120) AS query_preview
FROM queryinsights.frequently_run_queries
ORDER BY execution_count DESC" -WPowerShell Templates
Query to CSV
#Requires -Version 5.1
param(
[Parameter(Mandatory)][string]$Server,
[Parameter(Mandatory)][string]$Database,
[string]$OutputFile = "results.csv"
)
if (-not (Get-Command sqlcmd -ErrorAction SilentlyContinue)) {
Write-Error "sqlcmd (Go) not found. Install: winget install sqlcmd"; exit 1
}
$null = az account show 2>$null
if ($LASTEXITCODE -ne 0) { Write-Error "Not logged in. Run: az login"; exit 1 }
$query = @"
SET NOCOUNT ON;
SELECT ProductID, ProductName, Category, Price
FROM dbo.DimProduct
ORDER BY ProductName;
"@
sqlcmd -S $Server -d $Database -G -Q $query -W -s"," -w 4000 -h 1 -o $OutputFile
Write-Host "Written to $OutputFile"Schema Discovery
#Requires -Version 5.1
param(
[Parameter(Mandatory)][string]$Server,
[Parameter(Mandatory)][string]$Database
)
if (-not (Get-Command sqlcmd -ErrorAction SilentlyContinue)) {
Write-Error "sqlcmd not found. Install: winget install sqlcmd"; exit 1
}
Write-Host "`n=== TABLES ===" -ForegroundColor Cyan
sqlcmd -S $Server -d $Database -G -Q "SELECT table_schema, table_name, table_type FROM information_schema.tables ORDER BY table_schema, table_name" -W
Write-Host "`n=== ROW COUNTS ===" -ForegroundColor Cyan
sqlcmd -S $Server -d $Database -G -Q "SELECT s.name AS [schema], t.name AS [table], SUM(p.rows) AS rows FROM sys.tables t JOIN sys.schemas s ON t.schema_id=s.schema_id JOIN sys.partitions p ON t.object_id=p.object_id AND p.index_id IN (0,1) GROUP BY s.name, t.name ORDER BY rows DESC" -WRelated skills
FAQ
What does sqldw-consumption-cli do?
sqldw-consumption-cli is a Microsoft skills-for-fabric agent skill that compresses how solo builders and small data teams interact with Fabric SQL data warehouse through sqlcmd from bash or PowerShell.
When should I use sqldw-consumption-cli?
When you need to run repeatable sqlcmd scripts against Microsoft Fabric Warehouse with Azure auth, formatted CSV/TSV output, and consumption monitoring queries., or when sqldw-consumption-cli is a microsoft skills-for-fabric agent skill that compresses how solo builders and small
What are the main capabilities?
Documents sqlcmd -G against Fabric warehouse endpoints with FABRIC_SERVER and FABRIC_DB env vars; Output formatting table: -W trim, -s separators, -h-1/-h 1 for CSV-friendly exports; Bash script template with set -euo pipefail, sqlcmd prerequisite check, and az login gate.
Is Sqldw Consumption Cli safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.