feat(bigquery): add internal listProjects API to core client#13429
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces the ability to list Google Cloud Projects accessible to the caller. It adds a new Project model class, a ProjectListOption class for pagination options, and the listProjects method to the BigQuery interface and its implementation BigQueryImpl. It also updates the underlying RPC layer (BigQueryRpc and HttpBigQueryRpc) to support the new API call with OpenTelemetry tracing, and includes corresponding unit tests. There are no review comments to address.
| this.id = id; | ||
| this.numericId = numericId; | ||
| this.projectId = projectId; |
There was a problem hiding this comment.
qq, what is the difference between id, numericId, and projectId?
From the link (https://docs.cloud.google.com/bigquery/docs/reference/rest/v2/projects/list), I see id and numericId, but not projectId
There was a problem hiding this comment.
In the underlying REST API representation of a project (which maps to the client's ProjectList.Projects class):
id: The top-level resource ID.numericId: The unique numeric project number (e.g.,123456789012).projectId: Extracted from the nestedprojectReference.projectIdobject (e.g.,my-project-id), which is what other BigQuery APIs use to reference this project.
|
|
||
| /** Class for specifying project list options. */ | ||
| class ProjectListOption extends Option { | ||
| private static final long serialVersionUID = 1L; |
There was a problem hiding this comment.
I don't think this should be too impactful otherwise, but you can have intellij autogenerate a value for this?
| * @param options options for listing projects | ||
| * @return a page of projects | ||
| */ | ||
| @InternalApi |
There was a problem hiding this comment.
hmm, I think this is an offical BigQuery api (https://docs.cloud.google.com/bigquery/docs/reference/rest/v2/projects/list) and we probably don't need to add InternalApi here.
There was a problem hiding this comment.
Yeah, okay. Changed it to @BetaApi
| Tuple<String, Iterable<ProjectList.Projects>> result = | ||
| serviceOptions.getBigQueryRpcV2().listProjects(optionsMap); |
There was a problem hiding this comment.
qq, do you need retries for this?
Something similar to
There was a problem hiding this comment.
Yeah, good catch. I'll add it
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces support for listing Google BigQuery projects by adding the new Project model, ProjectListOption configuration, and the listProjects API method to the BigQuery service and its RPC implementation. Unit tests have also been added to verify the new functionality. The reviewer suggested improving null safety in the new Project class by annotating the nullable getter methods (getNumericId, getProjectId, and getFriendlyName) with @Nullable.
b/521443900
This PR introduces support for fetching a list of GCP projects via the BigQuery API. This functionality is being exposed primarily to support cross-project dataset resolution in the native BigQuery JDBC driver.
Changes included:
Projectdomain model representing a BigQuery project (@BetaApi).listProjects(ProjectListOption... options)to theBigQueryclient interface, marked as@InternalApito preserve the public GA surface.listProjectsmapping toBigQueryRpcand implemented the underlying HTTP execution inHttpBigQueryRpc, including pagination and OpenTelemetry tracing support.ProjectPageFetcherinsideBigQueryImplto seamlessly handle paginated project results.BigQueryImplTestandHttpBigQueryRpcTest.