// 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.bigquery.v2; import "google/api/annotations.proto"; import "google/api/client.proto"; import "google/api/field_behavior.proto"; import "google/cloud/bigquery/v2/dataset_reference.proto"; import "google/cloud/bigquery/v2/encryption_config.proto"; import "google/cloud/bigquery/v2/external_catalog_dataset_options.proto"; import "google/cloud/bigquery/v2/external_dataset_reference.proto"; import "google/cloud/bigquery/v2/restriction_config.proto"; import "google/cloud/bigquery/v2/routine_reference.proto"; import "google/cloud/bigquery/v2/table_reference.proto"; import "google/cloud/bigquery/v2/table_schema.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option go_package = "cloud.google.com/go/bigquery/apiv2/bigquerypb;bigquerypb"; option java_outer_classname = "DatasetProto"; option java_package = "com.google.cloud.bigquery.v2"; // This is an experimental RPC service definition for the BigQuery // Dataset Service. // // It should not be relied on for production use cases at this time. service DatasetService { option (google.api.default_host) = "bigquery.googleapis.com"; option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/bigquery," "https://www.googleapis.com/auth/cloud-platform," "https://www.googleapis.com/auth/cloud-platform.read-only"; // Returns the dataset specified by datasetID. rpc GetDataset(GetDatasetRequest) returns (Dataset) { option (google.api.http) = { get: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}" }; } // Creates a new empty dataset. rpc InsertDataset(InsertDatasetRequest) returns (Dataset) { option (google.api.http) = { post: "/bigquery/v2/projects/{project_id=*}/datasets" body: "dataset" }; } // Updates information in an existing dataset. The update method replaces the // entire dataset resource, whereas the patch method only replaces fields that // are provided in the submitted dataset resource. // This method supports RFC5789 patch semantics. rpc PatchDataset(UpdateOrPatchDatasetRequest) returns (Dataset) { option (google.api.http) = { patch: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}" body: "dataset" }; } // Updates information in an existing dataset. The update method replaces the // entire dataset resource, whereas the patch method only replaces fields that // are provided in the submitted dataset resource. rpc UpdateDataset(UpdateOrPatchDatasetRequest) returns (Dataset) { option (google.api.http) = { put: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}" body: "dataset" }; } // Deletes the dataset specified by the datasetId value. Before you can delete // a dataset, you must delete all its tables, either manually or by specifying // deleteContents. Immediately after deletion, you can create another dataset // with the same name. rpc DeleteDataset(DeleteDatasetRequest) returns (google.protobuf.Empty) { option (google.api.http) = { delete: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}" }; } // Lists all datasets in the specified project to which the user has been // granted the READER dataset role. rpc ListDatasets(ListDatasetsRequest) returns (DatasetList) { option (google.api.http) = { get: "/bigquery/v2/projects/{project_id=*}/datasets" }; } // Undeletes a dataset which is within time travel window based on datasetId. // If a time is specified, the dataset version deleted at that time is // undeleted, else the last live version is undeleted. rpc UndeleteDataset(UndeleteDatasetRequest) returns (Dataset) { option (google.api.http) = { post: "/bigquery/v2/projects/{project_id=*}/datasets/{dataset_id=*}:undelete" body: "*" }; } } // Grants all resources of particular types in a particular dataset read access // to the current dataset. // // Similar to how individually authorized views work, updates to any resource // granted through its dataset (including creation of new resources) requires // read permission to referenced resources, plus write permission to the // authorizing dataset. message DatasetAccessEntry { // Indicates the type of resources in a dataset that the entry applies to. enum TargetType { // Do not use. You must set a target type explicitly. TARGET_TYPE_UNSPECIFIED = 0; // This entry applies to views in the dataset. VIEWS = 1; // This entry applies to routines in the dataset. ROUTINES = 2; } // The dataset this entry applies to DatasetReference dataset = 1; // Which resources in the dataset this entry applies to. Currently, only // views are supported, but additional target types may be added in the // future. repeated TargetType target_types = 2; } // An object that defines dataset access for an entity. message Access { // An IAM role ID that should be granted to the user, group, // or domain specified in this access entry. // The following legacy mappings will be applied: // // * `OWNER`: `roles/bigquery.dataOwner` // * `WRITER`: `roles/bigquery.dataEditor` // * `READER`: `roles/bigquery.dataViewer` // // This field will accept any of the above formats, but will return only // the legacy format. For example, if you set this field to // "roles/bigquery.dataOwner", it will be returned back as "OWNER". string role = 1; // [Pick one] An email address of a user to grant access to. For example: // fred@example.com. Maps to IAM policy member "user:EMAIL" or // "serviceAccount:EMAIL". string user_by_email = 2; // [Pick one] An email address of a Google Group to grant access to. // Maps to IAM policy member "group:GROUP". string group_by_email = 3; // [Pick one] A domain to grant access to. Any users signed in with the domain // specified will be granted the specified access. Example: "example.com". // Maps to IAM policy member "domain:DOMAIN". string domain = 4; // [Pick one] A special group to grant access to. Possible values include: // // * projectOwners: Owners of the enclosing project. // * projectReaders: Readers of the enclosing project. // * projectWriters: Writers of the enclosing project. // * allAuthenticatedUsers: All authenticated BigQuery users. // // Maps to similarly-named IAM members. string special_group = 5; // [Pick one] Some other type of member that appears in the IAM Policy but // isn't a user, group, domain, or special group. string iam_member = 7; // [Pick one] A view from a different dataset to grant access to. Queries // executed against that view will have read access to views/tables/routines // in this dataset. // The role field is not required when this field is set. If that view is // updated by any user, access to the view needs to be granted again via an // update operation. TableReference view = 6; // [Pick one] A routine from a different dataset to grant access to. Queries // executed against that routine will have read access to // views/tables/routines in this dataset. Only UDF is supported for now. // The role field is not required when this field is set. If that routine is // updated by any user, access to the routine needs to be granted again via // an update operation. RoutineReference routine = 8; // [Pick one] A grant authorizing all resources of a particular type in a // particular dataset access to this dataset. Only views are supported for // now. The role field is not required when this field is set. If that dataset // is deleted and re-created, its access needs to be granted again via an // update operation. DatasetAccessEntry dataset = 9; } // Represents a BigQuery dataset. message Dataset { // Indicates the billing model that will be applied to the dataset. enum StorageBillingModel { // Value not set. STORAGE_BILLING_MODEL_UNSPECIFIED = 0; // Billing for logical bytes. LOGICAL = 1; // Billing for physical bytes. PHYSICAL = 2; } // Output only. The resource type. string kind = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. A hash of the resource. string etag = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The fully-qualified unique name of the dataset in the format // projectId:datasetId. The dataset name without the project name is given in // the datasetId field. When creating a new dataset, leave this field blank, // and instead specify the datasetId field. string id = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. A URL that can be used to access the resource again. You can // use this URL in Get or Update requests to the resource. string self_link = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; // Required. A reference that identifies the dataset. DatasetReference dataset_reference = 5 [(google.api.field_behavior) = REQUIRED]; // Optional. A descriptive name for the dataset. google.protobuf.StringValue friendly_name = 6 [(google.api.field_behavior) = OPTIONAL]; // Optional. A user-friendly description of the dataset. google.protobuf.StringValue description = 7 [(google.api.field_behavior) = OPTIONAL]; // Optional. The default lifetime of all tables in the dataset, in // milliseconds. The minimum lifetime value is 3600000 milliseconds (one // hour). To clear an existing default expiration with a PATCH request, set to // 0. Once this property is set, all newly-created tables in the dataset will // have an expirationTime property set to the creation time plus the value in // this property, and changing the value will only affect new tables, not // existing ones. When the expirationTime for a given table is reached, that // table will be deleted automatically. // If a table's expirationTime is modified or removed before the table // expires, or if you provide an explicit expirationTime when creating a // table, that value takes precedence over the default expiration time // indicated by this property. google.protobuf.Int64Value default_table_expiration_ms = 8 [(google.api.field_behavior) = OPTIONAL]; // This default partition expiration, expressed in milliseconds. // // When new time-partitioned tables are created in a dataset where this // property is set, the table will inherit this value, propagated as the // `TimePartitioning.expirationMs` property on the new table. If you set // `TimePartitioning.expirationMs` explicitly when creating a table, // the `defaultPartitionExpirationMs` of the containing dataset is ignored. // // When creating a partitioned table, if `defaultPartitionExpirationMs` // is set, the `defaultTableExpirationMs` value is ignored and the table // will not be inherit a table expiration deadline. google.protobuf.Int64Value default_partition_expiration_ms = 14; // The labels associated with this dataset. You can use these // to organize and group your datasets. // You can set this property when inserting or updating a dataset. // See [Creating and Updating Dataset // Labels](https://cloud.google.com/bigquery/docs/creating-managing-labels#creating_and_updating_dataset_labels) // for more information. map labels = 9; // Optional. An array of objects that define dataset access for one or more // entities. You can set this property when inserting or updating a dataset in // order to control who is allowed to access the data. If unspecified at // dataset creation time, BigQuery adds default dataset access for the // following entities: access.specialGroup: projectReaders; access.role: // READER; access.specialGroup: projectWriters; access.role: WRITER; // access.specialGroup: projectOwners; access.role: OWNER; // access.userByEmail: [dataset creator email]; access.role: OWNER; // If you patch a dataset, then this field is overwritten by the patched // dataset's access field. To add entities, you must supply the entire // existing access array in addition to any new entities that you want to add. repeated Access access = 10 [(google.api.field_behavior) = OPTIONAL]; // Output only. The time when this dataset was created, in milliseconds since // the epoch. int64 creation_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. The date when this dataset was last modified, in milliseconds // since the epoch. int64 last_modified_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; // The geographic location where the dataset should reside. See // https://cloud.google.com/bigquery/docs/locations for supported // locations. string location = 13; // The default encryption key for all tables in the dataset. // After this property is set, the encryption key of all newly-created tables // in the dataset is set to this value unless the table creation request or // query explicitly overrides the key. EncryptionConfiguration default_encryption_configuration = 16; // Output only. Reserved for future use. google.protobuf.BoolValue satisfies_pzs = 17 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. Reserved for future use. google.protobuf.BoolValue satisfies_pzi = 31 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. Same as `type` in `ListFormatDataset`. // The type of the dataset, one of: // // * DEFAULT - only accessible by owner and authorized accounts, // * PUBLIC - accessible by everyone, // * LINKED - linked dataset, // * EXTERNAL - dataset with definition in external metadata catalog. string type = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; // Optional. The source dataset reference when the dataset is of type LINKED. // For all other dataset types it is not set. This field cannot be updated // once it is set. Any attempt to update this field using Update and Patch API // Operations will be ignored. LinkedDatasetSource linked_dataset_source = 19 [(google.api.field_behavior) = OPTIONAL]; // Output only. Metadata about the LinkedDataset. Filled out when the dataset // type is LINKED. LinkedDatasetMetadata linked_dataset_metadata = 29 [(google.api.field_behavior) = OUTPUT_ONLY]; // Optional. Reference to a read-only external dataset defined in data // catalogs outside of BigQuery. Filled out when the dataset type is EXTERNAL. ExternalDatasetReference external_dataset_reference = 20 [(google.api.field_behavior) = OPTIONAL]; // Optional. Options defining open source compatible datasets living in the // BigQuery catalog. Contains metadata of open source database, schema or // namespace represented by the current dataset. ExternalCatalogDatasetOptions external_catalog_dataset_options = 32 [(google.api.field_behavior) = OPTIONAL]; // Optional. TRUE if the dataset and its table names are case-insensitive, // otherwise FALSE. By default, this is FALSE, which means the dataset and its // table names are case-sensitive. This field does not affect routine // references. google.protobuf.BoolValue is_case_insensitive = 21 [(google.api.field_behavior) = OPTIONAL]; // Optional. Defines the default collation specification of future tables // created in the dataset. If a table is created in this dataset without // table-level default collation, then the table inherits the dataset default // collation, which is applied to the string fields that do not have explicit // collation specified. A change to this field affects only tables created // afterwards, and does not alter the existing tables. // The following values are supported: // // * 'und:ci': undetermined locale, case insensitive. // * '': empty string. Default to case-sensitive behavior. google.protobuf.StringValue default_collation = 22 [(google.api.field_behavior) = OPTIONAL]; // Optional. Defines the default rounding mode specification of new tables // created within this dataset. During table creation, if this field is // specified, the table within this dataset will inherit the default rounding // mode of the dataset. Setting the default rounding mode on a table overrides // this option. Existing tables in the dataset are unaffected. // If columns are defined during that table creation, // they will immediately inherit the table's default rounding mode, // unless otherwise specified. TableFieldSchema.RoundingMode default_rounding_mode = 26 [(google.api.field_behavior) = OPTIONAL]; // Optional. Defines the time travel window in hours. The value can be from 48 // to 168 hours (2 to 7 days). The default value is 168 hours if this is not // set. google.protobuf.Int64Value max_time_travel_hours = 23 [(google.api.field_behavior) = OPTIONAL]; // Output only. Tags for the dataset. To provide tags as inputs, use the // `resourceTags` field. repeated GcpTag tags = 24 [deprecated = true, (google.api.field_behavior) = OUTPUT_ONLY]; // Optional. Updates storage_billing_model for the dataset. StorageBillingModel storage_billing_model = 25 [(google.api.field_behavior) = OPTIONAL]; // Optional. Output only. Restriction config for all tables and dataset. If // set, restrict certain accesses on the dataset and all its tables based on // the config. See [Data // egress](https://cloud.google.com/bigquery/docs/analytics-hub-introduction#data_egress) // for more details. RestrictionConfig restrictions = 27 [ (google.api.field_behavior) = OPTIONAL, (google.api.field_behavior) = OUTPUT_ONLY ]; // Optional. The [tags](https://cloud.google.com/bigquery/docs/tags) attached // to this dataset. Tag keys are globally unique. Tag key is expected to be in // the namespaced format, for example "123456789012/environment" where // 123456789012 is the ID of the parent organization or project resource for // this tag key. Tag value is expected to be the short name, for example // "Production". See [Tag // definitions](https://cloud.google.com/iam/docs/tags-access-control#definitions) // for more details. map resource_tags = 30 [(google.api.field_behavior) = OPTIONAL]; } // A global tag managed by Resource Manager. // https://cloud.google.com/iam/docs/tags-access-control#definitions message GcpTag { // Required. The namespaced friendly name of the tag key, e.g. // "12345/environment" where 12345 is org id. string tag_key = 1 [(google.api.field_behavior) = REQUIRED]; // Required. The friendly short name of the tag value, e.g. "production". string tag_value = 2 [(google.api.field_behavior) = REQUIRED]; } // A dataset source type which refers to another BigQuery dataset. message LinkedDatasetSource { // The source dataset reference contains project numbers and not project ids. DatasetReference source_dataset = 1; } // Metadata about the Linked Dataset. message LinkedDatasetMetadata { // Specifies whether Linked Dataset is currently in a linked state or not. enum LinkState { // The default value. // Default to the LINKED state. LINK_STATE_UNSPECIFIED = 0; // Normal Linked Dataset state. Data is queryable via the Linked Dataset. LINKED = 1; // Data publisher or owner has unlinked this Linked Dataset. It means you // can no longer query or see the data in the Linked Dataset. UNLINKED = 2; } // Output only. Specifies whether Linked Dataset is currently in a linked // state or not. LinkState link_state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; } // Request format for getting information about a dataset. message GetDatasetRequest { // DatasetView specifies which dataset information is returned. enum DatasetView { // The default value. // Default to the FULL view. DATASET_VIEW_UNSPECIFIED = 0; // Includes metadata information for the dataset, such as location, // etag, lastModifiedTime, etc. METADATA = 1; // Includes ACL information for the dataset, which defines dataset access // for one or more entities. ACL = 2; // Includes both dataset metadata and ACL information. FULL = 3; } // Required. Project ID of the requested dataset string project_id = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Dataset ID of the requested dataset string dataset_id = 2 [(google.api.field_behavior) = REQUIRED]; // Optional. Specifies the view that determines which dataset information is // returned. By default, metadata and ACL information are returned. DatasetView dataset_view = 3 [(google.api.field_behavior) = OPTIONAL]; } // Request format for inserting a dataset. message InsertDatasetRequest { // Required. Project ID of the new dataset string project_id = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Datasets resource to use for the new dataset Dataset dataset = 2 [(google.api.field_behavior) = REQUIRED]; } // Message for updating or patching a dataset. message UpdateOrPatchDatasetRequest { // Required. Project ID of the dataset being updated string project_id = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Dataset ID of the dataset being updated string dataset_id = 2 [(google.api.field_behavior) = REQUIRED]; // Required. Datasets resource which will replace or patch the specified // dataset. Dataset dataset = 3 [(google.api.field_behavior) = REQUIRED]; } // Request format for deleting a dataset. message DeleteDatasetRequest { // Required. Project ID of the dataset being deleted string project_id = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Dataset ID of dataset being deleted string dataset_id = 2 [(google.api.field_behavior) = REQUIRED]; // If True, delete all the tables in the dataset. // If False and the dataset contains tables, the request will fail. // Default is False bool delete_contents = 3; } message ListDatasetsRequest { // Required. Project ID of the datasets to be listed string project_id = 1 [(google.api.field_behavior) = REQUIRED]; // The maximum number of results to return in a single response page. // Leverage the page tokens to iterate through the entire collection. google.protobuf.UInt32Value max_results = 2; // Page token, returned by a previous call, to request the next page of // results string page_token = 3; // Whether to list all datasets, including hidden ones bool all = 4; // An expression for filtering the results of the request by label. // The syntax is `labels.[:]`. // Multiple filters can be ANDed together by connecting with a space. // Example: `labels.department:receiving labels.active`. // See [Filtering datasets using // labels](https://cloud.google.com/bigquery/docs/filtering-labels#filtering_datasets_using_labels) // for details. string filter = 5; } // A dataset resource with only a subset of fields, to be returned in a list of // datasets. message ListFormatDataset { // The resource type. // This property always returns the value "bigquery#dataset" string kind = 1; // The fully-qualified, unique, opaque ID of the dataset. string id = 2; // The dataset reference. // Use this property to access specific parts of the dataset's ID, such as // project ID or dataset ID. DatasetReference dataset_reference = 3; // The labels associated with this dataset. // You can use these to organize and group your datasets. map labels = 4; // An alternate name for the dataset. The friendly name is purely // decorative in nature. google.protobuf.StringValue friendly_name = 5; // The geographic location where the dataset resides. string location = 6; } // Response format for a page of results when listing datasets. message DatasetList { // Output only. The resource type. // This property always returns the value "bigquery#datasetList" string kind = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; // Output only. A hash value of the results page. You can use this property to // determine if the page has changed since the last request. string etag = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; // A token that can be used to request the next results page. This property is // omitted on the final results page. string next_page_token = 3; // An array of the dataset resources in the project. // Each resource contains basic information. // For full information about a particular dataset resource, use the Datasets: // get method. This property is omitted when there are no datasets in the // project. repeated ListFormatDataset datasets = 4; // A list of skipped locations that were unreachable. For more information // about BigQuery locations, see: // https://cloud.google.com/bigquery/docs/locations. Example: "europe-west5" repeated string unreachable = 5; } // Request format for undeleting a dataset. message UndeleteDatasetRequest { // Required. Project ID of the dataset to be undeleted string project_id = 1 [(google.api.field_behavior) = REQUIRED]; // Required. Dataset ID of dataset being deleted string dataset_id = 2 [(google.api.field_behavior) = REQUIRED]; // Optional. The exact time when the dataset was deleted. If not specified, // the most recently deleted version is undeleted. Undeleting a dataset // using deletion time is not supported. google.protobuf.Timestamp deletion_time = 3 [(google.api.field_behavior) = OPTIONAL]; }