Skip to main content

CML — Node reference

Full reference for .node.celiq files.

File structure

node: <identifier> # required
table: <schema.table> # required
label: <display name>
description: <text>
connection: <connection name> # override project connection

attributes:
- <attribute definition>

metrics:
- <metric definition>

joins:
- <join definition>

Node fields

FieldTypeRequiredDescription
nodestringUnique identifier — matches filename prefix
tablestringDatabase table (schema.table or just table)
labelstringHuman-readable name
descriptionstringShown in Browse mode
connectionstringOverride the project-level connection

Attribute fields

FieldTypeRequiredDescription
namestringDatabase column name
typestringstring, integer, float, date, datetime, boolean
labelstringDisplay name
descriptionstring
rolestringprimary_key, foreign_key, attribute, dimension
is_datebooleanEnables date grain picker
is_hiddenbooleanHide from field picker
geo_typestringSee Geo types →

Metric fields

FieldTypeRequiredDescription
namestringUnique identifier
sqlstringAggregation expression, e.g. SUM(amount)
typestringinteger, float, currency, percentage
labelstringDisplay name
descriptionstring

Join fields

FieldTypeRequiredDescription
nodestringTarget node name
typestringleft (default), inner, right, full
onstringSQL join condition

Full example

node: payment
table: public.payment
label: Payments
description: One row per payment transaction.

attributes:
- name: payment_id
type: integer
role: primary_key
label: Payment ID
- name: customer_id
type: integer
role: foreign_key
- name: payment_date
type: date
is_date: true
label: Date payment was made
- name: amount
type: float
label: Payment amount

metrics:
- name: total_revenue
label: Total payment revenue
sql: SUM(amount)
type: currency
- name: payment_count
label: Number of payments
sql: COUNT(*)
type: integer
- name: avg_payment
label: Average payment amount
sql: AVG(amount)
type: float

joins:
- node: customer
type: left
on: payment.customer_id = customer.customer_id