JMESPath Queries
JMESPath is a query language for JSON that allows you to extract and transform data from command output. redisctl supports JMESPath queries via the -q
or --query
flag.
Basic Usage
redisctl [command] -o json -q "query_expression"
Quick Start Examples
# Get just one field
redisctl enterprise cluster get -o json -q 'name'
# Output: "docker-cluster"
# Get multiple fields as object
redisctl enterprise database get 1 -o json -q '{name: name, port: port}'
# Output: {"name": "default-db", "port": 12000}
# Get field from all items in a list
redisctl enterprise database list -o json -q '[].name'
# Output: ["default-db", "cache-db", "persistent-db"]
# Filter list by condition
redisctl enterprise database list -o json -q "[?port > `12000`].name"
# Output: ["cache-db", "persistent-db"]
# Count items
redisctl enterprise database list -o json -q 'length(@)'
# Output: 3
Common Query Patterns
Select Specific Fields
# Get just database names and ports
redisctl cloud database list -o json -q "[].{name:name, port:port}"
# Output:
# [
# {"name": "cache-prod", "port": 12000},
# {"name": "sessions", "port": 12001}
# ]
Filter Results
# Find active databases only
redisctl cloud database list -o json -q "[?status=='active']"
# Databases with specific memory size
redisctl enterprise database list -o json -q "[?memory_size > `1073741824`]"
# Multiple conditions
redisctl cloud subscription list -o json \
-q "[?status=='active' && paymentMethodId=='12345']"
Array Operations
# First 3 results
redisctl cloud database list -o json -q "[0:3]"
# Last result
redisctl cloud database list -o json -q "[-1]"
# Count results
redisctl cloud database list -o json -q "length(@)"
Nested Data Access
# Access nested fields
redisctl cloud subscription get 123456 -o json \
-q "databases[].{id:databaseId, name:name}"
# Flatten nested arrays
redisctl enterprise cluster get -o json \
-q "nodes[].{node:name, shards:shards[].name}"
Advanced Queries
Sorting
# Sort by memory size descending
redisctl enterprise database list -o json \
-q "reverse(sort_by(@, &memory_size))"
# Sort by name
redisctl cloud database list -o json \
-q "sort_by(@, &name)"
Aggregations
# Sum total memory across databases
redisctl enterprise database list -o json \
-q "sum([].memory_size)"
# Get max port number
redisctl enterprise database list -o json \
-q "max([].port)"
Complex Transformations
# Group databases by status
redisctl cloud database list -o json \
-q "group_by(@, &status)"
# Multi-level filtering and projection
redisctl cloud subscription list -o json \
-q "[?databases[?status=='active']].{
subscription: name,
active_databases: databases[?status=='active'].name
}"
Enterprise-Specific Examples
Database Management
# Get all database names and their persistence settings
redisctl enterprise database list -o json \
-q '[].{name: name, persistence: data_persistence}'
# Find databases using AOF persistence
redisctl enterprise database list -o json \
-q "[?data_persistence=='aof'].name"
# Get database endpoints for connection strings
redisctl enterprise database get 1 -o json \
-q 'endpoints[0].{host: addr[0], port: port}'
# Monitor database creation status
redisctl enterprise database list -o json \
-q "[?status!='active'].{name: name, status: status}"
Node and Cluster Monitoring
# Get node addresses with their status
redisctl enterprise node list -o json \
-q '[].{address: addr, status: status, shards: shard_count}'
# Extract specific node details
redisctl enterprise node get 1 -o json \
-q '{address: addr, cores: cores, memory_gb: total_memory / `1073741824`}'
# Check cluster resource usage
redisctl enterprise cluster stats -o json \
-q '{cpu: cpu_usage, memory: memory_usage, databases: total_databases}'
# Get cluster version and license status
redisctl enterprise cluster get -o json \
-q '{name: name, version: software_version, licensed: !license_expired}'
Module Management
# List all module names and versions
redisctl enterprise module list -o json \
-q '[].{name: module_name, version: semantic_version}'
# Find specific module version
redisctl enterprise module list -o json \
-q "[?module_name=='search'].semantic_version | [0]"
# Get modules configured for a database
redisctl enterprise database get 1 -o json \
-q 'module_list[].{name: module_name, args: module_args}'
License and Compliance
# Check license expiration
redisctl enterprise license get -o json \
-q '{expired: expired, expires_on: expiration_date}'
# Count total shards across all databases
redisctl enterprise database list -o json \
-q 'sum([].shards_count)'
Alert Monitoring
# Count active alerts
redisctl api enterprise get /v1/cluster/alerts -o json \
-q 'length(@)'
# Get alert details if any exist
redisctl api enterprise get /v1/cluster/alerts -o json \
-q '[].{severity: severity, message: message}'
Cloud-Specific Examples
Find Resources by Tags
# Find subscriptions with specific tags
redisctl cloud subscription list -o json \
-q "[?tags.environment=='production']"
Monitor Resource Usage
# Get high memory usage databases
redisctl enterprise database stats all -o json \
-q "[?used_memory > `858993459`].{
name: name,
usage_percent: (used_memory / memory_size) * `100`
}"
Extract Connection Info
# Get connection strings for all databases
redisctl cloud database list -o json \
-q "[].{
name: name,
connection: join('', ['redis://', publicEndpoint, ':', to_string(port)])
}"
Audit Configuration
# Find databases without replication
redisctl enterprise database list -o json \
-q "[?replication == `false`].name"
# Check backup settings
redisctl enterprise database list -o json \
-q "[?backup_interval == `0`].{
name: name,
warning: 'No automatic backups configured'
}"
Query Testing Tips
Test with Sample Data
# Save output to test queries
redisctl cloud database list -o json > databases.json
# Test queries offline
cat databases.json | jq '.' | jmespath.py "[?status=='active'].name"
Debug Complex Queries
# Build queries incrementally
redisctl cloud subscription list -o json -q "@" # All data
redisctl cloud subscription list -o json -q "[0]" # First item
redisctl cloud subscription list -o json -q "[0].databases" # Databases of first
Common Gotchas
- String literals need quotes:
[?status=='active']
not[?status==active]
- Numbers use backticks:
[?port > \
12000`]not
[?port > 12000]` - Escape in shell: Use single quotes around queries to avoid shell interpretation
- Null handling: Use
[?field != null]
to filter out null values
Performance Considerations
- JMESPath queries are applied client-side after receiving the full response
- For large result sets, consider using API pagination parameters first
- Complex queries may impact performance on very large JSON responses
Reference
For complete JMESPath syntax, see: