PlatformAdvanced TopicsCustom Columns

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:

  1. Navigate to: Settings → Custom Columns
  2. Click: Add Column
  3. 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

ColumnTypeExpression / SourceDescription
teamStringtags[‘team’]Surface team ownership
normalized_envStringlower(tags[‘env’])Normalize inconsistent tag values
scheduled_deleteDateparseDateTimeBestEffort(tags[‘deletion’])Track lifecycle cleanup dates

Query Examples

SELECT account, region, name, tags, team FROM cloud_assets
WHERE team == ''