BigQuery Emulator Coverage
Support legend
| Status | Meaning |
|---|---|
| Supported | Provides Functional and API Parity to BigQuery production capabilities. |
| Supported* | Exposes & accepts but may not enforce everywhere like partitioning. |
| Not supported | Unsupported, cloud-only, outside emulator scope, has no dev impact. |
Support summary
| Area | Status | What this means for developers |
|---|---|---|
| Core SQL query language | Supported | Common SELECT / FROM / WHERE / JOIN / GROUP BY / window / set-operation workflows execute locally through SQLGlot and DuckDB. |
| Advanced grouping | Supported | GROUP BY ALL, ROLLUP, CUBE, GROUPING SETS, and GROUPING() have representative positive execution tests. |
| Pipe syntax | Supported | Tested cases work when SQLGlot and DuckDB accept the syntax. Full pipe grammar coverage is not claimed. |
| DDL and DML | Supported | Common table, view, materialized-view, external-table DDL and INSERT / UPDATE / DELETE / MERGE workflows execute locally. |
| Constraints and column defaults | Supported* | Constraint and default declarations are parsed and exposed through INFORMATION_SCHEMA. Constraint enforcement and default injection across all write paths are not claimed. |
| Table functions | Supported | Scalar-parameter table functions execute as DuckDB table macros and appear in routine metadata. Table parameters and full BigQuery routine semantics are not claimed. |
| Search and vector indexes | Supported* | Index DDL is accepted and index metadata is exposed. Query acceleration and index-backed planning are not implemented. |
SEARCH and VECTOR_SEARCH | Supported | SEARCH has local case-insensitive matching; VECTOR_SEARCH has brute-force local array embedding search. |
| RANGE functions | Supported | RANGE literals, types, predicates, GENERATE_RANGE_ARRAY, and a local RANGE_SESSIONIZE path cover common local tests. |
| Scripting and procedural SQL | Supported | Variables, control flow, dynamic SQL, transactions, procedures, and RETURN have tests. |
| REST API core resources | Supported | Projects, datasets, tables, tabledata, query jobs, load/copy/extract jobs, and common metadata shapes are usable for local clients. |
| IAM, row policies, grants, and revokes | Supported* | Accepted or permissive responses support local client compatibility. Real security enforcement is not implemented. |
| Storage Read and Write APIs | Supported | Read sessions, rows, splitting, and AppendRows ingestion for committed, pending, and buffered streams are tested. |
| Local load, export, and external data | Supported | Local CSV, JSON, Parquet, common CSV options, copy/extract, and deterministic wildcard export workflows are supported. |
| Built-in functions | Supported | A large tested subset of GoogleSQL functions is available through DuckDB, SQL rewrites, macros, and Python UDFs. |
INFORMATION_SCHEMA | Supported | Common views and local metadata-backed rows are available. |
| Operational and control-plane systems | Not supported | Slots, reservations, BI Engine, scheduled queries, quotas, billing, audit logging, and production auth are cloud-control-plane features and are outside emulator scope. |
SQL, DDL, and DML
| Area | Status | Covered by tests | Limits from the report |
|---|---|---|---|
| Query language | Supported | Literals, *, aliases, expressions, DISTINCT, null handling, SELECT * EXCEPT, SELECT * REPLACE, SELECT AS STRUCT, SELECT AS VALUE, table references, subqueries, UNNEST, filters, grouping, ordering, joins, CTEs, recursive CTEs, set operations, correlated subqueries, QUALIFY, PIVOT, UNPIVOT, TABLESAMPLE, windows, arrays, structs, casts, conditionals, named parameters, wildcard tables, and _TABLE_SUFFIX. | Some syntax variants are covered only by rewrite checks or single representative examples. Collation, time travel, and differential privacy behavior are narrow or non-production. |
| Advanced grouping | Supported | GROUP BY ALL, GROUPING SETS, ROLLUP, CUBE, and GROUPING(). | Exhaustive BigQuery edge and error parity is not claimed. |
| Pipe syntax | Supported | Tested pipe patterns that SQLGlot and DuckDB accept. | No broader pipe-syntax matrix is present. |
| DDL | Supported | CREATE TABLE, IF NOT EXISTS, OR REPLACE, partition and cluster metadata extraction, table options, CREATE TABLE AS SELECT, LIKE, COPY, CLONE, snapshot clone as data copy, views, materialized views and refresh, external tables, ALTER TABLE, DROP, TRUNCATE, SQL UDFs, procedures, scalar table functions, local LOAD DATA, and local EXPORT DATA. | Remote functions, user-defined Python UDFs, aggregate UDFs, Spark procedures, authorized views/datasets, policy-tag enforcement, true snapshot/time-travel semantics, schema evolution options, and BigLake object-table metadata are not supported. |
| DML | Supported | INSERT VALUES, INSERT SELECT, UPDATE, DELETE, and MERGE with matched and not-matched branches. | DML quotas, streaming-buffer constraints, production partition-specific DML behavior, exact transactional edge cases, complex MERGE combinations, and nested/repeated field mutation semantics are not developer-supported by test evidence. |
| Constraints and defaults | Supported* | Primary key, foreign key, check constraint, and column default declarations are exposed through metadata. | Enforcement, optimizer use, and default value injection across every write path are not implemented or not covered. |
| Search and vector indexes | Supported* | CREATE SEARCH INDEX and CREATE VECTOR INDEX expose indexed columns, options, DDL text, and status rows through INFORMATION_SCHEMA. | Query acceleration and production index behavior are not implemented. |
Scripting and procedures
| Area | Status | Covered by tests | Limits from the report |
|---|---|---|---|
| Procedural SQL | Supported | DECLARE, SET, variable interpolation, IF, ELSEIF, ELSE, WHILE, LOOP, BREAK, CONTINUE, FOR ... IN, REPEAT ... UNTIL, LEAVE, ITERATE, exception blocks, RAISE USING MESSAGE, EXECUTE IMMEDIATE, transactions, procedures, CALL, @@project_id, @@row_count, ASSERT, EXECUTE IMMEDIATE INTO/USING, and RETURN. | Stored procedure authorization and production sessions are unsupported. Procedure OUT/INOUT parameters, nested exception metadata, and complete system-variable coverage have no test evidence. |
| Table functions | Supported | Scalar-parameter table functions are registered and queried as DuckDB table macros, with routine and parameter metadata. | Table parameters, ANY TYPE table-function behavior, and complete BigQuery routine semantics are not claimed. |
APIs and metadata
| Area | Status | Covered by tests | Limits from the report |
|---|---|---|---|
| REST API | Supported | Projects list, service account endpoint, dataset CRUD, table CRUD, table metadata, external table API creation, partition/cluster metadata reporting, tabledata.insertAll, tabledata.list, synchronous query endpoint, dry runs, named parameters, pagination, error formatting, query jobs, load jobs, copy jobs, extract jobs, routines metadata, discovery endpoint, and /bigquery/v2 prefix routing. | Real cancellation side effects, reservations integration, dataset/table IAM enforcement, encryption configuration, cloud transfer APIs, full routine CRUD semantics, schema patch edge cases, and production resources outside the tested subset are not supported by evidence. |
| Storage Read API | Supported | CreateReadSession and ReadRows for AVRO and ARROW, row restriction filtering, and SplitReadStream disjoint range reads. | Production permission behavior, throttling, snapshots, selected fields, compression, full schema details, and additional stream error paths are not claimed. |
| Storage Write API | Supported | CreateWriteStream, FinalizeWriteStream, BatchCommitWriteStreams, descriptor-based AppendRows, committed-stream inserts, valid offsets, pending stream commit visibility, buffered stream flush visibility, and invalid offset handling. | Service-level exactly-once guarantees, schema evolution, multiplexing, compression, and additional stream errors are not claimed. |
INFORMATION_SCHEMA | Supported | COLUMNS, TABLES, SCHEMATA, PARTITIONS, VIEWS, ROUTINES, TABLE_OPTIONS, TABLE_STORAGE, JOBS_BY_USER, JOBS_BY_PROJECT, COLUMN_FIELD_PATHS, constraints/default metadata, table-function metadata, parameters, JOBS_TIMELINE, and search/vector index metadata. | Permission-filtered results, production reservation details, BI Engine capacities, audit-grade job statistics, full catalog breadth, region/project scoping, historical timelines, and change history are not claimed. |
| Operational metadata views | Supported* | OBJECT_PRIVILEGES, session views, assignment/reservation views, capacity commitment changes, STREAMING_TIMELINE, BI_CAPACITIES, and EFFECTIVE_PROJECT_OPTIONS exist with schemas or empty rows. | These are compatibility surfaces, not production metadata. |
Data, types, and functions
| Area | Status | Covered by tests | Limits from the report |
|---|---|---|---|
| External data, load, export, and copy | Supported | External Parquet, CSV, JSON tables from local files; Parquet wildcard globs; filters, aggregates, declared schema, joins; local URI resolution; GCS URI resolution with emulator configuration; S3 URI passthrough; local CSV LOAD DATA; local CSV/Parquet EXPORT DATA; REST load/copy/extract jobs; common CSV options; deterministic single-shard wildcard export; YAML fixture loading. | Datastore/Firestore exports, Google Sheets, Bigtable, BigLake, Iceberg, object tables, managed disaster recovery, destination encryption, cross-cloud connection auth, Avro/ORC paths, full Cloud Storage sharding/compression, external partitions, bad-record limits, full autodetect parity, and schema update options are not supported by evidence. |
| Types and values | Supported | BigQuery/DuckDB type mapping, schema conversion, value conversion, BIGNUMERIC arithmetic helpers, 76-digit precision UDF path, RANGE literal/type storage, range predicates, GENERATE_RANGE_ARRAY, and local RANGE_SESSIONIZE. | ObjectRef, policy-tag enforcement, exact BigQuery GEOGRAPHY spherical semantics, parameterized type edge cases, rounding modes, overflow parity, additional RANGE_SESSIONIZE modes, non-DATE GENERATE_RANGE_ARRAY, and complete nested/repeated JSON API parity are not claimed. |
| Built-in functions | Supported | Tested aggregate, approximate, HLL, string/bytes, math/statistical, date/time, JSON, array, RANGE, hash, format, AEAD helper, search, vector, session/system, NET.*, and broad ST_* geography function families. | BigQuery AI/ML functions, remote functions, DLP functions, KLL_QUANTILES, ObjectRef functions, production search/vector acceleration, deterministic AEAD variants, key rotation/wrapping functions, full search analyzers, full vector distance/query-shape parity, complete range edge parity, and untested geography functions are not supported by evidence. |
Explicit non-production behavior
The report calls out these behaviors as tested but not production BigQuery functionality:
| Area | Status | Tested behavior |
|---|---|---|
| BigQuery ML | Not supported | CREATE MODEL, CREATE OR REPLACE MODEL, ML.PREDICT, and ML.EVALUATE return clear unsupported errors. |
| REST models | Supported* | Model list is empty; get, patch, and delete are not-implemented stubs. |
| IAM policy endpoints | Supported* | Endpoints return permissive/default stub responses. |
| Row access policies | Supported* | Create/drop/list behavior is accepted or stubbed, but enforcement is not tested. |
| Grants and revokes | Supported* | GRANT and REVOKE are accepted no-op stubs. |
| Differential privacy | Not supported | The clause is stripped; no noise or privacy guarantee is tested. |
| Time travel | Not supported | FOR SYSTEM_TIME AS OF is stripped and returns current data. |
| Snapshot table clone | Supported* | Tested as data copy, not BigQuery historical snapshot storage. |
ST_CLUSTERDBSCAN | Not supported | Registered only as an unsupported stub. |
Unsupported product areas
| Area | Status | What to expect |
|---|---|---|
| BigQuery ML lifecycle and inference | Not supported | Training, evaluation, prediction, forecasting, model metadata, Vertex AI integrations, and AI functions are unsupported. |
| Security enforcement | Not supported | IAM, dataset/table ACLs, authorized views/datasets, row-level security filters, column-level security policy tags, and data masking are unsupported. |
| Scheduling and transfers | Not supported | Scheduled queries and BigQuery Data Transfer Service orchestration are unsupported. |
| BI Engine | Not supported | BI Engine acceleration, preferred tables, BI capacities, and acceleration statistics are unsupported. |
| Reservations and workload management | Not supported | Reservations, slots, assignments, capacity commitments, editions, and workload management behavior are unsupported. |
| Other high-impact product features | Not supported | BigQuery Graph, continuous queries, saved queries, production sessions, managed disaster recovery, cross-region replication, and change history are unsupported. |
| Advanced SQL/product gaps | Not supported | MATCH_RECOGNIZE, remote functions, non-SQL UDF runtimes, object tables, ObjectRef, DLP functions, KLL functions, generated columns if applicable, schema policy tags, table expiration enforcement, partition expiration enforcement, clustering performance semantics, authorized views/datasets, and routine authorization are unsupported. |
| Operational semantics | Not supported | Quota enforcement, billing bytes, slot accounting, result cache parity, audit logging, region restrictions, and production-grade auth are unsupported. |
Developer workflow coverage
Based on the tested areas above, the emulator is suited for local workflows that need to:
- Write and execute common GoogleSQL query shapes locally.
- Exercise DDL, DML, routines, table functions, procedures, and scripting flows in tests.
- Load local CSV/JSON/Parquet fixtures and query external local data.
- Run SDK-backed REST and Storage API integration paths against local endpoints.
- Inspect common
INFORMATION_SCHEMAviews and local metadata-backed rows. - Persist datasets, tables, schemas, and row data across tested restart scenarios.
The coverage report’s framing is the important boundary: this is developer-environment support for small local tests and CI, not a production implementation parity claim. Managed-service behavior, security enforcement, quotas, billing, reservations, BI Engine, audit logging, production auth, and untested edge semantics are outside the supported evidence base.
Test cases coverage & evidence
Report Date | 2026-04-26
| Evidence | Current finding |
|---|---|
| Pytest collection | 936 collected tests across 25 test_*.py modules |
| Static inventory | 927 Python test functions, with parameterized cases expanding to 936 collected tests |
| Test Results | .venv/bin/pytest -q -> 932 passed, 4 skipped |
| Quality bar | Developer-environment quality for small local tests and CI, not production implementation parity |
Evidence model
The coverage report separates positive behavior from compatibility stubs:
| Evidence type | Meaning |
|---|---|
| Execution coverage | A test transpiles and executes behavior against DuckDB, REST, or gRPC. |
| Transpile coverage | A test proves SQL rewriting or parsing only, not execution. |
| API coverage | A test proves a REST or gRPC endpoint contract. |
| Stub coverage | A test proves a clear no-op, empty response, or unsupported error, not production behavior. |
| No test evidence | No positive test currently proves developer-quality support. |
The report describes the emulator as using DuckDB, SQL rewrites, local files, Python UDFs, and metadata tables rather than BigQuery’s distributed production internals.