<!--
=== NEW PARTNER SETUP CHECKLIST — DELETE THIS BLOCK WHEN COMPLETE ===

SKILL.md
[ ] name          — lowercase, hyphens, matches folder name exactly
[ ] description   — one-liner: what data the partner provides and its coverage
[ ] last-reviewed — today's date (YYYY-MM-DD)
[ ] Overview      — 2-3 sentences: what data, how delivered, geography/time coverage
[ ] Data Locations — table filled with real database and schema names
[ ] Workflow Step 1 — list the actual metric types and entity levels for this partner
[ ] Workflow Step 2 — map the 3 tier levels to this partner's specific tables
[ ] Critical Caveats — minimum 2 real gotchas that cause wrong numbers if missed
[ ] No remaining <!-- FILL: ... --> markers anywhere in this file

references/
[ ] data-overview.md        — all sections filled
[ ] entity-relationships.md — filled, OR deleted if this partner has no multi-entity joins
[ ] query-guide.md          — required filters, cluster keys, and sentinel values filled
[ ] sample-queries.md       — minimum 3 working SQL examples with correct 3-part names
[ ] If any reference file exceeds ~150 lines, split it and add a row to the Routing table

Parent skill
[ ] Row added to references/partner-registry.md under the correct category

Validation
[ ] Sample question correctly routes from parent skill to this sub-skill
[ ] At least one query from sample-queries.md executes without errors in Snowflake
=====================================================================
-->

---
name: <!-- FILL: partner-name (lowercase, hyphens, must match folder name) -->
parent_skill: partners
description: "<!-- FILL: One-line description of what this partner provides and what data it covers. -->"
last-reviewed: <!-- FILL: YYYY-MM-DD -->
---

# <!-- FILL: Partner Name --> Data Skill

## Overview

<!-- FILL: 2-3 sentences describing:
  - What data this partner provides (e.g., streaming consumption, social engagement, radio airplay)
  - How data is delivered (datashare, file load to Snowflake, API ingestion)
  - Geographic and temporal coverage
-->

## Data Locations

Use the catalog (`DESCRIBE TABLE` or `#table` syntax) to inspect column details — do NOT rely on memory for column names.

| Database | Schema | What It Contains |
|----------|--------|-----------------|
| `<!-- FILL -->` | `<!-- FILL -->` | <!-- FILL: Brief description of what lives here --> |
<!-- Add rows as needed. One row per database/schema combination. -->

## Routing

Match the analyst's question to the right reference file before writing queries.

| Question Type | Load |
|--------------|------|
| "What databases/schemas exist?", "What tables are available?", "Detail vs Summary?", "Pre-built aggregates?" | `references/data-overview.md` |
| "How do I join X to Y?", entity relationships, mapping between IDs | `references/entity-relationships.md` |
| "How should I filter?", "What are the valid values for X?", cluster keys | `references/query-guide.md` |
| "Show me an example query", common patterns, starting point | `references/sample-queries.md` |

> **Scaling note**: If `data-overview.md` grows beyond ~200 lines, extract the "Fact Table Variants" or "Internal Models" sections into their own reference files and add routing rows for them.
> **Checklist**: Delete `references/entity-relationships.md` if this partner has no multi-entity joins.

## Workflow

### Step 0: Load Universal Standards

**Load** the parent skill's `references/query-standards.md` before proceeding. It contains universal rules for value discovery, aggregation, catalog usage, and date-range interpretation that apply to all queries below.

### Step 1: Understand the Request

1. Determine what the analyst wants: <!-- FILL: list the metric types this partner supports (e.g., streams, sales, engagement, followers) -->
2. Identify the entity level: <!-- FILL: list entity types (e.g., Track, Artist, Playlist, Video) -->
3. Identify the geography and time range

### Step 2: Choose the Right Data Source

**Follow the data source preference order from `references/query-standards.md`** (pre-aggregated → summary → detail).

<!-- FILL: Map the universal preference tiers to this partner's specific tables:

1. **Pre-aggregated models** (if any) — describe what's available, or remove this tier
2. **Summary / primary tables** — the default for most queries
3. **Detail / granular tables** — when additional granularity is explicitly needed

If this partner only has one tier of tables, simplify accordingly. -->

**Load** `references/data-overview.md` to check fact table variants and internal model coverage.
**Load** `references/query-guide.md` for partner-specific filters and performance rules.

### Step 3: Identify Tables and Joins

1. Confirm the correct database and schema from the Data Locations table above
2. Use the database catalog (`DESCRIBE TABLE` or `#table`) to verify column names
3. **Load** `references/entity-relationships.md` if joining across entity types
4. **Load** `references/query-guide.md` for cluster keys and required filters

### Step 4: Build the Query

1. Apply partner-specific rules from `references/query-guide.md`
2. Apply universal rules from `references/query-standards.md`
3. Self-check before presenting:
   - Are required filters applied? (see Critical Caveats below)
   - Are joins correct for the entity level requested?
   - Are breakout columns relevant to the metric type?

## Critical Caveats

<!-- FILL: Bullet list of gotchas specific to this partner. These are the things that cause
wrong numbers if missed. Examples:
- Required filters that must always be present
- Sentinel values (non-NULL placeholders)
- Columns that only work for certain countries/regions
- Double-counting risks
- Data latency or refresh timing
-->

- <!-- FILL: Caveat 1 -->
- <!-- FILL: Caveat 2 -->
