1// Copyright 2022 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.cloud.bigquery.dataexchange.v1beta1; 18 19import "google/api/annotations.proto"; 20import "google/api/client.proto"; 21import "google/api/field_behavior.proto"; 22import "google/api/resource.proto"; 23import "google/iam/v1/iam_policy.proto"; 24import "google/iam/v1/policy.proto"; 25import "google/protobuf/empty.proto"; 26import "google/protobuf/field_mask.proto"; 27import "google/protobuf/wrappers.proto"; 28 29option csharp_namespace = "Google.Cloud.BigQuery.DataExchange.V1Beta1"; 30option go_package = "cloud.google.com/go/bigquery/dataexchange/apiv1beta1/dataexchangepb;dataexchangepb"; 31option java_multiple_files = true; 32option java_outer_classname = "DataExchangeProto"; 33option java_package = "com.google.cloud.bigquery.dataexchange.v1beta1"; 34option php_namespace = "Google\\Cloud\\BigQuery\\DataExchange\\V1beta1"; 35option ruby_package = "Google::Cloud::Bigquery::DataExchange::V1beta1"; 36option (google.api.resource_definition) = { 37 type: "bigquery.googleapis.com/Dataset" 38 pattern: "projects/{project}/datasets/{dataset}" 39}; 40 41// The `AnalyticsHubService` API facilitates data sharing within and across 42// organizations. It allows data providers to publish listings that reference 43// shared datasets. With Analytics Hub, users can discover and search for 44// listings that they have access to. Subscribers can view and subscribe to 45// listings. When you subscribe to a listing, Analytics Hub creates a linked 46// dataset in your project. 47service AnalyticsHubService { 48 option (google.api.default_host) = "analyticshub.googleapis.com"; 49 option (google.api.oauth_scopes) = 50 "https://www.googleapis.com/auth/bigquery," 51 "https://www.googleapis.com/auth/cloud-platform"; 52 53 // Lists all data exchanges in a given project and location. 54 rpc ListDataExchanges(ListDataExchangesRequest) returns (ListDataExchangesResponse) { 55 option (google.api.http) = { 56 get: "/v1beta1/{parent=projects/*/locations/*}/dataExchanges" 57 }; 58 option (google.api.method_signature) = "parent"; 59 } 60 61 // Lists all data exchanges from projects in a given organization and 62 // location. 63 rpc ListOrgDataExchanges(ListOrgDataExchangesRequest) returns (ListOrgDataExchangesResponse) { 64 option (google.api.http) = { 65 get: "/v1beta1/{organization=organizations/*/locations/*}/dataExchanges" 66 }; 67 option (google.api.method_signature) = "organization"; 68 } 69 70 // Gets the details of a data exchange. 71 rpc GetDataExchange(GetDataExchangeRequest) returns (DataExchange) { 72 option (google.api.http) = { 73 get: "/v1beta1/{name=projects/*/locations/*/dataExchanges/*}" 74 }; 75 option (google.api.method_signature) = "name"; 76 } 77 78 // Creates a new data exchange. 79 rpc CreateDataExchange(CreateDataExchangeRequest) returns (DataExchange) { 80 option (google.api.http) = { 81 post: "/v1beta1/{parent=projects/*/locations/*}/dataExchanges" 82 body: "data_exchange" 83 }; 84 option (google.api.method_signature) = "parent,data_exchange"; 85 } 86 87 // Updates an existing data exchange. 88 rpc UpdateDataExchange(UpdateDataExchangeRequest) returns (DataExchange) { 89 option (google.api.http) = { 90 patch: "/v1beta1/{data_exchange.name=projects/*/locations/*/dataExchanges/*}" 91 body: "data_exchange" 92 }; 93 option (google.api.method_signature) = "data_exchange,update_mask"; 94 } 95 96 // Deletes an existing data exchange. 97 rpc DeleteDataExchange(DeleteDataExchangeRequest) returns (google.protobuf.Empty) { 98 option (google.api.http) = { 99 delete: "/v1beta1/{name=projects/*/locations/*/dataExchanges/*}" 100 }; 101 option (google.api.method_signature) = "name"; 102 } 103 104 // Lists all listings in a given project and location. 105 rpc ListListings(ListListingsRequest) returns (ListListingsResponse) { 106 option (google.api.http) = { 107 get: "/v1beta1/{parent=projects/*/locations/*/dataExchanges/*}/listings" 108 }; 109 option (google.api.method_signature) = "parent"; 110 } 111 112 // Gets the details of a listing. 113 rpc GetListing(GetListingRequest) returns (Listing) { 114 option (google.api.http) = { 115 get: "/v1beta1/{name=projects/*/locations/*/dataExchanges/*/listings/*}" 116 }; 117 option (google.api.method_signature) = "name"; 118 } 119 120 // Creates a new listing. 121 rpc CreateListing(CreateListingRequest) returns (Listing) { 122 option (google.api.http) = { 123 post: "/v1beta1/{parent=projects/*/locations/*/dataExchanges/*}/listings" 124 body: "listing" 125 }; 126 option (google.api.method_signature) = "parent,listing"; 127 } 128 129 // Updates an existing listing. 130 rpc UpdateListing(UpdateListingRequest) returns (Listing) { 131 option (google.api.http) = { 132 patch: "/v1beta1/{listing.name=projects/*/locations/*/dataExchanges/*/listings/*}" 133 body: "listing" 134 }; 135 option (google.api.method_signature) = "listing,update_mask"; 136 } 137 138 // Deletes a listing. 139 rpc DeleteListing(DeleteListingRequest) returns (google.protobuf.Empty) { 140 option (google.api.http) = { 141 delete: "/v1beta1/{name=projects/*/locations/*/dataExchanges/*/listings/*}" 142 }; 143 option (google.api.method_signature) = "name"; 144 } 145 146 // Subscribes to a listing. 147 // 148 // Currently, with Analytics Hub, you can create listings that 149 // reference only BigQuery datasets. 150 // Upon subscription to a listing for a BigQuery dataset, Analytics Hub 151 // creates a linked dataset in the subscriber's project. 152 rpc SubscribeListing(SubscribeListingRequest) returns (SubscribeListingResponse) { 153 option (google.api.http) = { 154 post: "/v1beta1/{name=projects/*/locations/*/dataExchanges/*/listings/*}:subscribe" 155 body: "*" 156 }; 157 option (google.api.method_signature) = "name"; 158 } 159 160 // Gets the IAM policy. 161 rpc GetIamPolicy(google.iam.v1.GetIamPolicyRequest) returns (google.iam.v1.Policy) { 162 option (google.api.http) = { 163 post: "/v1beta1/{resource=projects/*/locations/*/dataExchanges/*}:getIamPolicy" 164 body: "*" 165 additional_bindings { 166 post: "/v1beta1/{resource=projects/*/locations/*/dataExchanges/*/listings/*}:getIamPolicy" 167 body: "*" 168 } 169 }; 170 } 171 172 // Sets the IAM policy. 173 rpc SetIamPolicy(google.iam.v1.SetIamPolicyRequest) returns (google.iam.v1.Policy) { 174 option (google.api.http) = { 175 post: "/v1beta1/{resource=projects/*/locations/*/dataExchanges/*}:setIamPolicy" 176 body: "*" 177 additional_bindings { 178 post: "/v1beta1/{resource=projects/*/locations/*/dataExchanges/*/listings/*}:setIamPolicy" 179 body: "*" 180 } 181 }; 182 } 183 184 // Returns the permissions that a caller has. 185 rpc TestIamPermissions(google.iam.v1.TestIamPermissionsRequest) returns (google.iam.v1.TestIamPermissionsResponse) { 186 option (google.api.http) = { 187 post: "/v1beta1/{resource=projects/*/locations/*/dataExchanges/*}:testIamPermissions" 188 body: "*" 189 additional_bindings { 190 post: "/v1beta1/{resource=projects/*/locations/*/dataExchanges/*/listings/*}:testIamPermissions" 191 body: "*" 192 } 193 }; 194 } 195} 196 197// A data exchange is a container that lets you share data. Along with the 198// descriptive information about the data exchange, it contains listings that 199// reference shared datasets. 200message DataExchange { 201 option (google.api.resource) = { 202 type: "analyticshub.googleapis.com/DataExchange" 203 pattern: "projects/{project}/locations/{location}/dataExchanges/{data_exchange}" 204 }; 205 206 // Output only. The resource name of the data exchange. 207 // e.g. `projects/myproject/locations/US/dataExchanges/123`. 208 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 209 210 // Required. Human-readable display name of the data exchange. The display name must 211 // contain only Unicode letters, numbers (0-9), underscores (_), dashes (-), 212 // spaces ( ), ampersands (&) and must not start or end with spaces. 213 // Default value is an empty string. 214 // Max length: 63 bytes. 215 string display_name = 2 [(google.api.field_behavior) = REQUIRED]; 216 217 // Optional. Description of the data exchange. The description must not contain Unicode 218 // non-characters as well as C0 and C1 control codes except tabs (HT), 219 // new lines (LF), carriage returns (CR), and page breaks (FF). 220 // Default value is an empty string. 221 // Max length: 2000 bytes. 222 string description = 3 [(google.api.field_behavior) = OPTIONAL]; 223 224 // Optional. Email or URL of the primary point of contact of the data exchange. 225 // Max Length: 1000 bytes. 226 string primary_contact = 4 [(google.api.field_behavior) = OPTIONAL]; 227 228 // Optional. Documentation describing the data exchange. 229 string documentation = 5 [(google.api.field_behavior) = OPTIONAL]; 230 231 // Output only. Number of listings contained in the data exchange. 232 int32 listing_count = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; 233 234 // Optional. Base64 encoded image representing the data exchange. Max Size: 3.0MiB 235 // Expected image dimensions are 512x512 pixels, however the API only 236 // performs validation on size of the encoded data. 237 // Note: For byte fields, the content of the fields are base64-encoded (which 238 // increases the size of the data by 33-36%) when using JSON on the wire. 239 bytes icon = 7 [(google.api.field_behavior) = OPTIONAL]; 240} 241 242// Contains details of the data provider. 243message DataProvider { 244 // Optional. Name of the data provider. 245 string name = 1 [(google.api.field_behavior) = OPTIONAL]; 246 247 // Optional. Email or URL of the data provider. 248 // Max Length: 1000 bytes. 249 string primary_contact = 2 [(google.api.field_behavior) = OPTIONAL]; 250} 251 252// Contains details of the listing publisher. 253message Publisher { 254 // Optional. Name of the listing publisher. 255 string name = 1 [(google.api.field_behavior) = OPTIONAL]; 256 257 // Optional. Email or URL of the listing publisher. 258 // Max Length: 1000 bytes. 259 string primary_contact = 2 [(google.api.field_behavior) = OPTIONAL]; 260} 261 262// Contains the reference that identifies a destination bigquery dataset. 263message DestinationDatasetReference { 264 // Required. A unique ID for this dataset, without the project name. The ID 265 // must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). 266 // The maximum length is 1,024 characters. 267 string dataset_id = 1 [(google.api.field_behavior) = REQUIRED]; 268 269 // Required. The ID of the project containing this dataset. 270 string project_id = 2 [(google.api.field_behavior) = REQUIRED]; 271} 272 273// Defines the destination bigquery dataset. 274message DestinationDataset { 275 // Required. A reference that identifies the destination dataset. 276 DestinationDatasetReference dataset_reference = 1 [(google.api.field_behavior) = REQUIRED]; 277 278 // Optional. A descriptive name for the dataset. 279 google.protobuf.StringValue friendly_name = 2 [(google.api.field_behavior) = OPTIONAL]; 280 281 // Optional. A user-friendly description of the dataset. 282 google.protobuf.StringValue description = 3 [(google.api.field_behavior) = OPTIONAL]; 283 284 // Optional. The labels associated with this dataset. You can use these 285 // to organize and group your datasets. 286 // You can set this property when inserting or updating a dataset. 287 // See https://cloud.google.com/resource-manager/docs/creating-managing-labels 288 // for more information. 289 map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL]; 290 291 // Required. The geographic location where the dataset should reside. See 292 // https://cloud.google.com/bigquery/docs/locations for supported 293 // locations. 294 string location = 5 [(google.api.field_behavior) = REQUIRED]; 295} 296 297// A listing is what gets published into a data exchange that a subscriber can 298// subscribe to. It contains a reference to the data source along with 299// descriptive information that will help subscribers find and subscribe the 300// data. 301message Listing { 302 option (google.api.resource) = { 303 type: "analyticshub.googleapis.com/Listing" 304 pattern: "projects/{project}/locations/{location}/dataExchanges/{data_exchange}/listings/{listing}" 305 }; 306 307 // A reference to a shared dataset. It is an existing BigQuery dataset with a 308 // collection of objects such as tables and views that you want to share 309 // with subscribers. 310 // When subscriber's subscribe to a listing, Analytics Hub creates a linked 311 // dataset in 312 // the subscriber's project. A Linked dataset is an opaque, read-only BigQuery 313 // dataset that serves as a _symbolic link_ to a shared dataset. 314 message BigQueryDatasetSource { 315 // Resource name of the dataset source for this listing. 316 // e.g. `projects/myproject/datasets/123` 317 string dataset = 1 [(google.api.resource_reference) = { 318 type: "bigquery.googleapis.com/Dataset" 319 }]; 320 } 321 322 // State of the listing. 323 enum State { 324 // Default value. This value is unused. 325 STATE_UNSPECIFIED = 0; 326 327 // Subscribable state. Users with dataexchange.listings.subscribe permission 328 // can subscribe to this listing. 329 ACTIVE = 1; 330 } 331 332 // Listing categories. 333 enum Category { 334 CATEGORY_UNSPECIFIED = 0; 335 336 CATEGORY_OTHERS = 1; 337 338 CATEGORY_ADVERTISING_AND_MARKETING = 2; 339 340 CATEGORY_COMMERCE = 3; 341 342 CATEGORY_CLIMATE_AND_ENVIRONMENT = 4; 343 344 CATEGORY_DEMOGRAPHICS = 5; 345 346 CATEGORY_ECONOMICS = 6; 347 348 CATEGORY_EDUCATION = 7; 349 350 CATEGORY_ENERGY = 8; 351 352 CATEGORY_FINANCIAL = 9; 353 354 CATEGORY_GAMING = 10; 355 356 CATEGORY_GEOSPATIAL = 11; 357 358 CATEGORY_HEALTHCARE_AND_LIFE_SCIENCE = 12; 359 360 CATEGORY_MEDIA = 13; 361 362 CATEGORY_PUBLIC_SECTOR = 14; 363 364 CATEGORY_RETAIL = 15; 365 366 CATEGORY_SPORTS = 16; 367 368 CATEGORY_SCIENCE_AND_RESEARCH = 17; 369 370 CATEGORY_TRANSPORTATION_AND_LOGISTICS = 18; 371 372 CATEGORY_TRAVEL_AND_TOURISM = 19; 373 } 374 375 // Listing source. 376 oneof source { 377 // Required. Shared dataset i.e. BigQuery dataset source. 378 BigQueryDatasetSource bigquery_dataset = 6 [(google.api.field_behavior) = REQUIRED]; 379 } 380 381 // Output only. The resource name of the listing. 382 // e.g. `projects/myproject/locations/US/dataExchanges/123/listings/456` 383 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 384 385 // Required. Human-readable display name of the listing. The display name must contain 386 // only Unicode letters, numbers (0-9), underscores (_), dashes (-), spaces 387 // ( ), ampersands (&) and can't start or end with spaces. 388 // Default value is an empty string. 389 // Max length: 63 bytes. 390 string display_name = 2 [(google.api.field_behavior) = REQUIRED]; 391 392 // Optional. Short description of the listing. The description must not contain 393 // Unicode non-characters and C0 and C1 control codes except tabs (HT), 394 // new lines (LF), carriage returns (CR), and page breaks (FF). 395 // Default value is an empty string. 396 // Max length: 2000 bytes. 397 string description = 3 [(google.api.field_behavior) = OPTIONAL]; 398 399 // Optional. Email or URL of the primary point of contact of the listing. 400 // Max Length: 1000 bytes. 401 string primary_contact = 4 [(google.api.field_behavior) = OPTIONAL]; 402 403 // Optional. Documentation describing the listing. 404 string documentation = 5 [(google.api.field_behavior) = OPTIONAL]; 405 406 // Output only. Current state of the listing. 407 State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; 408 409 // Optional. Base64 encoded image representing the listing. Max Size: 3.0MiB 410 // Expected image dimensions are 512x512 pixels, however the API only 411 // performs validation on size of the encoded data. 412 // Note: For byte fields, the contents of the field are base64-encoded (which 413 // increases the size of the data by 33-36%) when using JSON on the wire. 414 bytes icon = 8 [(google.api.field_behavior) = OPTIONAL]; 415 416 // Optional. Details of the data provider who owns the source data. 417 DataProvider data_provider = 9 [(google.api.field_behavior) = OPTIONAL]; 418 419 // Optional. Categories of the listing. Up to two categories are allowed. 420 repeated Category categories = 10 [(google.api.field_behavior) = OPTIONAL]; 421 422 // Optional. Details of the publisher who owns the listing and who can share 423 // the source data. 424 Publisher publisher = 11 [(google.api.field_behavior) = OPTIONAL]; 425 426 // Optional. Email or URL of the request access of the listing. 427 // Subscribers can use this reference to request access. 428 // Max Length: 1000 bytes. 429 string request_access = 12 [(google.api.field_behavior) = OPTIONAL]; 430} 431 432// Message for requesting the list of data exchanges. 433message ListDataExchangesRequest { 434 // Required. The parent resource path of the data exchanges. 435 // e.g. `projects/myproject/locations/US`. 436 string parent = 1 [ 437 (google.api.field_behavior) = REQUIRED, 438 (google.api.resource_reference) = { 439 type: "locations.googleapis.com/Location" 440 } 441 ]; 442 443 // The maximum number of results to return in a single response page. Leverage 444 // the page tokens to iterate through the entire collection. 445 int32 page_size = 2; 446 447 // Page token, returned by a previous call, to request the next page of 448 // results. 449 string page_token = 3; 450} 451 452// Message for response to the list of data exchanges. 453message ListDataExchangesResponse { 454 // The list of data exchanges. 455 repeated DataExchange data_exchanges = 1; 456 457 // A token to request the next page of results. 458 string next_page_token = 2; 459} 460 461// Message for requesting the list of data exchanges from projects in an 462// organization and location. 463message ListOrgDataExchangesRequest { 464 // Required. The organization resource path of the projects containing DataExchanges. 465 // e.g. `organizations/myorg/locations/US`. 466 string organization = 1 [(google.api.field_behavior) = REQUIRED]; 467 468 // The maximum number of results to return in a single response page. Leverage 469 // the page tokens to iterate through the entire collection. 470 int32 page_size = 2; 471 472 // Page token, returned by a previous call, to request the next page of 473 // results. 474 string page_token = 3; 475} 476 477// Message for response to listing data exchanges in an organization and 478// location. 479message ListOrgDataExchangesResponse { 480 // The list of data exchanges. 481 repeated DataExchange data_exchanges = 1; 482 483 // A token to request the next page of results. 484 string next_page_token = 2; 485} 486 487// Message for getting a data exchange. 488message GetDataExchangeRequest { 489 // Required. The resource name of the data exchange. 490 // e.g. `projects/myproject/locations/US/dataExchanges/123`. 491 string name = 1 [ 492 (google.api.field_behavior) = REQUIRED, 493 (google.api.resource_reference) = { 494 type: "analyticshub.googleapis.com/DataExchange" 495 } 496 ]; 497} 498 499// Message for creating a data exchange. 500message CreateDataExchangeRequest { 501 // Required. The parent resource path of the data exchange. 502 // e.g. `projects/myproject/locations/US`. 503 string parent = 1 [ 504 (google.api.field_behavior) = REQUIRED, 505 (google.api.resource_reference) = { 506 type: "locations.googleapis.com/Location" 507 } 508 ]; 509 510 // Required. The ID of the data exchange. 511 // Must contain only Unicode letters, numbers (0-9), underscores (_). 512 // Should not use characters that require URL-escaping, or characters 513 // outside of ASCII, spaces. 514 // Max length: 100 bytes. 515 string data_exchange_id = 2 [(google.api.field_behavior) = REQUIRED]; 516 517 // Required. The data exchange to create. 518 DataExchange data_exchange = 3 [(google.api.field_behavior) = REQUIRED]; 519} 520 521// Message for updating a data exchange. 522message UpdateDataExchangeRequest { 523 // Required. Field mask specifies the fields to update in the data exchange 524 // resource. The fields specified in the 525 // `updateMask` are relative to the resource and are not a full request. 526 google.protobuf.FieldMask update_mask = 1 [(google.api.field_behavior) = REQUIRED]; 527 528 // Required. The data exchange to update. 529 DataExchange data_exchange = 2 [(google.api.field_behavior) = REQUIRED]; 530} 531 532// Message for deleting a data exchange. 533message DeleteDataExchangeRequest { 534 // Required. The full name of the data exchange resource that you want to delete. 535 // For example, `projects/myproject/locations/US/dataExchanges/123`. 536 string name = 1 [ 537 (google.api.field_behavior) = REQUIRED, 538 (google.api.resource_reference) = { 539 type: "analyticshub.googleapis.com/DataExchange" 540 } 541 ]; 542} 543 544// Message for requesting the list of listings. 545message ListListingsRequest { 546 // Required. The parent resource path of the listing. 547 // e.g. `projects/myproject/locations/US/dataExchanges/123`. 548 string parent = 1 [ 549 (google.api.field_behavior) = REQUIRED, 550 (google.api.resource_reference) = { 551 type: "analyticshub.googleapis.com/DataExchange" 552 } 553 ]; 554 555 // The maximum number of results to return in a single response page. Leverage 556 // the page tokens to iterate through the entire collection. 557 int32 page_size = 2; 558 559 // Page token, returned by a previous call, to request the next page of 560 // results. 561 string page_token = 3; 562} 563 564// Message for response to the list of Listings. 565message ListListingsResponse { 566 // The list of Listing. 567 repeated Listing listings = 1; 568 569 // A token to request the next page of results. 570 string next_page_token = 2; 571} 572 573// Message for getting a listing. 574message GetListingRequest { 575 // Required. The resource name of the listing. 576 // e.g. `projects/myproject/locations/US/dataExchanges/123/listings/456`. 577 string name = 1 [ 578 (google.api.field_behavior) = REQUIRED, 579 (google.api.resource_reference) = { 580 type: "analyticshub.googleapis.com/Listing" 581 } 582 ]; 583} 584 585// Message for creating a listing. 586message CreateListingRequest { 587 // Required. The parent resource path of the listing. 588 // e.g. `projects/myproject/locations/US/dataExchanges/123`. 589 string parent = 1 [ 590 (google.api.field_behavior) = REQUIRED, 591 (google.api.resource_reference) = { 592 type: "analyticshub.googleapis.com/DataExchange" 593 } 594 ]; 595 596 // Required. The ID of the listing to create. 597 // Must contain only Unicode letters, numbers (0-9), underscores (_). 598 // Should not use characters that require URL-escaping, or characters 599 // outside of ASCII, spaces. 600 // Max length: 100 bytes. 601 string listing_id = 2 [(google.api.field_behavior) = REQUIRED]; 602 603 // Required. The listing to create. 604 Listing listing = 3 [(google.api.field_behavior) = REQUIRED]; 605} 606 607// Message for updating a Listing. 608message UpdateListingRequest { 609 // Required. Field mask specifies the fields to update in the listing resource. The 610 // fields specified in the `updateMask` are relative to the resource and are 611 // not a full request. 612 google.protobuf.FieldMask update_mask = 1 [(google.api.field_behavior) = REQUIRED]; 613 614 // Required. The listing to update. 615 Listing listing = 2 [(google.api.field_behavior) = REQUIRED]; 616} 617 618// Message for deleting a listing. 619message DeleteListingRequest { 620 // Required. Resource name of the listing to delete. 621 // e.g. `projects/myproject/locations/US/dataExchanges/123/listings/456`. 622 string name = 1 [ 623 (google.api.field_behavior) = REQUIRED, 624 (google.api.resource_reference) = { 625 type: "analyticshub.googleapis.com/Listing" 626 } 627 ]; 628} 629 630// Message for subscribing to a listing. 631message SubscribeListingRequest { 632 // Resulting destination of the listing that you subscribed to. 633 oneof destination { 634 // BigQuery destination dataset to create for the subscriber. 635 DestinationDataset destination_dataset = 3; 636 } 637 638 // Required. Resource name of the listing that you want to subscribe to. 639 // e.g. `projects/myproject/locations/US/dataExchanges/123/listings/456`. 640 string name = 1 [ 641 (google.api.field_behavior) = REQUIRED, 642 (google.api.resource_reference) = { 643 type: "analyticshub.googleapis.com/Listing" 644 } 645 ]; 646} 647 648// Message for response when you subscribe to a listing. 649message SubscribeListingResponse { 650 651} 652