Skip to content
LogoLogo

Schema

Column reference for each PickedQL data source.

metrics

Pre-aggregated daily data. One row per unique combination of dimensions per day.

ColumnTypeDescription
project_idStringProject identifier (required in WHERE)
project_local_dateDateDate in project timezone
experience_idStringExperience identifier
step_idStringStep identifier
event_typeStringEvent type (for example page_view, click)
interaction_typeStringInteraction type (for example Button Click)
variant_typeStringControl, Variant, or Unknown
device_categoryStringDevice category (for example Desktop, Mobile)
country_codeStringISO country code
utm_sourceStringUTM source
utm_mediumStringUTM medium
product_nameStringProduct name
product_categoryStringProduct category
landing_page_urlStringLanding page URL

events

User-level event data. One row per event per user. Dimension columns are joined automatically when referenced.

Native columns

ColumnTypeDescription
project_idStringProject identifier (required in WHERE)
event_idStringUnique event identifier
user_canonical_idStringCanonical user identifier
session_idStringSession identifier
experience_idStringExperience identifier
step_idStringStep identifier
event_typeStringEvent type (for example page_view, click)
interaction_typeStringInteraction type (for example Button Click)
client_local_dateDateDate in client timezone
is_purchaseUInt81 if checkout complete event
is_cart_addUInt81 if cart add event
is_first_sessionUInt81 if first session for this user
landing_page_urlStringLanding page URL
featuresMap(String, String)Feature flag assignments
feature_keysMap(String, String)Feature key assignments
event_metaStringEvent metadata

Dimension columns (auto-joined)

These columns are joined automatically when referenced — no JOIN syntax needed.

ColumnSourceDescription
variant_typedim_variantControl, Variant, or Unknown
ab_feature_namedim_variantA/B feature name
ab_feature_valuedim_variantA/B feature value
device_categorydim_deviceDevice category
browser_namedim_deviceBrowser name
browser_versiondim_deviceBrowser version
os_namedim_deviceThe name of the operating system
os_versiondim_deviceThe version of the operating system
platformdim_devicePlatform
country_codedim_geoISO country code
country_namedim_geoCountry name
regiondim_geoRegion
citydim_geoCity
utm_sourcedim_utmUTM source
utm_mediumdim_utmUTM medium
utm_campaigndim_utmUTM campaign
utm_termdim_utmUTM term
utm_contentdim_utmUTM content
product_namedim_productProduct name
product_categorydim_productProduct category
product_pagedim_productProduct page
step_titlestepsStep title (joined on project_id + experience_id + step_id)
experience_titleexperiencesExperience title (joined on project_id + experience_id)
project_nameprojectsProject name
project_timezoneprojectsProject timezone

steps, experiences, projects

These reference tables hold the configuration of your Picked project. PickedQL joins them onto events when you point at one of their analyst-facing columns. Each one needs its own tenant filter when you read it directly.

SourceReal columnsAnalyst columns, when you point at them from eventsTenant filter, when you read the table directly
stepsid, title, experience_id, project_id, organization_idstep_titleproject_id = '…'
experiencesid, title, project_id, organization_idexperience_titleproject_id = '…'
projectsid, name, timezone, organization_idproject_name, project_timezoneid = '<project_id>'

When queried directly, use the real column names:

-- List all experiences for a project
SELECT id, title FROM experiences WHERE project_id = 'your-project-id'

When referenced from events, use the prefixed analyst names — joins are injected automatically:

SELECT experience_title, step_title, count(*)
FROM events
WHERE project_id = 'your-project-id'
GROUP BY experience_title, step_title

features

The features table gives you parameterized virtual functions. Use them to read which visitors each feature flag holds:

FunctionDescription
feature_users('name', 'bucket' [, 'key'])Unique users in a feature bucket
feature_sessions('name', 'bucket' [, 'key'])Unique sessions in a feature bucket
feature_events('name', 'bucket' [, 'key'])Unique events in a feature bucket

experience_journey

This table gives one edge for each step transition, and PickedQL aggregates them first. Use the edges in a sankey chart or a funnel chart. Give each parameter in the outer WHERE clause. PickedQL reads them and puts them into the query below.

Columns

ColumnTypeDescription
sourceStringEdge start, formatted as NN. <step title> (for example 001. Welcome screen)
targetStringEdge end, formatted as NN. <step title>.
usersUInt64Distinct user_canonical_id count that traversed this edge.

Parameters, in the WHERE clause

KeyTypeRequiredPurpose
project_idString✓The tenant filter.
experience_idStringLimits the rows to one fact_events.experience_id.
starting_stepStringAnchors each edge at the first time that a user reaches this step_id. The default is the first step of each user.
targeting_stepStringTrims the window of each user at the first time that the user reaches this step_id. A user who never reaches it still gives the journey up to that point.
num_nodes_after_startIntegerThe forward window from the start. It keeps a step where seq_pos < start_seq + N.
num_nodes_before_targetIntegerThe backward window from the target. It keeps a step where seq_pos >= target_seq - N. It needs targeting_step.
top_n_pathIntegerKeeps the paths that the most users take, and drops the rest. The default is no limit.
user_cohort_eventStringLimits the rows to a user with at least one fact_events row of this event_type. PickedQL writes it as user_canonical_id IN (SELECT DISTINCT user_canonical_id FROM fact_events WHERE event_type = '…').
client_local_dateDateA filter on a range of dates. PickedQL puts it into the read below. It takes =, <, <=, >, >=, and BETWEEN.
event_timestampDateTime64A filter on the timestamp from the server. It takes the same operators as client_local_date.

When you set both window parameters, both tests apply, and the result is their intersection. A date filter joins the other parameters with AND.

See data sources, experience_journey for examples.