First query¶
Analyst
Use this page for a linear first session against an existing local warehouse. OddsFox Pipeline ships software and local warehouse tooling, not a hosted dataset. For table selection, trust rules, and the full chooser, continue with Query the warehouse.
1. Open read-only¶
Prefer a read-only connection so analysis does not compete with a writer:
import duckdb
con = duckdb.connect("oddsfox.duckdb", read_only=True)
Or open the CLI:
duckdb oddsfox.duckdb
The default path is oddsfox.duckdb in the repository root. If .env sets
DUCKDB_PATH, open that file instead. See
Configuration for path precedence.
If you do not have a warehouse yet, ask an operator to complete Quickstart, then return here.
2. List public schemas¶
show schemas;
Prefer schemas ending in *_marts. Use *_observability for freshness and
quality checks. Treat *_raw, *_ops, *_staging, and *_intermediate as
internal surfaces.
3. Pick a starting mart¶
| Goal | Start here |
|---|---|
| Polymarket WC2026 hourly odds | polymarket_wc2026_marts.polymarket_wc2026_market_hourly_odds |
| Current Kalshi stage prices | kalshi_wc2026_marts.kalshi_wc2026_stage_markets |
The full chooser lives in Query the warehouse.
4. Run one query¶
Polymarket golden mart (after a Polymarket full run):
rows = con.sql("""
select
event_slug,
question,
odds_hour_utc,
close_odds,
event_volume_usd_lifetime_reported
from polymarket_wc2026_marts.polymarket_wc2026_market_hourly_odds
where is_active
and not is_closed
order by event_slug, question, odds_hour_epoch desc
""").df()
Kalshi stage markets (after a Kalshi full run) — prefer
is_actionable_live_market:
select
canonical_team_name,
stage_key,
progression_outcome_label,
progression_price,
current_price_status,
market_ticker
from kalshi_wc2026_marts.kalshi_wc2026_stage_markets
where is_actionable_live_market
order by canonical_team_name, stage_rank;
5. Trust check¶
Before treating prices as live, inspect observability:
select *
from polymarket_wc2026_observability.polymarket_wc2026_ingestion_run_observability
order by 1 desc
limit 20;
select *
from kalshi_wc2026_observability.kalshi_wc2026_data_quality
limit 50;
Historical closed and resolved rows are intentionally retained. Do not assume a row is live because it appears in a mart. Term shortcuts live in Analyst shortcuts.
6. Next steps¶
| Goal | Page |
|---|---|
| Copy-paste SQL and Python | Query recipes |
| Grain, filters, and common mistakes | Data dictionary |
| Full table chooser and trust rules | Query the warehouse |
| Analyst map and joins | Analysts |