// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.cloud.metastore.v1alpha; import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/api/resource.proto"; import "google/cloud/metastore/v1alpha/metastore.proto"; import "google/longrunning/operations.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/timestamp.proto"; option go_package = "cloud.google.com/go/metastore/apiv1alpha/metastorepb;metastorepb"; option java_multiple_files = true; option java_outer_classname = "MetastoreFederationProto"; option java_package = "com.google.cloud.metastore.v1alpha"; // Configures and manages metastore federation services. // Dataproc Metastore Federation Service allows federating a collection of // backend metastores like BigQuery, Dataplex Lakes, and other Dataproc // Metastores. The Federation Service exposes a gRPC URL through which metadata // from the backend metastores are served at query time. // // The Dataproc Metastore Federation API defines the following resource model: // * The service works with a collection of Google Cloud projects. // * Each project has a collection of available locations. // * Each location has a collection of federations. // * Dataproc Metastore Federations are resources with names of the // form: // `projects/{project_number}/locations/{location_id}/federations/{federation_id}`. service DataprocMetastoreFederation { option (google.api.default_host) = "metastore.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; // Lists federations in a project and location. rpc ListFederations(ListFederationsRequest) returns (ListFederationsResponse) { option (google.api.http) = { get: "/v1alpha/{parent=projects/*/locations/*}/federations" }; option (google.api.method_signature) = "parent"; } // Gets the details of a single federation. rpc GetFederation(GetFederationRequest) returns (Federation) { option (google.api.http) = { get: "/v1alpha/{name=projects/*/locations/*/federations/*}" }; option (google.api.method_signature) = "name"; } // Creates a metastore federation in a project and location. rpc CreateFederation(CreateFederationRequest) returns (google.longrunning.Operation) { option (google.api.http) = { post: "/v1alpha/{parent=projects/*/locations/*}/federations" body: "federation" }; option (google.api.method_signature) = "parent,federation,federation_id"; option (google.longrunning.operation_info) = { response_type: "Federation" metadata_type: "google.cloud.metastore.v1alpha.OperationMetadata" }; } // Updates the fields of a federation. rpc UpdateFederation(UpdateFederationRequest) returns (google.longrunning.Operation) { option (google.api.http) = { patch: "/v1alpha/{federation.name=projects/*/locations/*/federations/*}" body: "federation" }; option (google.api.method_signature) = "federation,update_mask"; option (google.longrunning.operation_info) = { response_type: "Federation" metadata_type: "google.cloud.metastore.v1alpha.OperationMetadata" }; } // Deletes a single federation. rpc DeleteFederation(DeleteFederationRequest) returns (google.longrunning.Operation) { option (google.api.http) = { delete: "/v1alpha/{name=projects/*/locations/*/federations/*}" }; option (google.api.method_signature) = "name"; option (google.longrunning.operation_info) = { response_type: "google.protobuf.Empty" metadata_type: "google.cloud.metastore.v1alpha.OperationMetadata" }; } } // Represents a federation of multiple backend metastores. message Federation { option (google.api.resource) = { type: "metastore.googleapis.com/Federation" pattern: "projects/{project}/locations/{location}/federations/{federation}" }; // The current state of the federation. enum State { // The state of the metastore federation is unknown. STATE_UNSPECIFIED = 0; // The metastore federation is in the process of being created. CREATING = 1; // The metastore federation is running and ready to serve queries. ACTIVE = 2; // The metastore federation is being updated. It remains usable but cannot // accept additional update requests or be deleted at this time. UPDATING = 3; // The metastore federation is undergoing deletion. It cannot be used. DELETING = 4; // The metastore federation has encountered an error and cannot be used. The // metastore federation should be deleted. ERROR = 5; } // Immutable. The relative resource name of the federation, of the // form: // projects/{project_number}/locations/{location_id}/federations/{federation_id}`. string name = 1 [(google.api.field_behavior) = IMMUTABLE]; // Output only. The time when the metastore federation was created. google.protobuf.Timestamp create_time = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The time when the metastore federation was last updated. google.protobuf.Timestamp update_time = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; // User-defined labels for the metastore federation. map labels = 4; // Immutable. The Apache Hive metastore version of the federation. All backend // metastore versions must be compatible with the federation version. string version = 5 [(google.api.field_behavior) = IMMUTABLE]; // A map from `BackendMetastore` rank to `BackendMetastore`s from which the // federation service serves metadata at query time. The map key represents // the order in which `BackendMetastore`s should be evaluated to resolve // database names at query time and should be greater than or equal to zero. A // `BackendMetastore` with a lower number will be evaluated before a // `BackendMetastore` with a higher number. map backend_metastores = 6; // Output only. The federation endpoint. string endpoint_uri = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The current state of the federation. State state = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. Additional information about the current state of the // metastore federation, if available. string state_message = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The globally unique resource identifier of the metastore // federation. string uid = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Represents a backend metastore for the federation. message BackendMetastore { // The type of the backend metastore. enum MetastoreType { // The metastore type is not set. METASTORE_TYPE_UNSPECIFIED = 0; // The backend metastore is Dataplex. DATAPLEX = 1; // The backend metastore is BigQuery. BIGQUERY = 2; // The backend metastore is Dataproc Metastore. DATAPROC_METASTORE = 3; } // The relative resource name of the metastore that is being federated. // The formats of the relative resource names for the currently supported // metastores are listed below: // // * BigQuery // * `projects/{project_id}` // * Dataproc Metastore // * `projects/{project_id}/locations/{location}/services/{service_id}` string name = 1; // The type of the backend metastore. MetastoreType metastore_type = 2; } // Request message for ListFederations. message ListFederationsRequest { // Required. The relative resource name of the location of metastore // federations to list, in the following form: // `projects/{project_number}/locations/{location_id}`. string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { child_type: "metastore.googleapis.com/Federation" } ]; // Optional. The maximum number of federations to return. The response may // contain less than the maximum number. If unspecified, no more than 500 // services are returned. The maximum value is 1000; values above 1000 are // changed to 1000. int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; // Optional. A page token, received from a previous ListFederationServices // call. Provide this token to retrieve the subsequent page. // // To retrieve the first page, supply an empty page token. // // When paginating, other parameters provided to // ListFederationServices must match the call that provided the // page token. string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; // Optional. The filter to apply to list results. string filter = 4 [(google.api.field_behavior) = OPTIONAL]; // Optional. Specify the ordering of results as described in [Sorting // Order](https://cloud.google.com/apis/design/design_patterns#sorting_order). // If not specified, the results will be sorted in the default order. string order_by = 5 [(google.api.field_behavior) = OPTIONAL]; } // Response message for ListFederations message ListFederationsResponse { // The services in the specified location. repeated Federation federations = 1; // A token that can be sent as `page_token` to retrieve the next page. If this // field is omitted, there are no subsequent pages. string next_page_token = 2; // Locations that could not be reached. repeated string unreachable = 3; } // Request message for GetFederation. message GetFederationRequest { // Required. The relative resource name of the metastore federation to // retrieve, in the following form: // // `projects/{project_number}/locations/{location_id}/federations/{federation_id}`. string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "metastore.googleapis.com/Federation" } ]; } // Request message for CreateFederation. message CreateFederationRequest { // Required. The relative resource name of the location in which to create a // federation service, in the following form: // // `projects/{project_number}/locations/{location_id}`. string parent = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { child_type: "metastore.googleapis.com/Federation" } ]; // Required. The ID of the metastore federation, which is used as the final // component of the metastore federation's name. // // This value must be between 2 and 63 characters long inclusive, begin with a // letter, end with a letter or number, and consist of alpha-numeric // ASCII characters or hyphens. string federation_id = 2 [(google.api.field_behavior) = REQUIRED]; // Required. The Metastore Federation to create. The `name` field is // ignored. The ID of the created metastore federation must be // provided in the request's `federation_id` field. Federation federation = 3 [(google.api.field_behavior) = REQUIRED]; // Optional. A request ID. Specify a unique request ID to allow the server to // ignore the request if it has completed. The server will ignore subsequent // requests that provide a duplicate request ID for at least 60 minutes after // the first request. // // For example, if an initial request times out, followed by another request // with the same request ID, the server ignores the second request to prevent // the creation of duplicate commitments. // // The request ID must be a valid // [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format) // A zero UUID (00000000-0000-0000-0000-000000000000) is not supported. string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; } // Request message for UpdateFederation. message UpdateFederationRequest { // Required. A field mask used to specify the fields to be overwritten in the // metastore federation resource by the update. // Fields specified in the `update_mask` are relative to the resource (not // to the full request). A field is overwritten if it is in the mask. google.protobuf.FieldMask update_mask = 1 [(google.api.field_behavior) = REQUIRED]; // Required. The metastore federation to update. The server only merges fields // in the service if they are specified in `update_mask`. // // The metastore federation's `name` field is used to identify the // metastore service to be updated. Federation federation = 2 [(google.api.field_behavior) = REQUIRED]; // Optional. A request ID. Specify a unique request ID to allow the server to // ignore the request if it has completed. The server will ignore subsequent // requests that provide a duplicate request ID for at least 60 minutes after // the first request. // // For example, if an initial request times out, followed by another request // with the same request ID, the server ignores the second request to prevent // the creation of duplicate commitments. // // The request ID must be a valid // [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format) // A zero UUID (00000000-0000-0000-0000-000000000000) is not supported. string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; } // Request message for DeleteFederation. message DeleteFederationRequest { // Required. The relative resource name of the metastore federation to delete, // in the following form: // // `projects/{project_number}/locations/{location_id}/federations/{federation_id}`. string name = 1 [ (google.api.field_behavior) = REQUIRED, (google.api.resource_reference) = { type: "metastore.googleapis.com/Federation" } ]; // Optional. A request ID. Specify a unique request ID to allow the server to // ignore the request if it has completed. The server will ignore subsequent // requests that provide a duplicate request ID for at least 60 minutes after // the first request. // // For example, if an initial request times out, followed by another request // with the same request ID, the server ignores the second request to prevent // the creation of duplicate commitments. // // The request ID must be a valid // [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format) // A zero UUID (00000000-0000-0000-0000-000000000000) is not supported. string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; }