Skip to content

Budget Tables

The budget pacing system uses external tables (linked to Google Sheets), final tables (normalized long format), and a refresh log.

Table Summary

TableTypeRowsDescription
suse_budget_platform_staging_v2External (Sheets)~8Reads Platform_Budget tab from Google Sheet
suse_budget_region_staging_v2External (Sheets)~8Reads Region_Budget tab from Google Sheet
suse_budget_config_staging_v2External (Sheets)~4Reads Quarter_Config tab from Google Sheet
suse_budget_planned_q1_staging_v2External (Sheets)~50Reads 2026-Q1_Planned tab (granular media plan)
suse_budget_planned_q2_staging_v2External (Sheets)~50Reads 2026-Q2_Planned tab (granular media plan)
suse_budget_platform_final_v2Table24Platform × Quarter budgets (long format)
suse_budget_region_final_v2Table8Region × Quarter budgets (long format)
suse_budget_config_v2Table4Fiscal quarter date ranges
suse_budget_planned_final_v2Table284Platform × Region × Product planned budgets (quarterly)
suse_budget_planned_monthly_v2Table776Platform × Region × Product planned budgets (monthly)
suse_budget_refresh_log_v2Table--Refresh operation tracking

External Tables (Staging)

These are federated queries — they read directly from Google Sheets without storing data in BigQuery. The authenticated user must have access to the sheet.

Google Sheet: SUSE Budget Tracking

suse_budget_platform_staging_v2

Reads the Platform_Budget tab. Wide format with quarter columns.

ColumnTypeSource
PlatformSTRINGColumn A
_2026_Q1INTEGERColumn B
_2026_Q2INTEGERColumn C
_2026_Q3INTEGERColumn D
_2026_Q4INTEGERColumn E

Column Naming

Sheet headers like "2026-Q1" become _2026_Q1 in BigQuery (prefixed underscore, hyphens replaced with underscores).

suse_budget_region_staging_v2

Same structure as platform staging, with Region in column A.

suse_budget_planned_q1_staging_v2 / suse_budget_planned_q2_staging_v2

Reads the 2026-Q1_Planned and 2026-Q2_Planned tabs. Granular media plan budgets at Platform × Region × Product level.

ColumnTypeSource
PlatformSTRINGColumn A (without " Ads" suffix)
RegionSTRINGColumn B (may contain multi-region like "NA + EMEA")
Product_LineSTRINGColumn C
ProductSTRINGColumn D
_2026_Q1 / _2026_Q2FLOAT64Column E (quarter total)
_2025_11 ... _2026_04FLOAT64Columns F-H (monthly breakdown)

Multi-Region Splitting

Rows with "NA + EMEA" or "EMEA + APAC + LATAM" in the Region column are split evenly across constituent regions during the refresh. The final tables only contain single regions.

suse_budget_config_staging_v2

ColumnTypeSource
QuarterSTRING"2026-Q1" format
StartDateDATEFirst day of quarter
EndDateDATELast day of quarter

Final Tables

suse_budget_platform_final_v2

Normalized long format. One row per platform per quarter.

ColumnTypeDescription
PlatformSTRINGPlatform name matching unified_performance_v2
QuarterSTRINGFiscal quarter (e.g., "2026-Q1")
QuarterBudgetFLOAT64Budget in USD
_ingested_atTIMESTAMPLast refresh timestamp

suse_budget_region_final_v2

ColumnTypeDescription
RegionSTRINGGEO region matching unified_performance_v2
QuarterSTRINGFiscal quarter
QuarterBudgetFLOAT64Budget in USD
_ingested_atTIMESTAMPLast refresh timestamp

suse_budget_config_v2

ColumnTypeDescription
QuarterSTRINGFiscal quarter
StartDateDATEFirst day of quarter
EndDateDATELast day of quarter
_ingested_atTIMESTAMPLast refresh timestamp

SUSE fiscal year starts November 1:

  • Q1: Nov 1 - Jan 31
  • Q2: Feb 1 - Apr 30
  • Q3: May 1 - Jul 31 (or Aug 31)
  • Q4: Aug 1 - Oct 31 (or Sep 1 - Oct 31)

suse_budget_planned_final_v2

Quarterly planned budgets from the media plan. Multi-region rows are split evenly. One row per Platform × Region × Product × Quarter.

ColumnTypeDescription
PlatformSTRINGPlatform name with " Ads" suffix
RegionSTRINGSingle region after multi-region split
ProductLineSTRINGProduct line (e.g., AI, Linux, Edge)
ProductSTRINGProduct or campaign focus
QuarterSTRINGFiscal quarter
PlannedBudgetFLOAT64Planned budget in USD (split evenly if multi-region)
_ingested_atTIMESTAMPLast refresh timestamp

suse_budget_planned_monthly_v2

Monthly planned budgets for monthly drill-down pacing. Same multi-region split logic.

ColumnTypeDescription
PlatformSTRINGPlatform name with " Ads" suffix
RegionSTRINGSingle region after multi-region split
ProductLineSTRINGProduct line
ProductSTRINGProduct or campaign focus
QuarterSTRINGFiscal quarter
MonthDATEFirst day of month (e.g., 2025-11-01)
MonthLabelSTRINGMonth in YYYY-MM format
PlannedBudgetFLOAT64Monthly planned budget in USD
_ingested_atTIMESTAMPLast refresh timestamp

suse_budget_refresh_log_v2

ColumnTypeDescription
run_timestampTIMESTAMPWhen the refresh ran
table_nameSTRINGWhich table was refreshed
rows_writtenINT64Number of rows written
statusSTRINGSUCCESS or ERROR
error_messageSTRINGError details if failed
_ingested_atTIMESTAMPSame as run_timestamp

Refresh Logic

The budget refresh scheduled query runs daily and performs a full replace:

  1. DELETE FROM final WHERE TRUE (tables are tiny, < 30 rows)
  2. Read from external table (Google Sheet)
  3. UNPIVOT wide → long format
  4. Filter out TOTAL rows, note text, and empty rows
  5. INSERT into final table
  6. Log to refresh log

See Budget Pacing Workflow for full details.

SUSE Paid Advertising Data Warehouse V2