Snowflake Object Inventory¶
Purpose: Complete map of every Snowflake database, schema, and table/view in production. Claude Code uses this to avoid naming conflicts and understand the current state of the warehouse.
Last Updated: 2026-05-25 Maintained by: Keep this current when adding new databases, schemas, or tables.
How to Update This File¶
When you create a new Snowflake object (via schemachange migration or dbt), add it here immediately. This prevents duplicate names, aids debugging, and gives Claude Code accurate context for every session.
Databases¶
| Database | Client | Environment | Owner | Purpose |
|---|---|---|---|---|
WBP_DB |
Warby Parker | Production | XO_DATA_ENGINEER | Medallion layers: Bronze → Silver → Gold |
WBP_DB_DEV |
Warby Parker | Development | XO_DATA_ENGINEER | Dev/testing (mirrors WBP_DB structure) |
CND_DB |
Condé Nast | Production | XO_DATA_ENGINEER | Medallion layers: Bronze → Silver → Gold |
CND_DB_DEV |
Condé Nast | Development | XO_DATA_ENGINEER | Dev/testing |
JCR_DB |
J.Crew | Production | XO_DATA_ENGINEER | Medallion layers: Bronze → Silver → Gold |
JCR_DB_DEV |
J.Crew | Development | XO_DATA_ENGINEER | Dev/testing (mirrors JCR_DB structure) |
CORE_DB |
Shared | Production | XO_DATA_ENGINEER | Shared resources: employee rosters, shared dims |
CORE_DB_DEV |
Shared | Development | XO_DATA_ENGINEER | Dev/testing |
OPERATIONS |
Legacy | Production | XO_DATA_ENGINEER | Legacy reporting DB — being deprecated |
MAESTRO_DB |
Condé Nast (Rippit) | Production | MAESTRO_ROLE (Rippit team) | Partner-managed Bronze for CND QA evaluation data — see ADR 017 |
WBP_DB (Warby Parker)¶
BRONZE Schema¶
All Bronze tables: all VARCHAR columns, batch_replace loading strategy.
| Table | Source System | Load Strategy | DAG | Schemachange Version |
|---|---|---|---|---|
GLADLY_CONTACT_TIMESTAMPS |
Gladly API | batch_replace | wbp_gladly_extract_daily | V1.1.0 |
GLADLY_CONVERSATION_TIMESTAMPS |
Gladly API | batch_replace | wbp_gladly_extract_daily | V1.1.0 |
GLADLY_WORK_SESSIONS |
Gladly API | batch_replace | wbp_gladly_extract_daily | V1.3.0 |
GLADLY_AGENT_DURATIONS |
Gladly API | batch_replace | wbp_gladly_extract_daily | V1.4.0 |
GLADLY_AGENT_SUMMARY |
Gladly API | batch_replace | wbp_gladly_extract_daily | — |
GSHEETS_CSAT |
Google Sheets | incremental | wbp_gsheets_extract_daily | V1.5.0 |
GSHEETS_QA |
Google Sheets | incremental | wbp_gsheets_extract_daily | V1.5.0 |
ASPECT_CONFORMANCE |
Aspen WFM (Google Drive) | batch_replace | wbp_aspect_gdrive_extract_weekly | V1.16.2 |
AWS_QUEUE_PRODUCTIVITY |
AWS Connect (Google Drive) | append | wbp_aws_gdrive_extract_daily | V1.21.0 |
AWS_AGENT_PERFORMANCE |
AWS Connect (Google Drive) | append | wbp_aws_gdrive_extract_daily | V1.22.0 |
AWS_AGENT_PRODUCTIVITY |
AWS Connect (Google Drive) | append | wbp_aws_gdrive_extract_daily | V1.23.0 |
AWS_CSAT |
AWS Connect (Google Drive) | append | wbp_aws_gdrive_extract_daily | V1.25.0 |
SILVER Schema¶
All Silver tables: dbt dynamic tables, typed columns, deduplicated by RECORD_KEY.
| Table | Source Bronze Table | dbt Model | Grain |
|---|---|---|---|
CONTACT_TIMESTAMPS |
GLADLY_CONTACT_TIMESTAMPS | silver/warbyparker/contact_timestamps.sql |
One row per CONTACT_ID |
CONVERSATION_TIMESTAMPS |
GLADLY_CONVERSATION_TIMESTAMPS | silver/warbyparker/conversation_timestamps.sql |
One row per CONVERSATION_ID |
WORK_SESSIONS |
GLADLY_WORK_SESSIONS | silver/warbyparker/work_sessions.sql |
One row per AGENT_ID + SESSION_START |
AGENT_DURATIONS |
GLADLY_AGENT_DURATIONS | silver/warbyparker/agent_durations.sql |
One row per AGENT_ID + STATUS_START |
AGENT_SUMMARY |
GLADLY_AGENT_SUMMARY | silver/warbyparker/wbp_gladly_agent_summary.sql |
One row per AGENT_ID + day |
INBOX_GLOSSARY |
External / Manual | N/A (managed separately) | One row per INBOX_ID |
WBP_ASPECT_CONFORMANCE |
ASPECT_CONFORMANCE | warbyparker/silver/wbp_aspect_conformance.sql |
One row per (EID × date) |
WBP_AWS_CSAT |
AWS_CSAT | warbyparker/silver/wbp_aws_csat.sql |
One row per (contact × question) |
GOLD Schema¶
| Object | Type | dbt Model | Source | Grain |
|---|---|---|---|---|
FCT_CONTACTS |
Dynamic Table | gold/warbyparker/fct_contacts.sql |
SILVER.CONTACT_TIMESTAMPS + CORE_DB.SILVER.ROSTER_WARBYPARKER | One row per CONTACT_ID |
AGG_AGENT_DAILY_CONTACTS |
Dynamic Table | gold/warbyparker/agg_agent_daily_contacts.sql |
FCT_CONTACTS | One row per (AGENT_ID, CONTACT_DATE) |
RPT_EMAIL_DAILY |
View | gold/warbyparker/rpt_email_daily.sql |
AGG_AGENT_DAILY_CONTACTS | One row per (AGENT_ID, DATE) |
RPT_AI_VS_NONAI_QA_WOW |
View | gold/warbyparker/rpt_ai_vs_nonai_qa_wow.sql |
fct_qa_internal, fct_qa_partner | One row per (WEEK_START_DATE × AGENT_GROUP × SCORE_TYPE) |
RPT_AI_VS_NONAI_QA_QOQ |
View | gold/warbyparker/rpt_ai_vs_nonai_qa_qoq.sql |
fct_qa_internal, fct_qa_partner | One row per (QUARTER_START_DATE × AGENT_GROUP × SCORE_TYPE) |
FCT_WBP_ASPECT_CONFORMANCE |
Table | warbyparker/gold/fct_wbp_aspect_conformance.sql |
WBP_ASPECT_CONFORMANCE + BI_ROSTER_WARBYPARKER | One row per (EID × date) |
FCT_WBP_AWS_CSAT |
Table | warbyparker/gold/fct_wbp_aws_csat.sql |
WBP_AWS_CSAT + CORE_DB.SILVER.BI_ROSTER_WARBYPARKER | One row per contact (INITIAL_CONTACT_ID) |
AGG_WBP_AWS_CSAT_CHANNEL_DAILY |
Table | warbyparker/gold/agg_wbp_aws_csat_channel_daily.sql |
FCT_WBP_AWS_CSAT | One row per (date × eid × interaction_type); SUM(stars) 1-5 + survey count; additive with AGG_WBP_CSAT_CHANNEL_DAILY in agent-performance view |
AI_AGENTS |
Seed Table | seeds/ai_agents.csv |
Static CSV | One row per agent (AI wave enablement dates) |
RPT_WBP_CONTACT_VOLUME |
View | warbyparker/gold/rpt_wbp_contact_volume.sql |
FCT_WBP_CONTACTS | One row per (date × channel × vendor × ai_status × ai_wave); inbound contacts; AI status = roster enrollment |
EXP_WBP_CONTACT_VOLUME_INBOX |
View | warbyparker/gold/exp_wbp_contact_volume_inbox.sql |
FCT_WBP_CONTACTS | Same grain as RPT_WBP_CONTACT_VOLUME; AI status = inbox-based (IS_AI_QUEUE) |
EXP_WBP_CONTACT_VOLUME_AGENT |
View | warbyparker/gold/exp_wbp_contact_volume_agent.sql |
AGG_WBP_AGENT_SUMMARY_CHANNEL_DAILY | Same grain; XO only; AI status = roster enrollment; queued=accepted; fulfilled_same_day=NULL |
SANDBOX Schema¶
Ad-hoc and supplementary datasets for analyst use. No pipeline automation, no dbt models. Tables follow the {SOURCE}_{OBJECT}_{ISSUE_NUMBER} naming convention. See ADR 015.
| Table | Source | Loaded By | Issue | Notes |
|---|---|---|---|---|
| (tables added as needed — each linked to a GitHub issue) |
CND_DB (Condé Nast)¶
BRONZE Schema¶
| Table | Source System | Load Strategy | DAG | Schemachange Version |
|---|---|---|---|---|
SPROUT_MESSAGES |
Sprout Social API | batch_replace | condenast_sprout_messages_bronze | V1.6.0 |
CND_MEDALLIA_CSAT |
Medallia (Stella Connect) API | batch_replace | condenast_medallia_daily | V1.2.0 |
GLADLY_CONTACT_EXPORT |
Gladly ContactExportReportV3 API | merge (ADR 024) | condenast_gladly_exports_daily | V1.8.0 |
GLADLY_CONVERSATION_EXPORT |
Gladly ConversationExportReport API | merge (ADR 024) | condenast_gladly_exports_daily | V1.8.0 |
SILVER Schema¶
| Table | Source | dbt Model | Grain |
|---|---|---|---|
CND_MAESTRO_ANSWERS |
MAESTRO_DB (direct) | cnd_maestro_answers |
One row per ANSWER_ID |
CND_MAESTRO_TEMPLATES |
MAESTRO_DB (direct) | cnd_maestro_templates |
One row per TEMPLATE_ID |
CND_MAESTRO_HELPDESK_ID_EMAIL |
MAESTRO_DB (direct) | cnd_maestro_helpdesk_id_email |
One row per HELPDESK + HELPDESK_ID |
CND_GLADLY_CONTACT_TIMESTAMPS |
GLADLY_CONTACT_TIMESTAMPS Bronze |
cnd_gladly_contact_timestamps |
One row per contact event |
CND_GLADLY_CONVERSATION_TIMESTAMPS |
GLADLY_CONVERSATION_TIMESTAMPS Bronze |
cnd_gladly_conversation_timestamps |
One row per conversation event |
CND_GLADLY_WORK_SESSIONS |
GLADLY_WORK_SESSIONS Bronze |
cnd_gladly_work_sessions |
One row per WORK_SESSION_ID |
CND_GLADLY_AGENT_DURATIONS |
GLADLY_AGENT_DURATIONS Bronze |
cnd_gladly_agent_durations |
One row per agent status span |
CND_GLADLY_AGENT_SUMMARY |
GLADLY_AGENT_SUMMARY Bronze |
cnd_gladly_agent_summary |
One row per AGENT_ID + day |
CND_GLADLY_FCR_BY_AGENT |
GLADLY_FCR_BY_AGENT Bronze |
cnd_gladly_fcr_by_agent |
One row per agent + day |
CND_GLADLY_CONTACT_EXPORT |
GLADLY_CONTACT_EXPORT Bronze |
cnd_gladly_contact_export |
One row per CONTACT_ID (latest state) |
CND_GLADLY_CONVERSATION_EXPORT |
GLADLY_CONVERSATION_EXPORT Bronze |
cnd_gladly_conversation_export |
One row per CONVERSATION_ID (latest state) |
GOLD Schema¶
| Table / View | Type | dbt Model | Grain / Purpose |
|---|---|---|---|
FCT_CND_CONTACTS |
Table | condenast/gold/fct_cnd_contacts |
One row per contact — master contact fact |
FCT_CND_CONVERSATIONS |
Table | condenast/gold/fct_cnd_conversations |
One row per conversation |
FCT_CND_CONTACTS_EXPORT |
Table | condenast/gold/fct_cnd_contacts_export |
One row per contact, from the Gladly ContactExportReportV3 rolling-window export |
FCT_CND_CONVERSATIONS_EXPORT |
Table | condenast/gold/fct_cnd_conversations_export |
One row per conversation, from the Gladly ConversationExportReport rolling-window export |
FCT_CND_QA |
Table | condenast/gold/fct_cnd_qa |
One row per QA evaluation (from MAESTRO_ANSWERS) |
FCT_CND_AGENT_DURATIONS |
Table | condenast/gold/fct_cnd_agent_durations |
One row per agent status duration record (contiguous status block) |
FCT_CND_AGENT_SUMMARY_DAILY |
Table | condenast/gold/fct_cnd_agent_summary_daily |
One row per agent per day |
FCT_CND_AGENT_CHANNEL_SUMMARY |
Table | condenast/gold/fct_cnd_agent_channel_summary |
One row per agent per day per channel |
AGG_CND_AGENT_DURATIONS_DAILY |
Table | condenast/gold/agg_cnd_agent_durations_daily |
One row per (date × EID) |
AGG_CND_AGENT_SUMMARY_CHANNEL_DAILY |
Table | condenast/gold/agg_cnd_agent_summary_channel_daily |
One row per (date × EID × channel) |
AGG_CND_FCR_CHANNEL_DAILY |
Table | condenast/gold/agg_cnd_fcr_channel_daily |
One row per (date × EID × channel) |
RPT_CND_AGENT_PERFORMANCE_CHANNEL |
View | condenast/gold/rpt_cnd_agent_performance_channel |
One row per (date × EID × channel) — Tableau-ready |
RPT_CND_AGENT_PRODUCTIVITY_DAILY |
View | condenast/gold/rpt_cnd_agent_productivity_daily |
One row per (date × EID); all XO agents, no AI filter |
Pending (not yet built):
AGG_CND_QA_DAILYandRPT_CND_QA_DAILYexist incondenast/gold/_pending/and are excluded from the build. Move out of_pending/and update this table when they are activated.
SANDBOX Schema¶
Ad-hoc and supplementary datasets for analyst use. No pipeline automation, no dbt models. Tables follow the {SOURCE}_{OBJECT}_{ISSUE_NUMBER} naming convention. See ADR 015.
| Table | Source | Loaded By | Issue | Notes |
|---|---|---|---|---|
| (tables added as needed — each linked to a GitHub issue) |
JCR_DB (J.Crew)¶
BRONZE Schema¶
| Table | Source System | Load Strategy | DAG | Schemachange Version |
|---|---|---|---|---|
GDRIVE_JCREW_AAA |
Google Drive GSheets (AAA weekly export) | batch_replace | jcr_gdrive_extract_daily | V1.3.0 |
GDRIVE_JCREW_INTERACTIONS |
Google Drive (Genesys Cloud conversation-level export, daily) | append | jcr_gdrive_extract_daily | V1.5.0 |
GDRIVE_JCREW_CSAT |
Google Drive GSheets (CSAT weekly export) | batch_replace | jcr_gdrive_extract_daily | V1.2.1 |
GDRIVE_JCREW_FCR |
Google Drive GSheets (FCR weekly export) | batch_replace | jcr_gdrive_extract_daily | V1.2.2 |
GDRIVE_JCREW_QA |
Google Drive (Genesys Cloud interactions QA / evaluation export, weekly) | append | jcr_gdrive_extract_daily | V1.6.0 |
GDRIVE_JCREW_AGENT_DAILY_AHT |
Google Drive (Genesys Cloud agent performance summary, daily export) | append | jcr_gdrive_extract_daily | V1.4.0 |
GDRIVE_JCREW_AGENT_STATUS |
Google Drive (Genesys Cloud agent status/adherence summary, daily export) | append | jcr_gdrive_extract_daily | V1.7.0 |
SILVER Schema¶
| Table | Source | dbt Model | Grain |
|---|---|---|---|
JCR_GDRIVE_AAA |
GDRIVE_JCREW_AAA Bronze |
jcrew/silver/jcr_gdrive_aaa |
One row per ASSOCIATE × date |
JCR_GDRIVE_INTERACTIONS |
GDRIVE_JCREW_INTERACTIONS Bronze |
jcrew/silver/jcr_gdrive_interactions |
One row per conversation |
JCR_GDRIVE_CSAT |
GDRIVE_JCREW_CSAT Bronze |
jcrew/silver/jcr_gdrive_csat |
One row per CSAT record |
JCR_GDRIVE_FCR |
GDRIVE_JCREW_FCR Bronze |
jcrew/silver/jcr_gdrive_fcr |
One row per agent × channel × contact reason × week |
JCR_GDRIVE_QA |
GDRIVE_JCREW_QA Bronze |
jcrew/silver/jcr_gdrive_qa |
One row per conversation |
JCR_GDRIVE_AGENT_DAILY_AHT |
GDRIVE_JCREW_AGENT_DAILY_AHT Bronze |
jcrew/silver/jcr_gdrive_agent_daily_aht |
One row per agent × interval × media type |
JCR_GDRIVE_AGENT_STATUS |
GDRIVE_JCREW_AGENT_STATUS Bronze |
jcrew/silver/jcr_gdrive_agent_status |
One row per agent × interval (daily); no channel |
GOLD Schema¶
| Table / View | Type | dbt Model | Grain / Purpose |
|---|---|---|---|
FCT_JCR_AAA |
Table | jcrew/gold/fct_jcr_aaa |
One row per agent × date; enriched with bi_roster_jcrew |
FCT_JCR_CSAT |
Table | jcrew/gold/fct_jcr_csat |
One row per CSAT record; enriched with bi_roster_jcrew |
FCT_JCR_FCR |
Table | jcrew/gold/fct_jcr_fcr |
One row per agent × channel × contact reason × week; enriched with bi_roster_jcrew |
AGG_JCR_AAA_DAILY |
Table | jcrew/gold/agg_jcr_aaa_daily |
(date, EID, site, skill) — AAA sums from FCT_JCR_AAA |
AGG_JCR_CSAT_CHANNEL_DAILY |
Table | jcrew/gold/agg_jcr_csat_channel_daily |
(date, EID, site, channel) — CSAT sums from FCT_JCR_CSAT |
AGG_JCR_FCR_CHANNEL_WEEKLY |
Table | jcrew/gold/agg_jcr_fcr_channel_weekly |
(week_date, EID, channel, site) — FCR sums from FCT_JCR_FCR |
AGG_JCR_AGENT_METRICS_DAILY |
Table | jcrew/gold/agg_jcr_agent_metrics_daily |
(date, EID, site, channel, SOURCE) — compact wide; ~4 rows per agent × date (Phone, Email, Chat, ALL); CSAT survey cols merged onto Chat AAA row; FCR rows at weekly grain; combines AAA/CSAT/FCR aggs |
RPT_JCR_AGENT_PERFORMANCE |
View | jcrew/gold/rpt_jcr_agent_performance |
(week_date, EID, channel, site) — weekly CSAT + FCR for Tableau |
FCT_JCR_AHT_OPS |
Table | jcrew/gold/fct_jcr_aht_ops |
One row per agent × interval × media_type; AGENT_ID → bi_roster_jcrew_new.GENESYS_ID; XO + non-XO retained (spike #1269) |
AGG_JCR_AHT_CHANNEL_DAILY_OPS |
Table | jcrew/gold/agg_jcr_aht_channel_daily_ops |
(date, agent_id, media_type) — AHT sums from FCT_JCR_AHT_OPS; XO + non-XO |
RPT_JCR_AHT_ACCOUNT_OPS |
View | jcrew/gold/rpt_jcr_aht_account_ops |
(date, media_type, agent_group=XO/Non-XO) — account-level AHT for Tableau |
FCT_JCR_INTERACTIONS |
Table | jcrew/gold/fct_jcr_interactions |
One row per conversation (last-agent-wins); last USERS_INTERACTED token → bi_roster_jcrew_new.USER_NAME; BPO_GROUP = XtendOps / J.Crew Corporate; non-XO retained (#1275/#1347) |
AGG_JCR_INTERACTIONS_CHANNEL_DAILY |
Table | jcrew/gold/agg_jcr_interactions_channel_daily |
(date, media_type, BPO_GROUP) — conversation volume + duration sums from FCT_JCR_INTERACTIONS |
RPT_JCR_INTERACTIONS_VOLUME |
View | jcrew/gold/rpt_jcr_interactions_volume |
(date, media_type, BPO_GROUP) — account conversation volume + AHT for Tableau |
EXP_JCR_INTERACTIONS_JOIN_COVERAGE |
View | jcrew/gold/exp_jcr_interactions_join_coverage |
Coverage comparison: explode vs direct USER_NAME join (spike #1275) |
FCT_JCR_QA |
Table | jcrew/gold/fct_jcr_qa |
One row per conversation (latest scored evaluation; all-Retracted/Deleted dropped); TRIM(EVALUATED_AGENT) → bi_roster_jcrew_new.USER_NAME; BPO_GROUP = XtendOps / J.Crew Corporate; non-XO retained (#1290/#1349) |
AGG_JCR_QA_CHANNEL_DAILY |
Table | jcrew/gold/agg_jcr_qa_channel_daily |
(date, evaluated_agent, media_type) — QA score sums/counts from FCT_JCR_QA, carries BPO_GROUP; XO + non-XO |
RPT_JCR_QA_AGENT_SCORECARD |
View | jcrew/gold/rpt_jcr_qa_agent_scorecard |
(date, evaluated_agent, media_type) — per-agent QA scorecard for Tableau, carries BPO_GROUP |
RPT_JCR_QA_ACCOUNT |
View | jcrew/gold/rpt_jcr_qa_account |
(date, media_type, BPO_GROUP) — account-level QA for Tableau |
FCT_JCR_AGENT_DAILY_AHT |
Table | jcrew/gold/fct_jcr_agent_daily_aht |
One row per AGENT_ID × interval × media_type; 3-key COALESCE → bi_roster_jcrew_new; BPO_GROUP = XtendOps / J.Crew In-House / J.Crew Corporate (#1343) ✅ Production |
AGG_JCR_AGENT_DAILY_AHT |
Table | jcrew/gold/agg_jcr_agent_daily_aht |
(INTERVAL_DATE, AGENT_ID, MEDIA_TYPE) — HANDLE > 0; XO + non-XO retained, keyed on agent_id (#1343) |
RPT_JCR_HANDLE_TIME_DAILY |
View | jcrew/gold/rpt_jcr_handle_time_daily |
(INTERVAL_DATE, AGENT_ID, MEDIA_TYPE) — per-agent AHT/handle-time KPIs, all BPO groups (#1343) |
FCT_JCR_AGENT_STATUS |
Table | jcrew/gold/fct_jcr_agent_status |
One row per AGENT_ID × interval (daily), no channel; 3-key COALESCE → bi_roster_jcrew_new; BPO_GROUP = XtendOps / J.Crew Corporate (no site field, no In-House bucket) (#1322) 🟡 New |
AGG_JCR_AGENT_STATUS_DAILY |
Table | jcrew/gold/agg_jcr_agent_status_daily |
(INTERVAL_DATE, AGENT_ID) — LOGGED_IN > 0; XO + non-XO retained, keyed on agent_id (#1322) 🟡 New |
RPT_JCR_AGENT_STATUS_DAILY |
View | jcrew/gold/rpt_jcr_agent_status_daily |
(INTERVAL_DATE, AGENT_ID) — per-agent adherence/occupancy rates, all BPO groups (#1322) 🟡 New |
SANDBOX Schema¶
Ad-hoc and supplementary datasets for analyst use. No pipeline automation, no dbt models. Tables follow the {SOURCE}_{OBJECT}_{ISSUE_NUMBER} naming convention. See ADR 015.
| Table | Source | Loaded By | Issue | Notes |
|---|---|---|---|---|
| (tables added as needed — each linked to a GitHub issue) |
CORE_DB (Shared Resources)¶
BRONZE Schema¶
All Bronze tables: all VARCHAR columns, batch_replace loading strategy (one row per employee per BATCH_ID).
PH HR Roster tables — source: Google Sheets (PeopleHub/BambooHR export):
| Table | Source Sheet Tab | DAG | Schemachange Version |
|---|---|---|---|
PH_HR_ROSTER_ACTIVE |
PH HR Active | core_ph_hr_roster_daily | V1.33.0 |
PH_HR_ROSTER_INACTIVE |
PH HR Inactive | core_ph_hr_roster_daily | V1.34.0 |
BI Roster tables — source: Standard_Roster Google Sheet (1TDfcwDHQFM3fmAJhQOzoWjDbTikJCN0wvQ5RYh2xjNY), all loaded by core_gsheets_bi_roster_daily DAG:
| Table | Sheet Tab | Schemachange Version |
|---|---|---|
GSHEET_BI_ROSTER_WARBYPARKER |
WARBYPARKER | V1.5.1 |
GSHEET_BI_ROSTER_BI_TEAM |
Bi Team | V1.6.0 |
GSHEET_BI_ROSTER_STAFF_MX |
STAFF MX | V1.7.0 |
GSHEET_BI_ROSTER_MORGANANDMORGAN |
MORGANANDMORGAN | V1.8.0 |
GSHEET_BI_ROSTER_QUADLOCK |
QUADLOCK | V1.9.0 |
GSHEET_BI_ROSTER_IONOS |
IONOS | V1.10.0 |
GSHEET_BI_ROSTER_FLARE |
FLARE | V1.11.0 |
GSHEET_BI_ROSTER_POSTMAN_LAW |
POSTMAN LAW | V1.12.0 |
GSHEET_BI_ROSTER_RUGIET |
RUGIET | V1.13.0 |
GSHEET_BI_ROSTER_JCREW |
JCREW | V1.14.0 |
GSHEET_BI_ROSTER_JCREW_NEW |
JCREW_NEW | V1.37.0 |
GSHEET_BI_ROSTER_KELLER_POSTMAN |
KELLER POSTMAN | V1.15.0 |
GSHEET_BI_ROSTER_CONDENAST |
CONDENAST | V1.16.0 |
GSHEET_BI_ROSTER_WITHIN_HEALTH |
WITHIN HEALTH | V1.17.0 |
GSHEET_BI_ROSTER_WESTERN_DENTAL |
WESTERN DENTAL | V1.18.0 |
GSHEET_BI_ROSTER_MATCH |
MATCH | V1.19.0 |
GSHEET_BI_ROSTER_LOGITECH |
LOGITECH | V1.20.0 |
GSHEET_BI_ROSTER_DRFIRST |
DRFIRST | V1.21.0 |
GSHEET_BI_ROSTER_GOODFOOD |
GOODFOOD | V1.22.0 |
GSHEET_BI_ROSTER_IMAGINE_WELLNESS |
IMAGINE WELLNESS | V1.23.0 |
GSHEET_BI_ROSTER_NBA |
NBA | V1.24.0 |
GSHEET_BI_ROSTER_TRIM |
TRIM | V1.25.0 |
GSHEET_BI_ROSTER_UR_LABS |
UR LABS | V1.26.0 |
GSHEET_BI_ROSTER_FLEX_MG |
FLEX MG | V1.27.0 |
GSHEET_BI_ROSTER_CARTAMUNDI |
CARTAMUNDI | V1.28.0 |
GSHEET_BI_ROSTER_HELLOFRESH |
HELLOFRESH | V1.29.0 |
GSHEET_BI_ROSTER_HELLOFRESH_TERMS |
HELLOFRESH TERMS | V1.30.0 |
GSHEET_BI_ROSTER_SMASHTECH |
SMASHTECH | V1.31.0 |
SILVER Schema¶
Shared resources used by all client Gold layers.
PH HR Roster — sourced from BRONZE.PH_HR_ROSTER_*:
| Table | Purpose | dbt Model | Updated By |
|---|---|---|---|
PH_HR_ROSTER_ACTIVE |
PH active employee roster | silver/core/ph_hr_roster_active.sql |
core_dbt_bi_roster DAG |
PH_HR_ROSTER_INACTIVE |
PH inactive employee roster | silver/core/ph_hr_roster_inactive.sql |
core_dbt_bi_roster DAG |
BI Rosters — sourced from BRONZE.GSHEET_BI_ROSTER_*, rebuilt each run from the latest BATCH_ID. One row per employee (current state):
| Table | dbt Model | Client |
|---|---|---|
BI_ROSTER_WARBYPARKER |
silver/core/bi_roster_warbyparker.sql |
Warby Parker |
BI_ROSTER_BI_TEAM |
silver/core/bi_roster_bi_team.sql |
BI Team (internal) |
BI_ROSTER_STAFF_MX |
silver/core/bi_roster_staff_mx.sql |
Staff MX |
BI_ROSTER_MORGANANDMORGAN |
silver/core/bi_roster_morganandmorgan.sql |
Morgan & Morgan |
BI_ROSTER_QUADLOCK |
silver/core/bi_roster_quadlock.sql |
Quad Lock |
BI_ROSTER_IONOS |
silver/core/bi_roster_ionos.sql |
IONOS |
BI_ROSTER_FLARE |
silver/core/bi_roster_flare.sql |
Flare |
BI_ROSTER_POSTMAN_LAW |
silver/core/bi_roster_postman_law.sql |
Postman Law |
BI_ROSTER_RUGIET |
silver/core/bi_roster_rugiet.sql |
Rugiet |
BI_ROSTER_JCREW |
silver/core/bi_roster_jcrew.sql |
J.Crew |
BI_ROSTER_KELLER_POSTMAN |
silver/core/bi_roster_keller_postman.sql |
Keller Postman |
BI_ROSTER_CONDENAST |
silver/core/bi_roster_condenast.sql |
Condé Nast |
BI_ROSTER_WITHIN_HEALTH |
silver/core/bi_roster_within_health.sql |
Within Health |
BI_ROSTER_WESTERN_DENTAL |
silver/core/bi_roster_western_dental.sql |
Western Dental |
BI_ROSTER_MATCH |
silver/core/bi_roster_match.sql |
Match |
BI_ROSTER_LOGITECH |
silver/core/bi_roster_logitech.sql |
Logitech |
BI_ROSTER_DRFIRST |
silver/core/bi_roster_drfirst.sql |
DrFirst |
BI_ROSTER_GOODFOOD |
silver/core/bi_roster_goodfood.sql |
GoodFood |
BI_ROSTER_IMAGINE_WELLNESS |
silver/core/bi_roster_imagine_wellness.sql |
Imagine Wellness |
BI_ROSTER_NBA |
silver/core/bi_roster_nba.sql |
NBA |
BI_ROSTER_TRIM |
silver/core/bi_roster_trim.sql |
Trim |
BI_ROSTER_UR_LABS |
silver/core/bi_roster_ur_labs.sql |
UR Labs |
BI_ROSTER_FLEX_MG |
silver/core/bi_roster_flex_mg.sql |
Flex MG |
BI_ROSTER_CARTAMUNDI |
silver/core/bi_roster_cartamundi.sql |
Cartamundi |
BI_ROSTER_HELLOFRESH |
silver/core/bi_roster_hellofresh.sql |
HelloFresh |
BI_ROSTER_SMASHTECH |
silver/core/bi_roster_smashtech.sql |
Smashtech |
GSHEET_BI_ROSTER_HELLOFRESH_TERMShas a Bronze table but no Silver model (terms-only reference data, not an employee roster).
Legacy rosters (deprecated — sourced from OPERATIONS.BAMBOOHR):
| Table | Purpose | Updated By | Notes |
|---|---|---|---|
ROSTER_WARBYPARKER |
WBP XO agent roster (legacy) | core_ph_hr_roster_daily DAG | Being replaced by DIM_EMPLOYEE_WARBYPARKER in GOLD |
ROSTER_CONDENAST |
CND XO agent roster (legacy) | core_ph_hr_roster_daily DAG | Being replaced by DIM_EMPLOYEE_CONDENAST in GOLD |
GOLD Schema¶
Employee dimensions for all clients (SCD Type 1 — latest state wins). Per ADR 010, all employee dimensions live here regardless of client.
| Table | dbt Model | Source Silver | Client |
|---|---|---|---|
DIM_EMPLOYEE_WARBYPARKER |
gold/core/dim_employee_warbyparker.sql |
BI_ROSTER_WARBYPARKER |
Warby Parker |
DIM_EMPLOYEE_BI_TEAM |
gold/core/dim_employee_bi_team.sql |
BI_ROSTER_BI_TEAM |
BI Team |
DIM_EMPLOYEE_STAFF_MX |
gold/core/dim_employee_staff_mx.sql |
BI_ROSTER_STAFF_MX |
Staff MX |
DIM_EMPLOYEE_MORGANANDMORGAN |
gold/core/dim_employee_morganandmorgan.sql |
BI_ROSTER_MORGANANDMORGAN |
Morgan & Morgan |
DIM_EMPLOYEE_QUADLOCK |
gold/core/dim_employee_quadlock.sql |
BI_ROSTER_QUADLOCK |
Quad Lock |
DIM_EMPLOYEE_IONOS |
gold/core/dim_employee_ionos.sql |
BI_ROSTER_IONOS |
IONOS |
DIM_EMPLOYEE_FLARE |
gold/core/dim_employee_flare.sql |
BI_ROSTER_FLARE |
Flare |
DIM_EMPLOYEE_POSTMAN_LAW |
gold/core/dim_employee_postman_law.sql |
BI_ROSTER_POSTMAN_LAW |
Postman Law |
DIM_EMPLOYEE_RUGIET |
gold/core/dim_employee_rugiet.sql |
BI_ROSTER_RUGIET |
Rugiet |
DIM_EMPLOYEE_JCREW |
gold/core/dim_employee_jcrew.sql |
BI_ROSTER_JCREW |
J.Crew |
DIM_EMPLOYEE_KELLER_POSTMAN |
gold/core/dim_employee_keller_postman.sql |
BI_ROSTER_KELLER_POSTMAN |
Keller Postman |
DIM_EMPLOYEE_CONDENAST |
gold/core/dim_employee_condenast.sql |
BI_ROSTER_CONDENAST |
Condé Nast |
DIM_EMPLOYEE_WITHIN_HEALTH |
gold/core/dim_employee_within_health.sql |
BI_ROSTER_WITHIN_HEALTH |
Within Health |
DIM_EMPLOYEE_WESTERN_DENTAL |
gold/core/dim_employee_western_dental.sql |
BI_ROSTER_WESTERN_DENTAL |
Western Dental |
DIM_EMPLOYEE_MATCH |
gold/core/dim_employee_match.sql |
BI_ROSTER_MATCH |
Match |
DIM_EMPLOYEE_LOGITECH |
gold/core/dim_employee_logitech.sql |
BI_ROSTER_LOGITECH |
Logitech |
DIM_EMPLOYEE_DRFIRST |
gold/core/dim_employee_drfirst.sql |
BI_ROSTER_DRFIRST |
DrFirst |
DIM_EMPLOYEE_GOODFOOD |
gold/core/dim_employee_goodfood.sql |
BI_ROSTER_GOODFOOD |
GoodFood |
DIM_EMPLOYEE_IMAGINE_WELLNESS |
gold/core/dim_employee_imagine_wellness.sql |
BI_ROSTER_IMAGINE_WELLNESS |
Imagine Wellness |
DIM_EMPLOYEE_NBA |
gold/core/dim_employee_nba.sql |
BI_ROSTER_NBA |
NBA |
DIM_EMPLOYEE_TRIM |
gold/core/dim_employee_trim.sql |
BI_ROSTER_TRIM |
Trim |
DIM_EMPLOYEE_UR_LABS |
gold/core/dim_employee_ur_labs.sql |
BI_ROSTER_UR_LABS |
UR Labs |
DIM_EMPLOYEE_FLEX_MG |
gold/core/dim_employee_flex_mg.sql |
BI_ROSTER_FLEX_MG |
Flex MG |
DIM_EMPLOYEE_CARTAMUNDI |
gold/core/dim_employee_cartamundi.sql |
BI_ROSTER_CARTAMUNDI |
Cartamundi |
DIM_EMPLOYEE_HELLOFRESH |
gold/core/dim_employee_hellofresh.sql |
BI_ROSTER_HELLOFRESH |
HelloFresh |
DIM_EMPLOYEE_SMASHTECH |
gold/core/dim_employee_smashtech.sql |
BI_ROSTER_SMASHTECH |
Smashtech |
DIM_EMPLOYEE_PH |
gold/core/dim_employee_ph.sql |
PH_HR_ROSTER_ACTIVE |
PH (internal) |
SANDBOX Schema¶
Ad-hoc and supplementary datasets for analyst use. No pipeline automation, no dbt models. Tables follow the {SOURCE}_{OBJECT}_{ISSUE_NUMBER} naming convention. See ADR 015.
| Table | Source | Loaded By | Issue | Notes |
|---|---|---|---|---|
| (tables added as needed — each linked to a GitHub issue) |
MAESTRO_DB (Rippit — Partner-Managed Bronze, Condé Nast)¶
Owner: Rippit team (MAESTRO_USER / MAESTRO_ROLE / RIPPIT_LOAD_WH)
Pattern: Partner-managed Bronze — Rippit loads QA evaluation data directly; XO-Data reads cross-database from Silver models. See ADR 017.
MAESTRO Schema¶
| Table | Source System | Owner | Notes |
|---|---|---|---|
(tables loaded by Rippit team — explore via DESCRIBE SCHEMA MAESTRO_DB.MAESTRO) |
Rippit QA | Rippit team | All read-only from XO-Data perspective |
OPERATIONS (Legacy — Multi-Client Analytics DB)¶
This database contains legacy multi-client analytics objects. Actively maintained for ad hoc analysis and reporting; no _DEV variant exists — all queries run against prod data.
| Schema | Objects | Purpose | Naming pattern |
|---|---|---|---|
STAGING |
~9 dynamic tables | Intermediate transformation layer | STAGE_{CLIENT}_{OBJECT} |
ODS |
~15 dynamic tables | Cross-client operational data store | XOS_*, {CLIENT}_* |
AGGREGATE |
~45 dynamic tables + ~36 views | Pre-computed metrics and dashboards | {CLIENT}_{METRIC}, {CLIENT}_RPT_* |
BAMBOOHR |
~7 dynamic tables | Employee roster source (feeds CORE_DB) | ROSTER_{CLIENT} |
Do not create new objects in OPERATIONS. For new analytical surfaces, build in the medallion architecture (WBP_DB/CND_DB GOLD layer). Existing objects are read-only for analysis.
Airflow Connections → Snowflake Mapping¶
| Airflow Connection ID | Snowflake Database | Role | Used By |
|---|---|---|---|
snowflake_loader_prod |
WBP_DB, CND_DB, CORE_DB | XO_DATA_LOADER | xo-foundry load tasks |
snowflake_dbt_prod |
WBP_DB, CND_DB, CORE_DB | XO_DBT_ROLE | dbt transformations (via Cosmos) |
snowflake_loader_dev |
WBP_DB_DEV, CND_DB_DEV | XO_DATA_ENGINEER_DEV | Local development |
Naming Constraints¶
Before creating any new Snowflake object, verify: 1. Table name doesn't already exist in this inventory 2. Follows naming convention from ADR 009 3. Lives in the correct database — per-client data in client DB, shared data in CORE_DB 4. Schemachange migration file created — DDL must go through version control
See also: architecture-summary.md | rbac-permission-matrix.md | ADR 009