import { RollupDef } from "./core.mjs"; /** * Daily totals across the full history. One row per (date, table) with * clicks + impressions + position. Powers sparklines and headline totals. * * Includes `anonymizedImpressionsPct` per day computed as * 1 - sum(query_grained_impressions) / sum(page_grained_impressions) * — surfaces GSC's anonymous-query gap so the dashboard can warn users not * to trust query-grained breakdowns as comprehensive. */ declare const dailyTotalsRollup: RollupDef; /** Weekly totals, ISO week aligned. Cheap and stable for trend widgets. */ declare const weeklyTotalsRollup: RollupDef; /** * Top 1000 pages by clicks over the trailing 28-day window. JSON for v1; * promote to parquet (`top_pages_28d.parquet`) when the dashboard needs * server-side WHERE filtering on this rollup. */ declare const topPages28dRollup: RollupDef; /** * Top 250 countries by clicks over the trailing 28-day window. Countries * cardinality is bounded (~250 ISO codes), so the list fits in a tiny JSON * payload regardless of traffic shape. Powers a geo-overview widget without * spinning up DuckDB-WASM. */ declare const topCountries28dRollup: RollupDef; /** * Parquet-format companion to `topKeywords28dRollup`. Same shape, but persists * as a parquet object plus JSON sidecar pointer so widgets that need * server-side WHERE (filter by prefix, by clicks threshold, paginate) can scan * it directly with DuckDB-WASM instead of loading all 1000 rows into JS. * * Opt-in: include in the caller's rollup def list alongside (or instead of) * the JSON variant; the runner treats the two as independent ids so they can * coexist during a migration. */ declare const topKeywords28dParquetRollup: RollupDef; export { dailyTotalsRollup, topCountries28dRollup, topKeywords28dParquetRollup, topPages28dRollup, weeklyTotalsRollup };