<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="bigquery_v2.html">BigQuery API</a> . <a href="bigquery_v2.datasets.html">datasets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(projectId, datasetId, deleteContents=None)</a></code></p>
<p class="firstline">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.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, datasetId)</a></code></p>
<p class="firstline">Returns the dataset specified by datasetID.</p>
<p class="toc_element">
  <code><a href="#insert">insert(projectId, body=None)</a></code></p>
<p class="firstline">Creates a new empty dataset.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, maxResults=None, all=None, filter=None, pageToken=None)</a></code></p>
<p class="firstline">Lists all datasets in the specified project to which you have been granted the READER dataset role.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(projectId, datasetId, body=None)</a></code></p>
<p class="firstline">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 patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(projectId, datasetId, body=None)</a></code></p>
<p class="firstline">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.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(projectId, datasetId, deleteContents=None)</code>
  <pre>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.

Args:
  projectId: string, Project ID of the dataset being deleted (required)
  datasetId: string, Dataset ID of dataset being deleted (required)
  deleteContents: boolean, If True, delete all the tables in the dataset. If False and the dataset contains tables, the request will fail. Default is False
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, datasetId)</code>
  <pre>Returns the dataset specified by datasetID.

Args:
  projectId: string, Project ID of the requested dataset (required)
  datasetId: string, Dataset ID of the requested dataset (required)

Returns:
  An object of the form:

    {
      &quot;id&quot;: &quot;A String&quot;, # [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.
      &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
      &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
      &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
      &quot;defaultEncryptionConfiguration&quot;: {
        &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
      },
      &quot;labels&quot;: { # 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 for more information.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;selfLink&quot;: &quot;A String&quot;, # [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.
      &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
      &quot;access&quot;: [ # [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;
        {
          &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
          &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
            &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
            &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
            &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
          },
          &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
          &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
          &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
          &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
          &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
        },
      ],
      &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
      &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
      &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
      &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
      &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
      &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
        &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(projectId, body=None)</code>
  <pre>Creates a new empty dataset.

Args:
  projectId: string, Project ID of the new dataset (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;id&quot;: &quot;A String&quot;, # [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.
    &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
    &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
    &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
    &quot;defaultEncryptionConfiguration&quot;: {
      &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
    },
    &quot;labels&quot;: { # 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 for more information.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;selfLink&quot;: &quot;A String&quot;, # [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.
    &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
    &quot;access&quot;: [ # [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;
      {
        &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
        &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
          &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
          &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
          &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        },
        &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
        &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
        &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
        &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
        &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
      },
    ],
    &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
    &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
    &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
    &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
    &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
    &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
      &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
      &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
    },
  }


Returns:
  An object of the form:

    {
      &quot;id&quot;: &quot;A String&quot;, # [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.
      &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
      &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
      &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
      &quot;defaultEncryptionConfiguration&quot;: {
        &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
      },
      &quot;labels&quot;: { # 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 for more information.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;selfLink&quot;: &quot;A String&quot;, # [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.
      &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
      &quot;access&quot;: [ # [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;
        {
          &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
          &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
            &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
            &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
            &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
          },
          &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
          &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
          &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
          &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
          &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
        },
      ],
      &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
      &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
      &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
      &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
      &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
      &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
        &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, maxResults=None, all=None, filter=None, pageToken=None)</code>
  <pre>Lists all datasets in the specified project to which you have been granted the READER dataset role.

Args:
  projectId: string, Project ID of the datasets to be listed (required)
  maxResults: integer, The maximum number of results to return
  all: boolean, Whether to list all datasets, including hidden ones
  filter: string, An expression for filtering the results of the request by label. The syntax is &quot;labels.&lt;name&gt;[:&lt;value&gt;]&quot;. Multiple filters can be ANDed together by connecting with a space. Example: &quot;labels.department:receiving labels.active&quot;. See Filtering datasets using labels for details.
  pageToken: string, Page token, returned by a previous call, to request the next page of results

Returns:
  An object of the form:

    {
    &quot;datasets&quot;: [ # 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.
      {
        &quot;id&quot;: &quot;A String&quot;, # The fully-qualified, unique, opaque ID of the dataset.
        &quot;location&quot;: &quot;A String&quot;, # The geographic location where the data resides.
        &quot;friendlyName&quot;: &quot;A String&quot;, # A descriptive name for the dataset, if one exists.
        &quot;kind&quot;: &quot;bigquery#dataset&quot;, # The resource type. This property always returns the value &quot;bigquery#dataset&quot;.
        &quot;labels&quot;: { # The labels associated with this dataset. You can use these to organize and group your datasets.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;datasetReference&quot;: { # The dataset reference. Use this property to access specific parts of the dataset&#x27;s ID, such as project ID or dataset ID.
          &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
          &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
        },
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token that can be used to request the next results page. This property is omitted on the final results page.
    &quot;kind&quot;: &quot;bigquery#datasetList&quot;, # The list type. This property always returns the value &quot;bigquery#datasetList&quot;.
    &quot;etag&quot;: &quot;A String&quot;, # A hash value of the results page. You can use this property to determine if the page has changed since the last request.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(projectId, datasetId, body=None)</code>
  <pre>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 patch semantics.

Args:
  projectId: string, Project ID of the dataset being updated (required)
  datasetId: string, Dataset ID of the dataset being updated (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;id&quot;: &quot;A String&quot;, # [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.
    &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
    &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
    &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
    &quot;defaultEncryptionConfiguration&quot;: {
      &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
    },
    &quot;labels&quot;: { # 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 for more information.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;selfLink&quot;: &quot;A String&quot;, # [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.
    &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
    &quot;access&quot;: [ # [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;
      {
        &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
        &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
          &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
          &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
          &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        },
        &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
        &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
        &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
        &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
        &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
      },
    ],
    &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
    &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
    &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
    &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
    &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
    &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
      &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
      &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
    },
  }


Returns:
  An object of the form:

    {
      &quot;id&quot;: &quot;A String&quot;, # [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.
      &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
      &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
      &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
      &quot;defaultEncryptionConfiguration&quot;: {
        &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
      },
      &quot;labels&quot;: { # 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 for more information.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;selfLink&quot;: &quot;A String&quot;, # [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.
      &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
      &quot;access&quot;: [ # [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;
        {
          &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
          &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
            &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
            &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
            &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
          },
          &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
          &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
          &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
          &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
          &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
        },
      ],
      &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
      &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
      &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
      &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
      &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
      &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
        &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(projectId, datasetId, body=None)</code>
  <pre>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.

Args:
  projectId: string, Project ID of the dataset being updated (required)
  datasetId: string, Dataset ID of the dataset being updated (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;id&quot;: &quot;A String&quot;, # [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.
    &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
    &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
    &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
    &quot;defaultEncryptionConfiguration&quot;: {
      &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
    },
    &quot;labels&quot;: { # 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 for more information.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;selfLink&quot;: &quot;A String&quot;, # [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.
    &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
    &quot;access&quot;: [ # [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;
      {
        &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
        &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
          &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
          &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
          &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        },
        &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
        &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
        &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
        &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
        &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
      },
    ],
    &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
    &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
    &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
    &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
    &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
    &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
      &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
      &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
    },
  }


Returns:
  An object of the form:

    {
      &quot;id&quot;: &quot;A String&quot;, # [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.
      &quot;location&quot;: &quot;A String&quot;, # The geographic location where the dataset should reside. The default value is US. See details at https://cloud.google.com/bigquery/docs/locations.
      &quot;friendlyName&quot;: &quot;A String&quot;, # [Optional] A descriptive name for the dataset.
      &quot;lastModifiedTime&quot;: &quot;A String&quot;, # [Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.
      &quot;defaultEncryptionConfiguration&quot;: {
        &quot;kmsKeyName&quot;: &quot;A String&quot;, # [Optional] Describes the Cloud KMS encryption key that will be used to protect destination BigQuery table. The BigQuery Service Account associated with your project requires access to this encryption key.
      },
      &quot;labels&quot;: { # 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 for more information.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;selfLink&quot;: &quot;A String&quot;, # [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.
      &quot;defaultPartitionExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default partition expiration for all partitioned tables in the dataset, in milliseconds. Once this property is set, all newly-created partitioned tables in the dataset will have an expirationMs property in the timePartitioning settings set to this value, and changing the value will only affect new tables, not existing ones. The storage in a partition will have an expiration time of its partition time plus this value. Setting this property overrides the use of defaultTableExpirationMs for partitioned tables: only one of defaultTableExpirationMs and defaultPartitionExpirationMs will be used for any new partitioned table. If you provide an explicit timePartitioning.expirationMs when creating or updating a partitioned table, that value takes precedence over the default partition expiration time indicated by this property.
      &quot;access&quot;: [ # [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;
        {
          &quot;role&quot;: &quot;A String&quot;, # [Required] 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 &quot;roles/bigquery.dataOwner&quot;, it will be returned back as &quot;OWNER&quot;.
          &quot;view&quot;: { # [Pick one] A view from a different dataset to grant access to. Queries executed against that view will have read access to tables 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.
            &quot;projectId&quot;: &quot;A String&quot;, # [Required] The ID of the project containing this table.
            &quot;datasetId&quot;: &quot;A String&quot;, # [Required] The ID of the dataset containing this table.
            &quot;tableId&quot;: &quot;A String&quot;, # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
          },
          &quot;groupByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a Google Group to grant access to. Maps to IAM policy member &quot;group:GROUP&quot;.
          &quot;userByEmail&quot;: &quot;A String&quot;, # [Pick one] An email address of a user to grant access to. For example: fred@example.com. Maps to IAM policy member &quot;user:EMAIL&quot; or &quot;serviceAccount:EMAIL&quot;.
          &quot;domain&quot;: &quot;A String&quot;, # [Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: &quot;example.com&quot;. Maps to IAM policy member &quot;domain:DOMAIN&quot;.
          &quot;iamMember&quot;: &quot;A String&quot;, # [Pick one] Some other type of member that appears in the IAM Policy but isn&#x27;t a user, group, domain, or special group.
          &quot;specialGroup&quot;: &quot;A String&quot;, # [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.
        },
      ],
      &quot;kind&quot;: &quot;bigquery#dataset&quot;, # [Output-only] The resource type.
      &quot;description&quot;: &quot;A String&quot;, # [Optional] A user-friendly description of the dataset.
      &quot;defaultTableExpirationMs&quot;: &quot;A String&quot;, # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). 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&#x27;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.
      &quot;etag&quot;: &quot;A String&quot;, # [Output-only] A hash of the resource.
      &quot;creationTime&quot;: &quot;A String&quot;, # [Output-only] The time when this dataset was created, in milliseconds since the epoch.
      &quot;datasetReference&quot;: { # [Required] A reference that identifies the dataset.
        &quot;datasetId&quot;: &quot;A String&quot;, # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
        &quot;projectId&quot;: &quot;A String&quot;, # [Optional] The ID of the project containing this dataset.
      },
    }</pre>
</div>

</body></html>