Kaveon CLI
A terminal client with a live session header, streaming result pages, query cancellation, catalog completion and scriptable output.
--local mode is Alpha. The full reference covers every option, dot command, SQL keyword, catalog/schema/table lifecycle command, optimization clause, output field and unsupported boundary in the CLI guide.Install once
irm https://raw.githubusercontent.com/PruthviProdduturi/Kaveon/dev/scripts/install.ps1 | iex
$env:PATH = "$env:LOCALAPPDATA\kaveon\bin;$env:PATH"
kaveon --versioncurl -fsSL https://raw.githubusercontent.com/PruthviProdduturi/Kaveon/dev/scripts/install.sh | bash
kaveon --versionTagged releases include platform archives and SHA256SUMS. The same client runs on Windows x64, macOS Intel and Apple Silicon, and Linux x64.
Connect with context
kaveon https://engine.example.com/OpenSource/nyc_taxi
kaveon --server https://engine.example.com --catalog OpenSource --schema nyc_taxiConnection defaults can live in ~/.kaveon_config. Command-line flags override them. The client records --user, --source and --client-tags as query metadata; they never grant access.
Connect to the qualified AKS Engine
The production-shaped Engine runs in kaveon-aks in kaveon-rg. Port-forwarding keeps the coordinator private while you use the CLI. Studio on Vercel is a separate deployment.
az login
az account set --subscription 4ed07f02-b111-4eea-98ce-1c177d573a51
az aks get-credentials --resource-group kaveon-rg --name kaveon-aks --overwrite-existing
kubelogin convert-kubeconfig -l azurecli
# Keep this terminal open.
kubectl --context kaveon-aks -n kaveon port-forward \
service/kaveon 18443:8080 --address 127.0.0.1$bundle = "tmp/kaveon-production-private-205"
$tokens = Get-Content "$bundle/tokens.json" -Raw | ConvertFrom-Json
$env:KAVEON_ACCESS_TOKEN = $tokens.principal
$ca = (Resolve-Path "$bundle/ca.crt").Path
$env:NO_PROXY = "localhost,127.0.0.1,::1"
kaveon --server https://localhost:18443 --ca-cert $ca --catalog OpenSource --schema nyc_taxiThese are operator commands for the private qualification bundle; never commit the token or CA bundle. Restore the catalog definitions after creating a new cluster before running the example. Public users need the configured Entra access token and public HTTPS hostname after an API/Ingress cutover.
Authentication
auto uses an access token when supplied, then Azure CLI, then Microsoft device sign-in when the coordinator advertises Entra. azure-cli requires the current Azure login, microsoft starts device sign-in explicitly, and none is for loopback development only. Tokens remain in process memory.
A shell built for long queries
- Session header shows Engine version, environment, worker health, admission and authenticated role.
- Emacs-style editing, history navigation, reverse search, inline history suggestions and lazy SQL/catalog completion.
- Live submitting, queued, running and cancellation states with task count, workers, rows scanned and admission wait.
- Paged results arrive while a streaming query runs;
SpaceorEnteradvances pages andqstops paging. Ctrl-Ccancels the coordinator query; a second press returns to the editor immediately.
kaveon › SELECT region, count(*) FROM Kaveon.usage.events GROUP BY region;
⠸ Running 2.4 s · 3/5 tasks · 2 workers · 210M rows scannedInspect execution
EXPLAIN ANALYZE prints the optimized plan, phase timings, stages, task counters, memory, exchange bytes, rows scanned and spill. The shell reports coordinator-local, distributed-fragment and context-answer paths distinctly.
Scripts and output
Use -e, -f or redirected stdin for automation. --ignore-errors continues a batch while preserving a failing exit status. Choose aligned tables, vertical rows, CSV, TSV, JSON or JSONL; --row-limit, --width, --pager and --no-header keep output deterministic for CI.
Catalog and session commands
.catalogs
.schemas OpenSource
.tables
.use OpenSource.nyc_taxi
.queries
.kill <query-id>
.format JSONL
exitSQL metadata statements and dot commands are kept separate: dot commands never get sent to the SQL parser. The CLI can list granted catalogs, schemas, tables and columns, switch context, inspect recent queries and stop a running query.
Register and optimize lake tables
Administrators can create a catalog; analysts or administrators can create schemas and register existing Parquet, Delta, or Iceberg tables. Registration probes the location before activation and never copies the rows.
CREATE CATALOG IF NOT EXISTS Analytics WITH (
storage = 'adls', account = 'kaveonlake', container = 'opensource',
root = 'snapshots/2026-09-09-v1',
credential = 'workload-identity:kaveon-reader'
);
CREATE SCHEMA IF NOT EXISTS Analytics.sales;
CREATE TABLE IF NOT EXISTS Analytics.sales.orders WITH (
location = 'sales/orders', format = 'parquet',
partitioned_by = ARRAY['order_date'], clustered_by = ARRAY['customer_id'],
bloom = ARRAY['order_id']
);
ANALYZE Analytics.sales.orders WITH (sketches = true);
OPTIMIZE Analytics.sales.orders;Use ALTER TABLE … SET CLUSTERED BY and SET SHAPE before a cube build, then inspect SHOW STATS, DESCRIBE DETAIL and SHOW CREATE TABLE. The detailed keyword matrix and lifecycle rules are in the CLI reference.