google/cloud-bigquery-reservation
Idiomatic PHP client for Google BigQuery Reservation. Install with composer require google/cloud-bigquery-reservation. Supports REST over HTTP/1.1 and gRPC, with authentication and debugging guides. Part of Google Cloud PHP and generally available.
Autoscale.max_slots and ScalingMode, and expose per-team spend attribution. This is the difference between "our BigQuery bill is a surprise every month" and a forecastable line item.Assignment objects (project, folder, organization, and now principal-scoped) let you ship tiered service levels: interactive dashboards on a BI reservation, ETL on a batch reservation, ad-hoc analyst queries on a sandbox reservation. This directly supports an internal SLA or platform-as-a-product offering.CapacityCommitment (with is_flat_rate, commitment_start_time/commitment_end_time, renewal semantics) is the data model for a renewal-and-expiry cockpit. A PM can turn a 1-year commitment calendar into a proactive alerting feature that avoids expensive auto-renewals or capacity cliffs.replication_status, soft_failover_start_time, and the managed DR APIs allow a "failover readiness" dashboard — a compliance-friendly artifact that is otherwise hard to produce.CreateReservation / UpdateReservation / CreateAssignment turn a ticket-driven, console-driven ops task into an in-app request-and-approve flow with an audit trail.Explicitly out of scope for this package: querying data, job monitoring, slot-utilization timeseries, and query cost estimation. Those live in the BigQuery data client, INFORMATION_SCHEMA.JOBS, and Cloud Monitoring. Do not let a roadmap item conflate them.
Good fit when most of these hold:
Look elsewhere when:
google/cloud-bigquery plus INFORMATION_SCHEMA views. This package will not tell you what a query cost.google_bigquery_reservation provider is the better tool for steady-state configuration. Use this SDK for runtime decisions (autoscaling caps, temporary grants, failover), not for defining the estate.credentials client option and the enable_gemini_in_bigquery field. Pin versions and test upgrades deliberately.For executives — one paragraph. BigQuery is likely one of our largest and least controllable cloud costs. This package is the officially maintained, Apache-2.0, generally available PHP client for Google's BigQuery slot-reservation API, and it lets us move capacity management out of the GCP console and into our own systems. That means committed-spend visibility before renewal dates, hard caps on autoscaling so a runaway query cannot inflate a bill, per-team slot allocation with an audit trail, and a live view of disaster-recovery readiness. It is a low-cost enabler — free, small, and maintained by Google — with the real investment being a modest internal policy and UI layer we would have to build on any cloud SDK.
For engineering — the practical case. It is a thin, strongly typed generated client over the V1 Reservation API, supporting both REST and gRPC, installable with a single Composer require. It fits Laravel cleanly: bind ReservationServiceClient in a service provider, wrap operations in a small domain service behind an interface so we can fake it in tests, and push mutation workflows onto queued jobs with retries. Errors surface as ApiException and responses serialize to JSON for logging, which keeps observability straightforward.
For engineering — the honest caveats. Community surface is effectively zero (3 stars, no dependents), so we own the integration and any abstractions ourselves. The API is generated, so major-version bumps can break us — pin the constraint, subscribe to release notes, and keep all client calls inside one adapter. It also requires solid GCP credentials hygiene from day one. None of these are unusual for a cloud SDK, but they are real and should be in the estimate.
Recommendation. Adopt only if we are already committed to BigQuery slot capacity and have at least one of: multi-team allocation needs, a cost-governance initiative, or a DR requirement. If we are on-demand BigQuery, defer — this package would be a dependency with no user-facing outcome.
How can I help you explore Laravel packages today?