prediction_markets.trades table is the cross-venue trade table. Grain: one row per taker fill, including Polymarket Combos (multi-leg parlays; is_parlay = TRUE in the markets dimension). Each match appears once, so SUM(amount_usd) is venue volume without any filter. Polymarket maker legs stay in the venue table (polymarket_polygon.market_trades, is_taker_side = FALSE).
Three columns describe every fill:
priceis always the probability of Yes in[0, 1], comparable across venues and sides.outcome_sideis the side of the market the traded contract belongs to (yesorno).taker_sideis whether the taker bought or sold that contract (BUYorSELL).
taker_fill_price is the price of the contract actually traded (price for a Yes contract, 1 - price for a No contract), so taker_fill_price × num_contracts = amount_usd on every row.
Kalshi nets positions and reports every fill as a buy of the side the taker ends up long, so
taker_side is always BUY on Kalshi and closing a Yes position appears as a BUY with outcome_side = 'no'. Kalshi also reports one row per taker-maker match, so row counts are not comparable across venues; sums are.Table Schema
Table sample
Query performance
block_month is the partition key. Always include a block_month or executed_at filter.