CLI Reference
List, search, validate, or query semantic sources.
Interact with your project's semantic layer. Semantic sources are YAML
definitions that describe tables, columns, measures, joins, segments, and grain:
the vocabulary agents use to generate correct SQL.
ktx sl [ options] [ query. . . ]
ktx sl validate < sourceName> [ options]
ktx sl query [ options]
Bare ktx sl lists semantic sources.
ktx sl <query...> searches semantic sources (multi-word queries are
joined with a space).
ktx sl validate and ktx sl query remain as explicit subcommands.
Subcommand Description (none, no query) List semantic sources (none, with query) Search semantic sources validate <sourceName>Validate a semantic source against the database schema queryCompile or execute a semantic query
Flag Description Default --connection-id <id>Filter by ktx connection id - --limit <number>Maximum search results (search mode only) - --output <mode>Output mode: pretty (default in TTY), plain (TSV), or json pretty--jsonShortcut for --output=json (overrides --output) false
Flag Description Default --connection-id <id>ktx connection id (required)-
Flag Description Default --connection-id <id>ktx connection id- --query-file <path>JSON semantic query file - --measure <measure>Measure to query; repeatable (at least one required) - --dimension <dimension>Dimension to include; repeatable - --filter <filter>Filter expression; repeatable - --segment <segment>Segment to include; repeatable - --order-by <field[:direction]>Order field, optionally suffixed with :asc or :desc; repeatable - --limit <n>Query limit - --include-emptyInclude empty rows false--format <format>Output format: json or sql json--executeExecute the compiled query against the database false--yesInstall the managed Python runtime without prompting when required false--no-inputDisable interactive managed runtime installation - --max-rows <n>Maximum rows to return when executing -
sl query requires at least one --measure unless --query-file is set.
--query-file should point to a JSON semantic query object.
ktx sl
ktx sl --connection-id my-warehouse
ktx sl --json
ktx sl "revenue" --json
ktx sl validate orders --connection-id my-warehouse
ktx sl query \
--connection-id my-warehouse \
--measure orders. total_revenue \
--dimension orders. created_date \
--format sql
ktx sl query \
--connection-id my-warehouse \
--measure orders. total_revenue \
--dimension orders. status \
--filter "orders.created_date >= '2024-01-01'" \
--execute \
--max-rows 100
ktx sl query \
--connection-id my-warehouse \
--measure orders. total_revenue \
--dimension customers. country \
--order-by total_revenue: desc \
--limit 10 \
--execute
ktx sl query \
--connection-id my-warehouse \
--measure orders. count \
--dimension orders. created_date \
--execute \
--max-rows 1000
ktx sl query \
--connection-id my-warehouse \
--measure orders. count \
--execute \
--yes
ktx sl query \
--connection-id my-warehouse \
--query-file query. json \
--execute \
--max-rows 100
Bare ktx sl (list) and ktx sl <query> (search) return human-readable
output by default. Use --json when an agent needs structured output. Use
--format sql on query to inspect generated SQL before execution, or leave
--format json for the compiled query and optional rows. Pretty search output
shows #1, #2, and later rank badges for the displayed results. Plain and
JSON output keep the raw score value, which is a ranking score rather than a
percentage.
{
"sql" : "SELECT orders.status, SUM(orders.total_amount) AS total_revenue FROM public.orders GROUP BY orders.status" ,
"rows" : [
{
"orders.status" : "completed" ,
"total_revenue" : 125000
}
]
}
Error Cause Recovery Source not found Source name or connection id is wrong Run ktx sl --json and retry with an exact source name and connection id Validation fails YAML references missing columns, invalid joins, or invalid SQL expressions Fix the source YAML and rerun ktx sl validate Query compile fails Measure, dimension, filter, or segment name is invalid Search sources with ktx sl <query>, inspect the source YAML in your project files, then retry using declared fields Execution returns too many rows --max-rows is missing or too highAdd --max-rows with a bounded value before executing Runtime install is blocked Query execution needs the managed Python runtime and prompts are disabled Run ktx admin runtime install --feature core --yes, or rerun ktx sl query --yes