ParaQL Example Queries
Over 50 tested example queries organized by use case, from quick infrastructure counts to cross-system impact analysis
A curated collection of real-world ParaQL queries, organized by use case. Queries referencing specific CI types require the corresponding collector to be configured. Use SHOW TABLES to see which types are available in your environment. Examples are organized by the visualization they produce, making it easy to find a query that matches what you want to see.
Flagship Queries
These demonstrate ParaQL's core value: instant cross-system infrastructure intelligence that would otherwise require manual correlation across multiple tools.
Infrastructure Capacity Overview
See all sources at a glance with CI counts, relationships, and recent change activity:
SELECT source, COUNT(*) AS total_cis,
SUM(relationship_count()) AS total_relationships,
SUM(change_count(INTERVAL '7 days')) AS changes_this_week
FROM *
WHERE status = 'active'
GROUP BY source
ORDER BY total_cis DESCRenders as a bar chart.
What Breaks If This Host Goes Down?
Determine the blast radius of a physical host failure:
SELECT name, ci_type, depth, path, criticality, criticality_score
FROM IMPACT(proxmox.node, name LIKE '%node%')
ORDER BY depth, criticality_score DESCRenders as an impact graph with criticality coloring.
Full Infrastructure Stack
Walk from physical hardware through VMs to OS layers:
SELECT node.name, node.ci_type,
vm.name, vm.ci_type,
os.name, os.ci_type
FROM proxmox.node node
<-[runs_on]- proxmox.vm vm
<-[runs_on]- os.linux osRenders as a multi-layer graph.
Stale Infrastructure Alert
Find CIs that haven't been seen recently (potential collection failures or decommissioned resources):
SELECT name, ci_type, source, last_seen,
stale_for() AS staleness,
criticality, relationship_count() AS rels
FROM *
WHERE last_seen IS STALE BY INTERVAL '4 hours'
AND status = 'active'
ORDER BY criticality_score DESC, staleness DESC
LIMIT 50Renders as a table.
Big Number Queries
Trigger: 1 row, 1 numeric column.
Total Active CIs
SELECT COUNT(*) AS active_cis
FROM *
WHERE status = 'active'Running Pods
SELECT COUNT(*) AS running_pods
FROM kubernetes.pod
WHERE config.phase = 'Running'Total vCPU Capacity
SELECT SUM(config.vcpus) AS total_vcpus
FROM openstack.instance
WHERE status = 'active'Orphaned CI Count
SELECT COUNT(*) AS orphaned_cis
FROM ORPHANS()Key-Value Queries
Trigger: 1 row, 2+ columns.
Single CI Profile
SELECT name, ci_type, source, status,
age() AS ci_age, criticality,
relationship_count() AS rels,
change_count(INTERVAL '30 days') AS recent_changes
FROM kubernetes.pod
LIMIT 1Cluster Summary
SELECT COUNT(*) AS total_nodes,
SUM(config.vcpus) AS total_vcpus,
AVG(config.ram_mb) AS avg_ram_mb,
MIN(created_at) AS oldest_node,
MAX(last_seen) AS last_collection
FROM openstack.instance
WHERE status = 'active'Bar Chart Queries
Trigger: GROUP BY with non-time grouping.
CIs Per Source
SELECT source, COUNT(*) AS count
FROM *
WHERE status = 'active'
GROUP BY source
ORDER BY count DESCPods Per Namespace
SELECT namespace, COUNT(*) AS pod_count
FROM kubernetes.pod
WHERE config.phase = 'Running'
GROUP BY namespace
ORDER BY pod_count DESCCriticality Distribution
SELECT criticality, COUNT(*) AS count
FROM *
WHERE status = 'active'
AND criticality IS NOT NULL
GROUP BY criticality
ORDER BY count DESCRelationship Types
SELECT relationship_type, COUNT(*) AS count
FROM relationships
WHERE status = 'active'
GROUP BY relationship_type
ORDER BY count DESCCompute Capacity by Project
SELECT config.project_id, COUNT(*) AS instances,
SUM(config.vcpus) AS total_vcpus,
SUM(config.ram_mb) / 1024 AS total_ram_gb
FROM openstack.instance
WHERE status = 'active'
GROUP BY config.project_id
ORDER BY total_vcpus DESCLine Chart Queries
Trigger: GROUP BY with time-like column.
Changes Over Time (Daily)
SELECT DATE_TRUNC('day', changed_at) AS day,
COUNT(*) AS changes
FROM changes
WHERE changed_at > NOW() - INTERVAL '30 days'
GROUP BY DATE_TRUNC('day', changed_at)
ORDER BY dayChanges by Type Over Time
SELECT DATE_TRUNC('day', changed_at) AS day,
change_type,
COUNT(*) AS count
FROM changes
WHERE changed_at > NOW() - INTERVAL '14 days'
GROUP BY DATE_TRUNC('day', changed_at), change_type
ORDER BY dayCI Creation Rate
SELECT DATE_TRUNC('day', created_at) AS day,
COUNT(*) AS new_cis
FROM *
WHERE created_at > NOW() - INTERVAL '30 days'
GROUP BY DATE_TRUNC('day', created_at)
ORDER BY dayTable Queries
Trigger: Multi-row results without aggregation.
Active Pods with Details
SELECT name, namespace, config.phase, config.node_name,
config.qos_class, age() AS pod_age, last_seen
FROM kubernetes.pod
WHERE config.phase = 'Running'
ORDER BY namespace, name
LIMIT 50Recent Changes with Field Details
SELECT ci_name, ci_type, change_type,
field_name, old_value, new_value, changed_at
FROM changes
WHERE changed_at > NOW() - INTERVAL '24 hours'
ORDER BY changed_at DESC
LIMIT 100Cross-System Search
SELECT name, ci_type, source, status, ip_addresses, fqdns
FROM *
WHERE name ILIKE '%web%'
OR name ILIKE '%nginx%'
ORDER BY ci_type, nameDNS Zones
SELECT name, source, config.source_type,
config.serial, config.record_count,
last_seen
FROM dns.zone
ORDER BY nameCeph OSD Status
SELECT name, source, config.osd_id,
config.status, config.host,
config.device_class, config.utilization
FROM ceph.osd
ORDER BY config.osd_idGraph Queries
Trigger: Traversal without aggregation.
Deployment to Pod Mapping
SELECT dep.name, dep.ci_type,
pod.name, pod.ci_type
FROM kubernetes.deployment dep
-[manages]-> kubernetes.pod podNode Infrastructure Stack (Reverse Walk)
SELECT node.name, node.ci_type,
vm.name, vm.ci_type,
os.name, os.ci_type
FROM proxmox.node node
<-[runs_on]- proxmox.vm vm
<-[runs_on]- os.linux osService Dependencies
SELECT svc.name, svc.ci_type,
pod.name, pod.ci_type
FROM kubernetes.service svc
-[selects]-> kubernetes.pod podAny Relationship (Wildcard)
SELECT src.name, src.ci_type,
tgt.name, tgt.ci_type
FROM kubernetes.deployment src
-[*]-> * tgt
LIMIT 30Variable-Depth Traversal
SELECT src.name, src.ci_type,
tgt.name, tgt.ci_type
FROM proxmox.node src
-[*1..3]-> * tgt
LIMIT 50Schema Queries
Trigger: SHOW and DESCRIBE statements.
SHOW TABLES
SHOW TABLES FROM kubernetes
DESCRIBE kubernetes.pod
SHOW RELATIONSHIPS
SHOW RELATIONSHIPS FOR proxmox.node
SHOW TIERS
SHOW SOURCESExplain Queries
Trigger: EXPLAIN prefix.
EXPLAIN SELECT name, config.phase
FROM kubernetes.pod
WHERE config.phase = 'Running'EXPLAIN SELECT source, COUNT(*), SUM(change_count())
FROM *
WHERE status = 'active'
GROUP BY sourceDiff Queries
Trigger: DIFF statement.
Kubernetes Pod Changes This Week
DIFF kubernetes.pod
BETWEEN NOW() - INTERVAL '7 days' AND NOW()OpenStack Instance Changes This Month
DIFF openstack.instance
BETWEEN NOW() - INTERVAL '30 days' AND NOW()
ORDER BY nameLineage Queries
Trigger: LINEAGE function.
Full Stack for a Pod
SELECT name, ci_type, tier, depth, direction
FROM LINEAGE(kubernetes.pod, name LIKE '%api%')Node Lineage
SELECT name, ci_type, tier, depth, direction, relationship_type
FROM LINEAGE(proxmox.node)Impact Queries
Trigger: Columns include depth, path, criticality.
Node Failure Impact
SELECT name, ci_type, depth, path, criticality, criticality_score
FROM IMPACT(proxmox.node, name LIKE '%node%')
ORDER BY depth, criticality_score DESCStorage Failure Blast Radius
SELECT name, ci_type, depth, path, criticality, criticality_score
FROM IMPACT(ceph.pool)
ORDER BY criticality_score DESC
LIMIT 50Advanced Language Features
DISTINCT
SELECT DISTINCT namespace
FROM kubernetes.pod
WHERE config.phase = 'Running'
ORDER BY namespaceHAVING
SELECT namespace, COUNT(*) AS pod_count
FROM kubernetes.pod
GROUP BY namespace
HAVING COUNT(*) > 5
ORDER BY pod_count DESCIN Operator
SELECT name, ci_type, config.phase
FROM kubernetes.pod
WHERE config.phase IN ('Pending', 'Failed', 'Unknown')
ORDER BY config.phase, nameBETWEEN
SELECT ci_name, change_type, changed_at
FROM changes
WHERE changed_at BETWEEN NOW() - INTERVAL '48 hours' AND NOW()
ORDER BY changed_at DESC
LIMIT 50Staleness Check
SELECT name, ci_type, source, last_seen,
stale_for() AS staleness
FROM *
WHERE last_seen IS STALE BY INTERVAL '2 hours'
AND status = 'active'
ORDER BY staleness DESCOrphaned CIs (Detailed)
SELECT name, ci_type, source,
age() AS ci_age, last_seen
FROM ORPHANS()
WHERE status = 'active'
ORDER BY ci_age DESC
LIMIT 30COALESCE (NULL Handling)
SELECT name, ci_type,
COALESCE(namespace, 'no-namespace') AS ns,
COALESCE(criticality, 'unscored') AS crit
FROM *
WHERE status = 'active'
LIMIT 30Raw JSONB Path Access
SELECT name, namespace,
raw.metadata.labels AS labels,
raw.spec.containers AS containers
FROM kubernetes.pod
WHERE config.phase = 'Running'
LIMIT 10Arithmetic Expressions
SELECT name, config.vcpus,
config.ram_mb,
config.ram_mb / 1024 AS ram_gb,
config.vcpus * 2 AS double_vcpus
FROM openstack.instance
WHERE status = 'active'
ORDER BY config.vcpus DESCTemporal: AS OF
SELECT name, config.phase, config.node_name
FROM kubernetes.pod
AS OF NOW() - INTERVAL '7 days'
WHERE config.phase = 'Running'Multi-Level Traversal with Filter
SELECT node.name, node.ci_type,
vm.name, vm.ci_type,
os.name, os.ci_type
FROM proxmox.node node
<-[runs_on]- proxmox.vm vm
<-[runs_on]- os.linux os