xref: /aosp_15_r20/external/googleapis/google/cloud/bigquery/dataexchange/v1beta1/dataexchange.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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