Skip to content

Feature support

The emulator is a preview (v0.x) project. Support is tracked across several complementary artifacts rather than a single markdown matrix.

Quick reference

Area Where to look What it covers
REST API endpoints REST API Per-method status: done, wired, todo
SQL execution routes Engine policy DuckDB fast path, semantic executor, stubs
Capability roadmap ROADMAP Milestone narrative and design rationale
Executable SQL truth Conformance ~170 YAML fixtures pinning query behavior
Client library parity Third-party harnesses Go, Python, Java, Node, DataFrames, dbt

REST API coverage

The gateway implements the BigQuery v2 REST surface end-to-end for the core resources (projects, datasets, tables, tabledata, jobs, queries, routines). Many ancillary surfaces (models, migration, data transfer, IAM custom methods) are wired stubs that return structurally-valid empty pages or 501 so client libraries probe successfully at startup.

See the full endpoint → handler mapping in REST API.

SQL & engine routes

Query execution dispatches through a route classifier. Each resolved AST shape lands on one of:

Route Role
duckdb_native Fast analytical path via DuckDB SQL
duckdb_udf / duckdb_rewrite BigQuery functions polyfilled in DuckDB
semantic_executor Exact BigQuery evaluation (NUMERIC, etc.)
control_op DDL / DML / catalog operations
local_stub Returns a documented stub response
unsupported Surfaces UNIMPLEMENTED to the client

Per-function and per-AST-node dispositions live in the engine source:

Benchmark support matrix

The bench harness compares query latency and correctness outcomes across three backends:

  • vantaboard — this emulator
  • goccygoccy/bigquery-emulator Docker 0.8.1
  • BigQuery — committed golden baselines

Per-case outcomes (ok, error, wrong_result, timeout, skipped) are recorded in bench/results.json. Latency and phase charts are embedded in the root README. Regenerate locally with task bench:run then task bench:charts.

Conformance fixtures

YAML fixtures under conformance/fixtures/ are the executable source of truth for SQL semantics. Each fixture can assert an expected engine route:

expected:
  route: duckdb_native
  match: ordered
  rows:
    - {n: 1}

Run the full suite:

task conformance:run

Generate a routing matrix artifact:

task conformance:routing-matrix

What is intentionally unsupported

  • Authentication / IAM — tokens accepted, never validated
  • BQML / trained models — list returns empty; mutations return 501
  • Row-level access policies — list returns empty; IAM methods return 501
  • Migration workflows — list returns empty; create/start return 501
  • Data Transfer Service — list returns empty; create returns 501
  • Legacy SQL dialect — only GoogleSQL (narrow bracket-ref translation for samples)

See Engine policy for the full route catalog and specialized feature families (ML, GIS, HLL, scripting, wildcards).