Custom Columns
CloudQuery’s Custom Columns feature allows you to define new columns on any asset table and populate them via SQL expressions (e.g., extracting tags or fields).
Once added, these columns become:
- Filterable in the UI
- Searchable via SQL
- Queryable in reports and dashboards
Creating a Custom Column
You can create a Custom Column via the UI:
- Navigate to: Settings → Custom Columns
- Click: Add Column
- Fill in:
- Label: UI display name (e.g., “Team”)
- Name: Backend ID (snake_case)
- Description (optional): Purpose of the column
- Enrichment Type:
- From existing field → Use a SQL expression
- Value Expression: SQL to extract or transform the value (e.g., tags[‘team’])\
Once saved, the column appears in the asset inventory and can be filtered/searched just like native fields.
Supported SQL Expressions
You can use any valid ClickHouse SQL expression when the value type is expression. Here are some common examples:
Tag Extraction
tags['team']
tags['cost_center']
JSON Parsing
JSONExtractString(tags['metadata'], 'department')
JSONExtract(tags['finance'], 'budget', 'Float64')
Normalization / Cleanup
lower(tags['env']) -- normalize prod, Prod, PROD
multiIf(
tags['env'] = 'production', 'prod',
tags['env'] = 'staging', 'stage',
tags['env']
)
Conditional Defaults
COALESCE(NULLIF(tags['team'],''),'unknown')
Lifecycle Metadata
parseDateTimeBestEffort(tags['deletion_date'])
toDate(now() + INTERVAL 30 DAY)
Example Use Cases
Column | Type | Expression / Source | Description |
---|---|---|---|
team | String | tags[‘team’] | Surface team ownership |
normalized_env | String | lower(tags[‘env’]) | Normalize inconsistent tag values |
scheduled_delete | Date | parseDateTimeBestEffort(tags[‘deletion’]) | Track lifecycle cleanup dates |
Query Examples
SELECT account, region, name, tags, team FROM cloud_assets
WHERE team == ''