offdataai
Media, Gaming & Sports · data model template

Esports & Game Telemetry data model

Kimball warehouse for game telemetry: match and per-player performance facts, high-frequency in-match events, play sessions, and monetization over conformed player/title/mode/map/hero/item dimensions.

Live-game and esports analytics: matches, per-player match performance (KDA, MMR), in-match event telemetry, play sessions, and monetization (IAP, battle pass, loot boxes) — a Kimball star schema with conformed player, title, mode, map, and hero dimensions for matchmaking, retention, balance, and LiveOps revenue analysis. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballMedia, Gaming & SportsGDPRCOPPA
14
tables
103
columns
17
relationships
1
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: BigQuery). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

gameplayengagementrevenueconformed_dimensions

Design decisions

  • Per-player match participant fact

    Most esports analysis (KDA, win rate, MMR movement, hero balance) is at the player-per-match grain, separate from match-level facts.

  • In-match events as a separate high-frequency fact

    Event streams (kills, objectives, positions) are far larger than match summaries and are isolated for cheap partitioned scans.

  • Monetization fact for LiveOps

    IAP / battle-pass / loot-box revenue drives the business; a dedicated purchase fact ties spend to player cohorts and items.

Tables in the Esports & Game Telemetry model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (5)

fct_match

Grain: one row per match

ColumnTypeKeys
match_keybigintPK
date_keybigint
game_title_keybigint
match_mode_keybigint
map_keybigint
match_idvarchar
start_timestamptimestamp
duration_secondsinteger
player_countsmallint
winning_team_keybigint
is_rankedboolean

fct_match_participant

Grain: one row per player per match

Per-player match performance — the core esports fact.

ColumnTypeKeys
match_participant_keybigintPK
date_keybigint
player_keybigint
match_idvarchar
team_keybigint
hero_keybigint
killsinteger
deathsinteger
assistsinteger
scoreinteger
damage_dealtinteger
healing_doneinteger
resultvarchar
placementsmallint
mmr_changeinteger

fct_match_event

Grain: one row per in-match event

High-frequency in-match telemetry fact.

ColumnTypeKeys
match_event_keybigintPK
date_keybigint
player_keybigint
match_idvarchar
event_typevarchar
event_timestamptimestamp
game_time_secondsinteger
position_xdecimal
position_ydecimal

fct_player_session

Grain: one row per play session

ColumnTypeKeys
player_session_keybigintPK
date_keybigint
player_keybigint
device_keybigint
session_start_timestamptimestamp
duration_minutesinteger
matches_playedsmallint
xp_earnedinteger

fct_monetization

Grain: one row per purchase

ColumnTypeKeys
monetization_keybigintPK
date_keybigint
player_keybigint
item_keybigint
purchase_typevarchar
amountdecimal
currencyvarchar
virtual_currency_spentinteger
is_first_purchaseboolean

Dimension tables (9)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
day_of_weeksmallint
is_weekendboolean
month_numbersmallint
yearsmallint

dim_player

Grain: one row per player per SCD2 version

SCD type 2

ColumnTypeKeys
player_keybigintPK
player_idvarcharBK
usernamevarcharPII
countryvarchar
platformvarchar
skill_tiervarchar
account_created_datedate
is_premiumboolean
lifecycle_stagevarchar

dim_game_title

Grain: one row per game title

ColumnTypeKeys
game_title_keybigintPK
title_codevarcharBK
title_namevarchar
genrevarchar
publishervarchar
release_datedate

dim_match_mode

Grain: one row per match mode

ColumnTypeKeys
match_mode_keybigintPK
mode_codevarcharBK
mode_namevarchar
team_sizesmallint
is_competitiveboolean

dim_map

Grain: one row per map

ColumnTypeKeys
map_keybigintPK
map_codevarcharBK
map_namevarchar
environmentvarchar

dim_team

Grain: one row per team/roster

ColumnTypeKeys
team_keybigintPK
team_idvarcharBK
team_namevarchar
regionvarchar
organizationvarchar

dim_hero

Grain: one row per playable hero/character

ColumnTypeKeys
hero_keybigintPK
hero_codevarcharBK
hero_namevarchar
rolevarchar
difficultyvarchar

dim_item

Grain: one row per purchasable item

ColumnTypeKeys
item_keybigintPK
item_codevarcharBK
item_namevarchar
item_typevarchar
rarityvarchar
list_pricedecimal

dim_device

Grain: one row per device profile

ColumnTypeKeys
device_keybigintPK
platformvarcharBK
operating_systemvarchar
gpuvarchar
form_factorvarchar

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • fct_match.date_key → dim_date (many-to-one)
  • fct_match.game_title_key → dim_game_title (many-to-one)
  • fct_match.match_mode_key → dim_match_mode (many-to-one)
  • fct_match.map_key → dim_map (many-to-one)
  • fct_match.winning_team_key → dim_team (many-to-one)
  • fct_match_participant.date_key → dim_date (many-to-one)
  • fct_match_participant.player_key → dim_player (many-to-one)
  • fct_match_participant.team_key → dim_team (many-to-one)
  • fct_match_participant.hero_key → dim_hero (many-to-one)
  • fct_match_event.date_key → dim_date (many-to-one)
  • fct_match_event.player_key → dim_player (many-to-one)
  • fct_player_session.date_key → dim_date (many-to-one)
  • fct_player_session.player_key → dim_player (many-to-one)
  • fct_player_session.device_key → dim_device (many-to-one)
  • fct_monetization.date_key → dim_date (many-to-one)
  • fct_monetization.player_key → dim_player (many-to-one)
  • fct_monetization.item_key → dim_item (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time