Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
6de22cd to
db132eb
Compare
1854508 to
7066e38
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
9895258 to
6ddab6c
Compare
| BIGQUERY_TEST_PROJECT_ID: ${{ secrets.BIGQUERY_TEST_PROJECT_ID }} | ||
| BIGQUERY_TEST_CREDENTIALS_JSON: ${{ secrets.BIGQUERY_TEST_CREDENTIALS_JSON }} |
There was a problem hiding this comment.
We need some BQ creds for the CI
ff4df4a to
f6259ff
Compare
b4b2bf4 to
852176a
Compare
|
Both table creation modes work end-to-end against my own BQ project.
What this PR addsExample (
Core (
CI (
BigQuery Alembic workarounds in
|
| Issue | Workaround |
|---|---|
CREATE INDEX not supported |
include_object callback skips index/constraint generation |
sa.JSON() → JSON column but Ibis writes STRUCT |
_patch_bigquery_types() rewrites JSON→STRUCT using feature field names |
DateTime(timezone=True) → DATETIME but Ibis writes TIMESTAMP |
Same helper rewrites to sa.TIMESTAMP |
| Reflection crash on system tables | include_name scopes reflection to feature tables only |
These workarounds live entirely in the example, not in Metaxy core. Upstream fix for sa.JSON() compilation submitted: googleapis/google-cloud-python#16124
0a0d0f9 to
1f6c23e
Compare
|
cleaned up as discussed - secrets are needed now. |
049099f to
b65a7fc
Compare
There was a problem hiding this comment.
Pull request overview
Adds BigQuery “native” integration testing support and tightens BigQuery store configuration/initialization behavior, along with CI wiring to run BigQuery tests when credentials are available.
Changes:
- Introduces BigQuery integration test fixtures and a shared test-suite-based BigQuery test class.
- Makes
dataset_idrequired (config + runtime validation) and adds asqlalchemy_urlconvenience property. - Updates CI workflows and pytest markers to support gated BigQuery live tests.
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/ext/bigquery/test_native.py | Adds shared integration test suite coverage for BigQuery; refactors/extends existing unit tests. |
| tests/ext/bigquery/conftest.py | Adds environment-gated BigQuery fixtures to create/delete ephemeral datasets. |
| src/metaxy/ext/metadata_stores/bigquery.py | Requires dataset_id, tightens init validation, adds sqlalchemy_url, adjusts docs and display output. |
| pyproject.toml | Adds bigquery pytest marker description. |
| devenv.lock | Updates Nix inputs/lock entries (git-hooks, flake-compat, etc.). |
| .github/workflows/_qa.yml | Adds optional BQ secrets and writes SA JSON to a temp credentials file for tests. |
| .github/workflows/main.yml | Passes BigQuery secrets through to the reusable QA workflow. |
| .github/workflows/release.yml | Passes BigQuery secrets through to the reusable QA workflow. |
| .github/workflows/Pull Request.yml | Passes BigQuery secrets through to the reusable QA workflow. |
Comments suppressed due to low confidence (1)
src/metaxy/ext/metadata_stores/bigquery.py:133
- When
connection_paramsis provided alongside explicitproject_id/dataset_id,self.project_id/self.dataset_idare derived from the explicit args (due to theor), but the actual backend connection uses the unmodifiedconnection_params. If they differ,display()/sqlalchemy_urlcan report a different project/dataset than the one actually used for connections. Fix by either (a) enforcing consistency (raiseValueErrorif both are provided and mismatch) or (b) overridingconnection_params['project_id']/connection_params['dataset_id']with the resolved values before callingsuper().__init__.
super().__init__(
backend="bigquery",
connection_params=connection_params,
fallback_stores=fallback_stores,
**kwargs,
)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
b65a7fc to
633beec
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 9 changed files in this pull request and generated 5 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
633beec to
e0f115d
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 8 out of 9 changed files in this pull request and generated 3 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
d592795 to
1387fb6
Compare
1387fb6 to
c65bb76
Compare
c65bb76 to
6933f01
Compare
6933f01 to
bcc7220
Compare
42491d9 to
77b70bf
Compare
bcc7220 to
43bc777
Compare
Production-grade BigQuery metadata store example with SQLModel features and dual-track Alembic migrations (system + feature tables). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
43bc777 to
3f037cf
Compare

Summary
Changelog
Test Plan