Infrastructure

What's behind the lab

Every component the HOL touches - Snowflake account, source schema, dbt project, auth model, and the supporting team.

At a glance

The whole lab on one card

Snowflake account
<account-locator> Distributed at the lab. Internal lab instance.
Source database
SNOWFLAKE_SUMMIT_2026_HOL_DB
Source schema
SF_HOL_2026_RETAIL (Fivetran-synced retail tables prefixed RET_*)
Warehouse
DEFAULT
Lab role
LAB_INSTRUCTOR_ROLE (instructors) / LAB_USER_* (attendees - assigned on arrival)
Auth method
Keypair (no MFA prompts during the lab)
dbt project repo
fivetran-jacklowery/dbt_wizard_hol
dbt profile name
dbt_hands_on_lab_profile
Default target schema
DEV_<initials_or_id> per attendee - auto-suffixed by tier via the generate_schema_name macro
dbt project

The dbt project layout

A standard layered dbt project: staging models map 1:1 to source tables, intermediate models do the heavy joins and shaping, and mart models split into business-facing core and marketing layers.

models/
  staging/
    stg_customers.sql
    stg_orders.sql
    stg_order_items.sql
    stg_products.sql
    stg_product_categories.sql
    stg_product_subcategories.sql
    stg_product_reviews.sql
    stg_inventory.sql
    stg_inventory_transactions.sql
    stg_promotions.sql
    stg_tickets.sql
    stg_warehouses.sql
    _staging__sources.yml
  intermediate/
    int_customer_metrics.sql
    int_customer_cohorts.sql
    int_customer_churn_risk.sql
    int_orders_enriched.sql
    int_daily_summary.sql
    int_weekly_summary.sql
    int_quarterly_summary.sql
    int_repeat_purchase_behavior.sql
    int_rfm_segmentation.sql
  marts/
    core/
      fct_orders.sql
      fct_monthly_revenue.sql
      customer_analytics.sql
      daily_revenue_trends.sql
      quarterly_performance.sql
    marketing/
      cohort_analysis.sql
      churn_risk_analysis.sql
      discount_effectiveness.sql
      high_value_segment.sql
      promo_campaign_analysis.sql
      repeat_purchase_analysis.sql
      rfm_segment_performance.sql
Sources

Source tables

Twelve Fivetran-synced retail tables live in SNOWFLAKE_SUMMIT_2026_HOL_DB.SF_HOL_2026_RETAIL. All tables include _FIVETRAN_DELETED and _FIVETRAN_SYNCED system columns. The physical primary key is CTID_FIVETRAN_ID; the business key is ID on every table.

Table name Description Primary key
RET_CUSTOMERS One row per registered customer, including contact info and geographic segmentation. ID
RET_ORDERS One row per customer order, including status, shipping details, and pre-computed totals. ID
RET_ORDER_ITEMS One row per line item within an order, including quantity, unit price, and discount. ID
RET_PRODUCTS Product catalog with SKU, pricing, brand, and active status. ID
RET_PRODUCT_CATEGORIES Top-level product category lookup table. ID
RET_PRODUCT_SUBCATEGORIES Product subcategory lookup, each belonging to a parent category. ID
RET_PRODUCT_REVIEWS Customer product reviews with a 1-5 rating and optional review text. ID
RET_INVENTORY Current inventory levels per product per warehouse, with reorder thresholds. ID
RET_INVENTORY_TRANSACTIONS Log of every inventory movement (receipt, sale, adjustment, return) per product per warehouse. ID
RET_PROMOTIONS Promotional campaigns with discount type, value, date range, and applicable category. ID
RET_TICKETS Customer support tickets linked to customers and optionally to orders. ID
RET_WAREHOUSES Warehouse locations with address, capacity, and active status. ID
Auth

Snowflake keypair auth

We use keypair authentication so attendees don't get MFA-prompted mid-lab. Each lab user gets a pre-generated keypair, a profiles.yml template, and a .env template for the passphrase.

Session-scoped credentials. Keys are distributed at the lab, scoped to the session, and revoked when the lab ends. Don't take them home and don't commit them to a repo.
dbt_hands_on_lab_profile:
  target: dev
  outputs:
    dev:
      type: snowflake
      # your account locator, distributed at the lab
      account: "<account-locator>"
      user:  "LAB_USER_N@example.com"
      private_key_path: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PATH') }}"
      private_key_passphrase: "{{ env_var('SNOWFLAKE_PRIVATE_KEY_PASSPHRASE', '') }}"
      role: "LAB_USER_ROLE"
      database: "SNOWFLAKE_SUMMIT_2026_HOL_DB"
      schema: "DEV_LAB_USER_N"
      warehouse: "DEFAULT"
      threads: 4
Agent runtime

dbt Wizard infrastructure

What's actually in play during the lab.

dbt Wizard is BYOK today. Each tester needs their own GCP auth and dbt platform account before the lab. That's why we hand out the install steps a week ahead.
The team

Who owns what

Action-item ownership for the HOL build-out.

Owner

Garrett Kelly

"Why dbt Wizard" messaging and story. Owns the narrative that bridges the marketing launch to the hands-on lab.

Owner

Javid Igani

Skill and script co-owner. Drives the agent skill definitions and the scenario script content.

Owner

Jason Chletsos

Skill and script co-owner, lab walkthrough recording. Owns the recorded video assets and the supporting documentation site.

Owner

Jack Lowery

Laptop build, dataset, repo owner. Owns the seeded source data, the dbt project structure, and the lab-day machine images.

Additional team members will be added once their roles are pinned down.

Quick links

Where to find everything

Source

GitHub repo

The dbt project, seed data, scripts, and lab assets.

Reference

Slab article

Original dbt Wizard getting-started writeup.

Warehouse

Snowflake instance

The HOL Snowflake account where source data lives.

Platform

dbt platform login

Where first-run account setup happens.

Feedback

Slack channel

Bug reports and product feedback during the beta.