<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="bigtableadmin_v2.html">Cloud Bigtable Admin API</a> . <a href="bigtableadmin_v2.projects.html">projects</a> . <a href="bigtableadmin_v2.projects.instances.html">instances</a> . <a href="bigtableadmin_v2.projects.instances.tables.html">tables</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#checkConsistency">checkConsistency(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Checks replication consistency based on a consistency token, that is, if replication has caught up based on the conditions specified in the token and the check request.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new table in the specified instance. The table can be created with a full set of initial column families, specified in the request.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Permanently deletes a specified table and all of its data.</p>
<p class="toc_element">
  <code><a href="#dropRowRange">dropRowRange(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Permanently drop/delete a row range from a specified table. The request can specify whether to delete all rows in a table, or only those that match a particular prefix.</p>
<p class="toc_element">
  <code><a href="#generateConsistencyToken">generateConsistencyToken(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generates a consistency token for a Table, which can be used in CheckConsistency to check whether mutations to the table that finished before this call started have been replicated. The tokens will be available for 90 days.</p>
<p class="toc_element">
  <code><a href="#get">get(name, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets metadata information about the specified table.</p>
<p class="toc_element">
  <code><a href="#getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the access control policy for a Table or Backup resource. Returns an empty policy if the resource exists but does not have a policy set.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all tables served from a specified instance.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#modifyColumnFamilies">modifyColumnFamilies(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Performs a series of column family modifications on the specified table. Either all or none of the modifications will occur before this method returns, but data requests received prior to that point may see a table where only some modifications have taken effect.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a specified table.</p>
<p class="toc_element">
  <code><a href="#restore">restore(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a new table by restoring from a completed backup. The returned table long-running operation can be used to track the progress of the operation, and to cancel it. The metadata field type is RestoreTableMetadata. The response type is Table, if successful.</p>
<p class="toc_element">
  <code><a href="#setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the access control policy on a Table or Backup resource. Replaces any existing policy.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns permissions that the caller has on the specified Table or Backup resource.</p>
<p class="toc_element">
  <code><a href="#undelete">undelete(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Restores a specified table which was accidentally deleted.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="checkConsistency">checkConsistency(name, body=None, x__xgafv=None)</code>
  <pre>Checks replication consistency based on a consistency token, that is, if replication has caught up based on the conditions specified in the token and the check request.

Args:
  name: string, Required. The unique name of the Table for which to check replication consistency. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for google.bigtable.admin.v2.BigtableTableAdmin.CheckConsistency
  &quot;consistencyToken&quot;: &quot;A String&quot;, # Required. The token created using GenerateConsistencyToken for the Table.
  &quot;standardReadRemoteWrites&quot;: { # Checks that all writes before the consistency token was generated is replicated in every cluster and readable. # Checks that reads using an app profile with `StandardIsolation` can see all writes committed before the token was created, even if the read and write target different clusters.
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for google.bigtable.admin.v2.BigtableTableAdmin.CheckConsistency
  &quot;consistent&quot;: True or False, # True only if the token is consistent. A token is consistent if replication has caught up with the restrictions specified in the request.
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new table in the specified instance. The table can be created with a full set of initial column families, specified in the request.

Args:
  parent: string, Required. The unique name of the instance in which to create the table. Values are of the form `projects/{project}/instances/{instance}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for google.bigtable.admin.v2.BigtableTableAdmin.CreateTable
  &quot;initialSplits&quot;: [ # The optional list of row keys that will be used to initially split the table into several tablets (tablets are similar to HBase regions). Given two split keys, `s1` and `s2`, three tablets will be created, spanning the key ranges: `[, s1), [s1, s2), [s2, )`. Example: * Row keys := `[&quot;a&quot;, &quot;apple&quot;, &quot;custom&quot;, &quot;customer_1&quot;, &quot;customer_2&quot;,` `&quot;other&quot;, &quot;zz&quot;]` * initial_split_keys := `[&quot;apple&quot;, &quot;customer_1&quot;, &quot;customer_2&quot;, &quot;other&quot;]` * Key assignment: - Tablet 1 `[, apple) =&gt; {&quot;a&quot;}.` - Tablet 2 `[apple, customer_1) =&gt; {&quot;apple&quot;, &quot;custom&quot;}.` - Tablet 3 `[customer_1, customer_2) =&gt; {&quot;customer_1&quot;}.` - Tablet 4 `[customer_2, other) =&gt; {&quot;customer_2&quot;}.` - Tablet 5 `[other, ) =&gt; {&quot;other&quot;, &quot;zz&quot;}.`
    { # An initial split point for a newly created table.
      &quot;key&quot;: &quot;A String&quot;, # Row key to use as an initial tablet boundary.
    },
  ],
  &quot;table&quot;: { # A collection of user data indexed by row, column, and timestamp. Each table is served using the resources of its parent cluster. # Required. The Table to create.
    &quot;changeStreamConfig&quot;: { # Change stream configuration. # If specified, enable the change stream on this table. Otherwise, the change stream is disabled and the change stream is not retained.
      &quot;retentionPeriod&quot;: &quot;A String&quot;, # How long the change stream should be retained. Change stream data older than the retention period will not be returned when reading the change stream from the table. Values must be at least 1 day and at most 7 days, and will be truncated to microsecond granularity.
    },
    &quot;clusterStates&quot;: { # Output only. Map from cluster ID to per-cluster table state. If it could not be determined whether or not the table has data in a particular cluster (for example, if its zone is unavailable), then there will be an entry for the cluster with UNKNOWN `replication_status`. Views: `REPLICATION_VIEW`, `ENCRYPTION_VIEW`, `FULL`
      &quot;a_key&quot;: { # The state of a table&#x27;s data in a particular cluster.
        &quot;encryptionInfo&quot;: [ # Output only. The encryption information for the table in this cluster. If the encryption key protecting this resource is customer managed, then its version can be rotated in Cloud Key Management Service (Cloud KMS). The primary version of the key and its status will be reflected here when changes propagate from Cloud KMS.
          { # Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.
            &quot;encryptionStatus&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # Output only. The status of encrypt/decrypt calls on underlying data for this resource. Regardless of status, the existing data is always encrypted at rest.
              &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
              &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
                {
                  &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                },
              ],
              &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
            },
            &quot;encryptionType&quot;: &quot;A String&quot;, # Output only. The type of encryption used to protect this resource.
            &quot;kmsKeyVersion&quot;: &quot;A String&quot;, # Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.
          },
        ],
        &quot;replicationState&quot;: &quot;A String&quot;, # Output only. The state of replication for the table in this cluster.
      },
    },
    &quot;columnFamilies&quot;: { # The column families configured for this table, mapped by column family ID. Views: `SCHEMA_VIEW`, `STATS_VIEW`, `FULL`
      &quot;a_key&quot;: { # A set of columns within a table which share a common configuration.
        &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
          &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
            &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
              # Object with schema name: GcRule
            ],
          },
          &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
          &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
          &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
            &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
              # Object with schema name: GcRule
            ],
          },
        },
        &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
          &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
          &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
          &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
        },
      },
    },
    &quot;deletionProtection&quot;: True or False, # Set to true to make the table protected against data loss. i.e. deleting the following resources through Admin APIs are prohibited: * The table. * The column families in the table. * The instance containing the table. Note one can still delete the data stored in the table through Data APIs.
    &quot;granularity&quot;: &quot;A String&quot;, # Immutable. The granularity (i.e. `MILLIS`) at which timestamps are stored in this table. Timestamps not matching the granularity will be rejected. If unspecified at creation time, the value will be set to `MILLIS`. Views: `SCHEMA_VIEW`, `FULL`.
    &quot;name&quot;: &quot;A String&quot;, # The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL`
    &quot;restoreInfo&quot;: { # Information about a table restore. # Output only. If this table was restored from another data source (e.g. a backup), this field will be populated with information about the restore.
      &quot;backupInfo&quot;: { # Information about a backup. # Information about the backup used to restore the table. The backup may no longer exist.
        &quot;backup&quot;: &quot;A String&quot;, # Output only. Name of the backup.
        &quot;endTime&quot;: &quot;A String&quot;, # Output only. This time that the backup was finished. Row data in the backup will be no newer than this timestamp.
        &quot;sourceBackup&quot;: &quot;A String&quot;, # Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//backups/.
        &quot;sourceTable&quot;: &quot;A String&quot;, # Output only. Name of the table the backup was created from.
        &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time that the backup was started. Row data in the backup will be no older than this timestamp.
      },
      &quot;sourceType&quot;: &quot;A String&quot;, # The type of the restore source.
    },
    &quot;stats&quot;: { # Approximate statistics related to a table. These statistics are calculated infrequently, while simultaneously, data in the table can change rapidly. Thus the values reported here (e.g. row count) are very likely out-of date, even the instant they are received in this API. Thus, only treat these values as approximate. IMPORTANT: Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about the entire table contents. For statistics about a specific column family, see ColumnFamilyStats in the mapped ColumnFamily collection above.
      &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column (column family, column qualifier) combinations, averaged over all columns in all rows in the table. e.g. A table with 2 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (4 cells / 2 columns) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (15 cells / 3 columns) would report (4 + 15)/(2 + 3) = 3.8 in this field.
      &quot;averageColumnsPerRow&quot;: 3.14, # How many (column family, column qualifier) combinations are present per row in the table, averaged over all rows in the table. e.g. A table with 2 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (2 distinct columns) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (3 distinct columns) would report (2 + 3)/2 = 2.5 in this field.
      &quot;logicalDataBytes&quot;: &quot;A String&quot;, # This is roughly how many bytes would be needed to read the entire table (e.g. by streaming all contents out).
      &quot;rowCount&quot;: &quot;A String&quot;, # How many rows are in the table.
    },
  },
  &quot;tableId&quot;: &quot;A String&quot;, # Required. The name by which the new table should be referred to within the parent instance, e.g., `foobar` rather than `{parent}/tables/foobar`. Maximum 50 characters.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A collection of user data indexed by row, column, and timestamp. Each table is served using the resources of its parent cluster.
  &quot;changeStreamConfig&quot;: { # Change stream configuration. # If specified, enable the change stream on this table. Otherwise, the change stream is disabled and the change stream is not retained.
    &quot;retentionPeriod&quot;: &quot;A String&quot;, # How long the change stream should be retained. Change stream data older than the retention period will not be returned when reading the change stream from the table. Values must be at least 1 day and at most 7 days, and will be truncated to microsecond granularity.
  },
  &quot;clusterStates&quot;: { # Output only. Map from cluster ID to per-cluster table state. If it could not be determined whether or not the table has data in a particular cluster (for example, if its zone is unavailable), then there will be an entry for the cluster with UNKNOWN `replication_status`. Views: `REPLICATION_VIEW`, `ENCRYPTION_VIEW`, `FULL`
    &quot;a_key&quot;: { # The state of a table&#x27;s data in a particular cluster.
      &quot;encryptionInfo&quot;: [ # Output only. The encryption information for the table in this cluster. If the encryption key protecting this resource is customer managed, then its version can be rotated in Cloud Key Management Service (Cloud KMS). The primary version of the key and its status will be reflected here when changes propagate from Cloud KMS.
        { # Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.
          &quot;encryptionStatus&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # Output only. The status of encrypt/decrypt calls on underlying data for this resource. Regardless of status, the existing data is always encrypted at rest.
            &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
              {
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            ],
            &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
          },
          &quot;encryptionType&quot;: &quot;A String&quot;, # Output only. The type of encryption used to protect this resource.
          &quot;kmsKeyVersion&quot;: &quot;A String&quot;, # Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.
        },
      ],
      &quot;replicationState&quot;: &quot;A String&quot;, # Output only. The state of replication for the table in this cluster.
    },
  },
  &quot;columnFamilies&quot;: { # The column families configured for this table, mapped by column family ID. Views: `SCHEMA_VIEW`, `STATS_VIEW`, `FULL`
    &quot;a_key&quot;: { # A set of columns within a table which share a common configuration.
      &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
        &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
          &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
            # Object with schema name: GcRule
          ],
        },
        &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
        &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
        &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
          &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
            # Object with schema name: GcRule
          ],
        },
      },
      &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
        &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
        &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
        &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
      },
    },
  },
  &quot;deletionProtection&quot;: True or False, # Set to true to make the table protected against data loss. i.e. deleting the following resources through Admin APIs are prohibited: * The table. * The column families in the table. * The instance containing the table. Note one can still delete the data stored in the table through Data APIs.
  &quot;granularity&quot;: &quot;A String&quot;, # Immutable. The granularity (i.e. `MILLIS`) at which timestamps are stored in this table. Timestamps not matching the granularity will be rejected. If unspecified at creation time, the value will be set to `MILLIS`. Views: `SCHEMA_VIEW`, `FULL`.
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL`
  &quot;restoreInfo&quot;: { # Information about a table restore. # Output only. If this table was restored from another data source (e.g. a backup), this field will be populated with information about the restore.
    &quot;backupInfo&quot;: { # Information about a backup. # Information about the backup used to restore the table. The backup may no longer exist.
      &quot;backup&quot;: &quot;A String&quot;, # Output only. Name of the backup.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. This time that the backup was finished. Row data in the backup will be no newer than this timestamp.
      &quot;sourceBackup&quot;: &quot;A String&quot;, # Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//backups/.
      &quot;sourceTable&quot;: &quot;A String&quot;, # Output only. Name of the table the backup was created from.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time that the backup was started. Row data in the backup will be no older than this timestamp.
    },
    &quot;sourceType&quot;: &quot;A String&quot;, # The type of the restore source.
  },
  &quot;stats&quot;: { # Approximate statistics related to a table. These statistics are calculated infrequently, while simultaneously, data in the table can change rapidly. Thus the values reported here (e.g. row count) are very likely out-of date, even the instant they are received in this API. Thus, only treat these values as approximate. IMPORTANT: Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about the entire table contents. For statistics about a specific column family, see ColumnFamilyStats in the mapped ColumnFamily collection above.
    &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column (column family, column qualifier) combinations, averaged over all columns in all rows in the table. e.g. A table with 2 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (4 cells / 2 columns) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (15 cells / 3 columns) would report (4 + 15)/(2 + 3) = 3.8 in this field.
    &quot;averageColumnsPerRow&quot;: 3.14, # How many (column family, column qualifier) combinations are present per row in the table, averaged over all rows in the table. e.g. A table with 2 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (2 distinct columns) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (3 distinct columns) would report (2 + 3)/2 = 2.5 in this field.
    &quot;logicalDataBytes&quot;: &quot;A String&quot;, # This is roughly how many bytes would be needed to read the entire table (e.g. by streaming all contents out).
    &quot;rowCount&quot;: &quot;A String&quot;, # How many rows are in the table.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Permanently deletes a specified table and all of its data.

Args:
  name: string, Required. The unique name of the table to be deleted. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="dropRowRange">dropRowRange(name, body=None, x__xgafv=None)</code>
  <pre>Permanently drop/delete a row range from a specified table. The request can specify whether to delete all rows in a table, or only those that match a particular prefix.

Args:
  name: string, Required. The unique name of the table on which to drop a range of rows. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for google.bigtable.admin.v2.BigtableTableAdmin.DropRowRange
  &quot;deleteAllDataFromTable&quot;: True or False, # Delete all rows in the table. Setting this to false is a no-op.
  &quot;rowKeyPrefix&quot;: &quot;A String&quot;, # Delete all rows that start with this row key prefix. Prefix cannot be zero length.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="generateConsistencyToken">generateConsistencyToken(name, body=None, x__xgafv=None)</code>
  <pre>Generates a consistency token for a Table, which can be used in CheckConsistency to check whether mutations to the table that finished before this call started have been replicated. The tokens will be available for 90 days.

Args:
  name: string, Required. The unique name of the Table for which to create a consistency token. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for google.bigtable.admin.v2.BigtableTableAdmin.GenerateConsistencyToken
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for google.bigtable.admin.v2.BigtableTableAdmin.GenerateConsistencyToken
  &quot;consistencyToken&quot;: &quot;A String&quot;, # The generated consistency token.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, view=None, x__xgafv=None)</code>
  <pre>Gets metadata information about the specified table.

Args:
  name: string, Required. The unique name of the requested table. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  view: string, The view to be applied to the returned table&#x27;s fields. Defaults to `SCHEMA_VIEW` if unspecified.
    Allowed values
      VIEW_UNSPECIFIED - Uses the default view for each method as documented in its request.
      NAME_ONLY - Only populates `name`.
      SCHEMA_VIEW - Only populates `name` and fields related to the table&#x27;s schema.
      REPLICATION_VIEW - Only populates `name` and fields related to the table&#x27;s replication state.
      ENCRYPTION_VIEW - Only populates `name` and fields related to the table&#x27;s encryption state.
      STATS_VIEW - Only populates `name` and fields related to the table&#x27;s stats (e.g. TableStats and ColumnFamilyStats).
      FULL - Populates all fields except for stats. See STATS_VIEW to request stats.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A collection of user data indexed by row, column, and timestamp. Each table is served using the resources of its parent cluster.
  &quot;changeStreamConfig&quot;: { # Change stream configuration. # If specified, enable the change stream on this table. Otherwise, the change stream is disabled and the change stream is not retained.
    &quot;retentionPeriod&quot;: &quot;A String&quot;, # How long the change stream should be retained. Change stream data older than the retention period will not be returned when reading the change stream from the table. Values must be at least 1 day and at most 7 days, and will be truncated to microsecond granularity.
  },
  &quot;clusterStates&quot;: { # Output only. Map from cluster ID to per-cluster table state. If it could not be determined whether or not the table has data in a particular cluster (for example, if its zone is unavailable), then there will be an entry for the cluster with UNKNOWN `replication_status`. Views: `REPLICATION_VIEW`, `ENCRYPTION_VIEW`, `FULL`
    &quot;a_key&quot;: { # The state of a table&#x27;s data in a particular cluster.
      &quot;encryptionInfo&quot;: [ # Output only. The encryption information for the table in this cluster. If the encryption key protecting this resource is customer managed, then its version can be rotated in Cloud Key Management Service (Cloud KMS). The primary version of the key and its status will be reflected here when changes propagate from Cloud KMS.
        { # Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.
          &quot;encryptionStatus&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # Output only. The status of encrypt/decrypt calls on underlying data for this resource. Regardless of status, the existing data is always encrypted at rest.
            &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
              {
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            ],
            &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
          },
          &quot;encryptionType&quot;: &quot;A String&quot;, # Output only. The type of encryption used to protect this resource.
          &quot;kmsKeyVersion&quot;: &quot;A String&quot;, # Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.
        },
      ],
      &quot;replicationState&quot;: &quot;A String&quot;, # Output only. The state of replication for the table in this cluster.
    },
  },
  &quot;columnFamilies&quot;: { # The column families configured for this table, mapped by column family ID. Views: `SCHEMA_VIEW`, `STATS_VIEW`, `FULL`
    &quot;a_key&quot;: { # A set of columns within a table which share a common configuration.
      &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
        &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
          &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
            # Object with schema name: GcRule
          ],
        },
        &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
        &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
        &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
          &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
            # Object with schema name: GcRule
          ],
        },
      },
      &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
        &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
        &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
        &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
      },
    },
  },
  &quot;deletionProtection&quot;: True or False, # Set to true to make the table protected against data loss. i.e. deleting the following resources through Admin APIs are prohibited: * The table. * The column families in the table. * The instance containing the table. Note one can still delete the data stored in the table through Data APIs.
  &quot;granularity&quot;: &quot;A String&quot;, # Immutable. The granularity (i.e. `MILLIS`) at which timestamps are stored in this table. Timestamps not matching the granularity will be rejected. If unspecified at creation time, the value will be set to `MILLIS`. Views: `SCHEMA_VIEW`, `FULL`.
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL`
  &quot;restoreInfo&quot;: { # Information about a table restore. # Output only. If this table was restored from another data source (e.g. a backup), this field will be populated with information about the restore.
    &quot;backupInfo&quot;: { # Information about a backup. # Information about the backup used to restore the table. The backup may no longer exist.
      &quot;backup&quot;: &quot;A String&quot;, # Output only. Name of the backup.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. This time that the backup was finished. Row data in the backup will be no newer than this timestamp.
      &quot;sourceBackup&quot;: &quot;A String&quot;, # Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//backups/.
      &quot;sourceTable&quot;: &quot;A String&quot;, # Output only. Name of the table the backup was created from.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time that the backup was started. Row data in the backup will be no older than this timestamp.
    },
    &quot;sourceType&quot;: &quot;A String&quot;, # The type of the restore source.
  },
  &quot;stats&quot;: { # Approximate statistics related to a table. These statistics are calculated infrequently, while simultaneously, data in the table can change rapidly. Thus the values reported here (e.g. row count) are very likely out-of date, even the instant they are received in this API. Thus, only treat these values as approximate. IMPORTANT: Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about the entire table contents. For statistics about a specific column family, see ColumnFamilyStats in the mapped ColumnFamily collection above.
    &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column (column family, column qualifier) combinations, averaged over all columns in all rows in the table. e.g. A table with 2 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (4 cells / 2 columns) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (15 cells / 3 columns) would report (4 + 15)/(2 + 3) = 3.8 in this field.
    &quot;averageColumnsPerRow&quot;: 3.14, # How many (column family, column qualifier) combinations are present per row in the table, averaged over all rows in the table. e.g. A table with 2 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (2 distinct columns) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (3 distinct columns) would report (2 + 3)/2 = 2.5 in this field.
    &quot;logicalDataBytes&quot;: &quot;A String&quot;, # This is roughly how many bytes would be needed to read the entire table (e.g. by streaming all contents out).
    &quot;rowCount&quot;: &quot;A String&quot;, # How many rows are in the table.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</code>
  <pre>Gets the access control policy for a Table or Backup resource. Returns an empty policy if the resource exists but does not have a policy set.

Args:
  resource: string, REQUIRED: The resource for which the policy is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `GetIamPolicy` method.
  &quot;options&quot;: { # Encapsulates settings provided to GetIamPolicy. # OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`.
    &quot;requestedPolicyVersion&quot;: 42, # Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members`, or principals, to a single `role`. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** ``` { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } ``` **YAML example:** ``` bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) etag: BwWWja0YfJA= version: 3 ``` For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
  &quot;auditConfigs&quot;: [ # Specifies cloud audit logging configuration for this policy.
    { # Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { &quot;audit_configs&quot;: [ { &quot;service&quot;: &quot;allServices&quot;, &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot;, &quot;exempted_members&quot;: [ &quot;user:jose@example.com&quot; ] }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot; }, { &quot;log_type&quot;: &quot;ADMIN_READ&quot; } ] }, { &quot;service&quot;: &quot;sampleservice.googleapis.com&quot;, &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot; }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot;, &quot;exempted_members&quot;: [ &quot;user:aliya@example.com&quot; ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts `jose@example.com` from DATA_READ logging, and `aliya@example.com` from DATA_WRITE logging.
      &quot;auditLogConfigs&quot;: [ # The configuration for logging of each type of permission.
        { # Provides the configuration for logging a type of permissions. Example: { &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot;, &quot;exempted_members&quot;: [ &quot;user:jose@example.com&quot; ] }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot; } ] } This enables &#x27;DATA_READ&#x27; and &#x27;DATA_WRITE&#x27; logging, while exempting jose@example.com from DATA_READ logging.
          &quot;exemptedMembers&quot;: [ # Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.
            &quot;A String&quot;,
          ],
          &quot;logType&quot;: &quot;A String&quot;, # The log type that this config enables.
        },
      ],
      &quot;service&quot;: &quot;A String&quot;, # Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
    },
  ],
  &quot;bindings&quot;: [ # Associates a list of `members`, or principals, with a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one principal. The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250 of these principals can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the `bindings` grant 50 different roles to `user:alice@example.com`, and not to any other principal, then you can add another 1,450 principals to the `bindings` in the `Policy`.
    { # Associates `members`, or principals, with a `role`.
      &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
        &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
        &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
        &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
        &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
      },
      &quot;members&quot;: [ # Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding.
        &quot;A String&quot;,
      ],
      &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
    },
  ],
  &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
  &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, view=None, x__xgafv=None)</code>
  <pre>Lists all tables served from a specified instance.

Args:
  parent: string, Required. The unique name of the instance for which tables should be listed. Values are of the form `projects/{project}/instances/{instance}`. (required)
  pageSize: integer, Maximum number of results per page. A page_size of zero lets the server choose the number of items to return. A page_size which is strictly positive will return at most that many items. A negative page_size will cause an error. Following the first request, subsequent paginated calls are not required to pass a page_size. If a page_size is set in subsequent calls, it must match the page_size given in the first request.
  pageToken: string, The value of `next_page_token` returned by a previous call.
  view: string, The view to be applied to the returned tables&#x27; fields. Only NAME_ONLY view (default), REPLICATION_VIEW and ENCRYPTION_VIEW are supported.
    Allowed values
      VIEW_UNSPECIFIED - Uses the default view for each method as documented in its request.
      NAME_ONLY - Only populates `name`.
      SCHEMA_VIEW - Only populates `name` and fields related to the table&#x27;s schema.
      REPLICATION_VIEW - Only populates `name` and fields related to the table&#x27;s replication state.
      ENCRYPTION_VIEW - Only populates `name` and fields related to the table&#x27;s encryption state.
      STATS_VIEW - Only populates `name` and fields related to the table&#x27;s stats (e.g. TableStats and ColumnFamilyStats).
      FULL - Populates all fields except for stats. See STATS_VIEW to request stats.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for google.bigtable.admin.v2.BigtableTableAdmin.ListTables
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Set if not all tables could be returned in a single response. Pass this value to `page_token` in another request to get the next page of results.
  &quot;tables&quot;: [ # The tables present in the requested instance.
    { # A collection of user data indexed by row, column, and timestamp. Each table is served using the resources of its parent cluster.
      &quot;changeStreamConfig&quot;: { # Change stream configuration. # If specified, enable the change stream on this table. Otherwise, the change stream is disabled and the change stream is not retained.
        &quot;retentionPeriod&quot;: &quot;A String&quot;, # How long the change stream should be retained. Change stream data older than the retention period will not be returned when reading the change stream from the table. Values must be at least 1 day and at most 7 days, and will be truncated to microsecond granularity.
      },
      &quot;clusterStates&quot;: { # Output only. Map from cluster ID to per-cluster table state. If it could not be determined whether or not the table has data in a particular cluster (for example, if its zone is unavailable), then there will be an entry for the cluster with UNKNOWN `replication_status`. Views: `REPLICATION_VIEW`, `ENCRYPTION_VIEW`, `FULL`
        &quot;a_key&quot;: { # The state of a table&#x27;s data in a particular cluster.
          &quot;encryptionInfo&quot;: [ # Output only. The encryption information for the table in this cluster. If the encryption key protecting this resource is customer managed, then its version can be rotated in Cloud Key Management Service (Cloud KMS). The primary version of the key and its status will be reflected here when changes propagate from Cloud KMS.
            { # Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.
              &quot;encryptionStatus&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # Output only. The status of encrypt/decrypt calls on underlying data for this resource. Regardless of status, the existing data is always encrypted at rest.
                &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
                &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
                  {
                    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                  },
                ],
                &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
              },
              &quot;encryptionType&quot;: &quot;A String&quot;, # Output only. The type of encryption used to protect this resource.
              &quot;kmsKeyVersion&quot;: &quot;A String&quot;, # Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.
            },
          ],
          &quot;replicationState&quot;: &quot;A String&quot;, # Output only. The state of replication for the table in this cluster.
        },
      },
      &quot;columnFamilies&quot;: { # The column families configured for this table, mapped by column family ID. Views: `SCHEMA_VIEW`, `STATS_VIEW`, `FULL`
        &quot;a_key&quot;: { # A set of columns within a table which share a common configuration.
          &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
            &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
              &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
                # Object with schema name: GcRule
              ],
            },
            &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
            &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
            &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
              &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
                # Object with schema name: GcRule
              ],
            },
          },
          &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
            &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
            &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
            &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
          },
        },
      },
      &quot;deletionProtection&quot;: True or False, # Set to true to make the table protected against data loss. i.e. deleting the following resources through Admin APIs are prohibited: * The table. * The column families in the table. * The instance containing the table. Note one can still delete the data stored in the table through Data APIs.
      &quot;granularity&quot;: &quot;A String&quot;, # Immutable. The granularity (i.e. `MILLIS`) at which timestamps are stored in this table. Timestamps not matching the granularity will be rejected. If unspecified at creation time, the value will be set to `MILLIS`. Views: `SCHEMA_VIEW`, `FULL`.
      &quot;name&quot;: &quot;A String&quot;, # The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL`
      &quot;restoreInfo&quot;: { # Information about a table restore. # Output only. If this table was restored from another data source (e.g. a backup), this field will be populated with information about the restore.
        &quot;backupInfo&quot;: { # Information about a backup. # Information about the backup used to restore the table. The backup may no longer exist.
          &quot;backup&quot;: &quot;A String&quot;, # Output only. Name of the backup.
          &quot;endTime&quot;: &quot;A String&quot;, # Output only. This time that the backup was finished. Row data in the backup will be no newer than this timestamp.
          &quot;sourceBackup&quot;: &quot;A String&quot;, # Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//backups/.
          &quot;sourceTable&quot;: &quot;A String&quot;, # Output only. Name of the table the backup was created from.
          &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time that the backup was started. Row data in the backup will be no older than this timestamp.
        },
        &quot;sourceType&quot;: &quot;A String&quot;, # The type of the restore source.
      },
      &quot;stats&quot;: { # Approximate statistics related to a table. These statistics are calculated infrequently, while simultaneously, data in the table can change rapidly. Thus the values reported here (e.g. row count) are very likely out-of date, even the instant they are received in this API. Thus, only treat these values as approximate. IMPORTANT: Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about the entire table contents. For statistics about a specific column family, see ColumnFamilyStats in the mapped ColumnFamily collection above.
        &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column (column family, column qualifier) combinations, averaged over all columns in all rows in the table. e.g. A table with 2 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (4 cells / 2 columns) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (15 cells / 3 columns) would report (4 + 15)/(2 + 3) = 3.8 in this field.
        &quot;averageColumnsPerRow&quot;: 3.14, # How many (column family, column qualifier) combinations are present per row in the table, averaged over all rows in the table. e.g. A table with 2 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (2 distinct columns) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (3 distinct columns) would report (2 + 3)/2 = 2.5 in this field.
        &quot;logicalDataBytes&quot;: &quot;A String&quot;, # This is roughly how many bytes would be needed to read the entire table (e.g. by streaming all contents out).
        &quot;rowCount&quot;: &quot;A String&quot;, # How many rows are in the table.
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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="modifyColumnFamilies">modifyColumnFamilies(name, body=None, x__xgafv=None)</code>
  <pre>Performs a series of column family modifications on the specified table. Either all or none of the modifications will occur before this method returns, but data requests received prior to that point may see a table where only some modifications have taken effect.

Args:
  name: string, Required. The unique name of the table whose families should be modified. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for google.bigtable.admin.v2.BigtableTableAdmin.ModifyColumnFamilies
  &quot;modifications&quot;: [ # Required. Modifications to be atomically applied to the specified table&#x27;s families. Entries are applied in order, meaning that earlier modifications can be masked by later ones (in the case of repeated updates to the same family, for example).
    { # A create, update, or delete of a particular column family.
      &quot;create&quot;: { # A set of columns within a table which share a common configuration. # Create a new column family with the specified schema, or fail if one already exists with the given ID.
        &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
          &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
            &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
              # Object with schema name: GcRule
            ],
          },
          &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
          &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
          &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
            &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
              # Object with schema name: GcRule
            ],
          },
        },
        &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
          &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
          &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
          &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
        },
      },
      &quot;drop&quot;: True or False, # Drop (delete) the column family with the given ID, or fail if no such family exists.
      &quot;id&quot;: &quot;A String&quot;, # The ID of the column family to be modified.
      &quot;update&quot;: { # A set of columns within a table which share a common configuration. # Update an existing column family to the specified schema, or fail if no column family exists with the given ID.
        &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
          &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
            &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
              # Object with schema name: GcRule
            ],
          },
          &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
          &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
          &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
            &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
              # Object with schema name: GcRule
            ],
          },
        },
        &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
          &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
          &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
          &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
        },
      },
    },
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A collection of user data indexed by row, column, and timestamp. Each table is served using the resources of its parent cluster.
  &quot;changeStreamConfig&quot;: { # Change stream configuration. # If specified, enable the change stream on this table. Otherwise, the change stream is disabled and the change stream is not retained.
    &quot;retentionPeriod&quot;: &quot;A String&quot;, # How long the change stream should be retained. Change stream data older than the retention period will not be returned when reading the change stream from the table. Values must be at least 1 day and at most 7 days, and will be truncated to microsecond granularity.
  },
  &quot;clusterStates&quot;: { # Output only. Map from cluster ID to per-cluster table state. If it could not be determined whether or not the table has data in a particular cluster (for example, if its zone is unavailable), then there will be an entry for the cluster with UNKNOWN `replication_status`. Views: `REPLICATION_VIEW`, `ENCRYPTION_VIEW`, `FULL`
    &quot;a_key&quot;: { # The state of a table&#x27;s data in a particular cluster.
      &quot;encryptionInfo&quot;: [ # Output only. The encryption information for the table in this cluster. If the encryption key protecting this resource is customer managed, then its version can be rotated in Cloud Key Management Service (Cloud KMS). The primary version of the key and its status will be reflected here when changes propagate from Cloud KMS.
        { # Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.
          &quot;encryptionStatus&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # Output only. The status of encrypt/decrypt calls on underlying data for this resource. Regardless of status, the existing data is always encrypted at rest.
            &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
              {
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            ],
            &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
          },
          &quot;encryptionType&quot;: &quot;A String&quot;, # Output only. The type of encryption used to protect this resource.
          &quot;kmsKeyVersion&quot;: &quot;A String&quot;, # Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.
        },
      ],
      &quot;replicationState&quot;: &quot;A String&quot;, # Output only. The state of replication for the table in this cluster.
    },
  },
  &quot;columnFamilies&quot;: { # The column families configured for this table, mapped by column family ID. Views: `SCHEMA_VIEW`, `STATS_VIEW`, `FULL`
    &quot;a_key&quot;: { # A set of columns within a table which share a common configuration.
      &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
        &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
          &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
            # Object with schema name: GcRule
          ],
        },
        &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
        &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
        &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
          &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
            # Object with schema name: GcRule
          ],
        },
      },
      &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
        &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
        &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
        &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
      },
    },
  },
  &quot;deletionProtection&quot;: True or False, # Set to true to make the table protected against data loss. i.e. deleting the following resources through Admin APIs are prohibited: * The table. * The column families in the table. * The instance containing the table. Note one can still delete the data stored in the table through Data APIs.
  &quot;granularity&quot;: &quot;A String&quot;, # Immutable. The granularity (i.e. `MILLIS`) at which timestamps are stored in this table. Timestamps not matching the granularity will be rejected. If unspecified at creation time, the value will be set to `MILLIS`. Views: `SCHEMA_VIEW`, `FULL`.
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL`
  &quot;restoreInfo&quot;: { # Information about a table restore. # Output only. If this table was restored from another data source (e.g. a backup), this field will be populated with information about the restore.
    &quot;backupInfo&quot;: { # Information about a backup. # Information about the backup used to restore the table. The backup may no longer exist.
      &quot;backup&quot;: &quot;A String&quot;, # Output only. Name of the backup.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. This time that the backup was finished. Row data in the backup will be no newer than this timestamp.
      &quot;sourceBackup&quot;: &quot;A String&quot;, # Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//backups/.
      &quot;sourceTable&quot;: &quot;A String&quot;, # Output only. Name of the table the backup was created from.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time that the backup was started. Row data in the backup will be no older than this timestamp.
    },
    &quot;sourceType&quot;: &quot;A String&quot;, # The type of the restore source.
  },
  &quot;stats&quot;: { # Approximate statistics related to a table. These statistics are calculated infrequently, while simultaneously, data in the table can change rapidly. Thus the values reported here (e.g. row count) are very likely out-of date, even the instant they are received in this API. Thus, only treat these values as approximate. IMPORTANT: Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about the entire table contents. For statistics about a specific column family, see ColumnFamilyStats in the mapped ColumnFamily collection above.
    &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column (column family, column qualifier) combinations, averaged over all columns in all rows in the table. e.g. A table with 2 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (4 cells / 2 columns) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (15 cells / 3 columns) would report (4 + 15)/(2 + 3) = 3.8 in this field.
    &quot;averageColumnsPerRow&quot;: 3.14, # How many (column family, column qualifier) combinations are present per row in the table, averaged over all rows in the table. e.g. A table with 2 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (2 distinct columns) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (3 distinct columns) would report (2 + 3)/2 = 2.5 in this field.
    &quot;logicalDataBytes&quot;: &quot;A String&quot;, # This is roughly how many bytes would be needed to read the entire table (e.g. by streaming all contents out).
    &quot;rowCount&quot;: &quot;A String&quot;, # How many rows are in the table.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a specified table.

Args:
  name: string, The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL` (required)
  body: object, The request body.
    The object takes the form of:

{ # A collection of user data indexed by row, column, and timestamp. Each table is served using the resources of its parent cluster.
  &quot;changeStreamConfig&quot;: { # Change stream configuration. # If specified, enable the change stream on this table. Otherwise, the change stream is disabled and the change stream is not retained.
    &quot;retentionPeriod&quot;: &quot;A String&quot;, # How long the change stream should be retained. Change stream data older than the retention period will not be returned when reading the change stream from the table. Values must be at least 1 day and at most 7 days, and will be truncated to microsecond granularity.
  },
  &quot;clusterStates&quot;: { # Output only. Map from cluster ID to per-cluster table state. If it could not be determined whether or not the table has data in a particular cluster (for example, if its zone is unavailable), then there will be an entry for the cluster with UNKNOWN `replication_status`. Views: `REPLICATION_VIEW`, `ENCRYPTION_VIEW`, `FULL`
    &quot;a_key&quot;: { # The state of a table&#x27;s data in a particular cluster.
      &quot;encryptionInfo&quot;: [ # Output only. The encryption information for the table in this cluster. If the encryption key protecting this resource is customer managed, then its version can be rotated in Cloud Key Management Service (Cloud KMS). The primary version of the key and its status will be reflected here when changes propagate from Cloud KMS.
        { # Encryption information for a given resource. If this resource is protected with customer managed encryption, the in-use Cloud Key Management Service (Cloud KMS) key version is specified along with its status.
          &quot;encryptionStatus&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # Output only. The status of encrypt/decrypt calls on underlying data for this resource. Regardless of status, the existing data is always encrypted at rest.
            &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
              {
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            ],
            &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
          },
          &quot;encryptionType&quot;: &quot;A String&quot;, # Output only. The type of encryption used to protect this resource.
          &quot;kmsKeyVersion&quot;: &quot;A String&quot;, # Output only. The version of the Cloud KMS key specified in the parent cluster that is in use for the data underlying this table.
        },
      ],
      &quot;replicationState&quot;: &quot;A String&quot;, # Output only. The state of replication for the table in this cluster.
    },
  },
  &quot;columnFamilies&quot;: { # The column families configured for this table, mapped by column family ID. Views: `SCHEMA_VIEW`, `STATS_VIEW`, `FULL`
    &quot;a_key&quot;: { # A set of columns within a table which share a common configuration.
      &quot;gcRule&quot;: { # Rule for determining which cells to delete during garbage collection. # Garbage collection rule specified as a protobuf. Must serialize to at most 500 bytes. NOTE: Garbage collection executes opportunistically in the background, and so it&#x27;s possible for reads to return a cell even if it matches the active GC expression for its family.
        &quot;intersection&quot;: { # A GcRule which deletes cells matching all of the given rules. # Delete cells that would be deleted by every nested rule.
          &quot;rules&quot;: [ # Only delete cells which would be deleted by every element of `rules`.
            # Object with schema name: GcRule
          ],
        },
        &quot;maxAge&quot;: &quot;A String&quot;, # Delete cells in a column older than the given age. Values must be at least one millisecond, and will be truncated to microsecond granularity.
        &quot;maxNumVersions&quot;: 42, # Delete all cells in a column except the most recent N.
        &quot;union&quot;: { # A GcRule which deletes cells matching any of the given rules. # Delete cells that would be deleted by any nested rule.
          &quot;rules&quot;: [ # Delete cells which would be deleted by any element of `rules`.
            # Object with schema name: GcRule
          ],
        },
      },
      &quot;stats&quot;: { # Approximate statistics related to a single column family within a table. This information may change rapidly, interpreting these values at a point in time may already preset out-of-date information. Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about column family contents. For statistics over an entire table, see TableStats above.
        &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column qualifier in this column family, averaged over all rows containing any column in the column family. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (3 cells / 1 column in &quot;family&quot;) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (8 cells / 2 columns in &quot;family&quot;) * A row with 3 cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (3 + 8 + 0)/(1 + 2 + 0) = 3.66 in this field.
        &quot;averageColumnsPerRow&quot;: 3.14, # How many column qualifiers are present in this column family, averaged over all rows in the table. e.g. For column family &quot;family&quot; in a table with 3 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (1 column in &quot;family&quot;) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (2 columns in &quot;family&quot;) * A row with cells in &quot;other:col&quot; (0 columns in &quot;family&quot;, &quot;family&quot; not present) would report (1 + 2 + 0)/3 = 1.5 in this field.
        &quot;logicalDataBytes&quot;: &quot;A String&quot;, # How much space the data in the column family occupies. This is roughly how many bytes would be needed to read the contents of the entire column family (e.g. by streaming all contents out).
      },
    },
  },
  &quot;deletionProtection&quot;: True or False, # Set to true to make the table protected against data loss. i.e. deleting the following resources through Admin APIs are prohibited: * The table. * The column families in the table. * The instance containing the table. Note one can still delete the data stored in the table through Data APIs.
  &quot;granularity&quot;: &quot;A String&quot;, # Immutable. The granularity (i.e. `MILLIS`) at which timestamps are stored in this table. Timestamps not matching the granularity will be rejected. If unspecified at creation time, the value will be set to `MILLIS`. Views: `SCHEMA_VIEW`, `FULL`.
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the table. Values are of the form `projects/{project}/instances/{instance}/tables/_a-zA-Z0-9*`. Views: `NAME_ONLY`, `SCHEMA_VIEW`, `REPLICATION_VIEW`, `STATS_VIEW`, `FULL`
  &quot;restoreInfo&quot;: { # Information about a table restore. # Output only. If this table was restored from another data source (e.g. a backup), this field will be populated with information about the restore.
    &quot;backupInfo&quot;: { # Information about a backup. # Information about the backup used to restore the table. The backup may no longer exist.
      &quot;backup&quot;: &quot;A String&quot;, # Output only. Name of the backup.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. This time that the backup was finished. Row data in the backup will be no newer than this timestamp.
      &quot;sourceBackup&quot;: &quot;A String&quot;, # Output only. Name of the backup from which this backup was copied. If a backup is not created by copying a backup, this field will be empty. Values are of the form: projects//instances//backups/.
      &quot;sourceTable&quot;: &quot;A String&quot;, # Output only. Name of the table the backup was created from.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. The time that the backup was started. Row data in the backup will be no older than this timestamp.
    },
    &quot;sourceType&quot;: &quot;A String&quot;, # The type of the restore source.
  },
  &quot;stats&quot;: { # Approximate statistics related to a table. These statistics are calculated infrequently, while simultaneously, data in the table can change rapidly. Thus the values reported here (e.g. row count) are very likely out-of date, even the instant they are received in this API. Thus, only treat these values as approximate. IMPORTANT: Everything below is approximate, unless otherwise specified. # Output only. Only available with STATS_VIEW, this includes summary statistics about the entire table contents. For statistics about a specific column family, see ColumnFamilyStats in the mapped ColumnFamily collection above.
    &quot;averageCellsPerColumn&quot;: 3.14, # How many cells are present per column (column family, column qualifier) combinations, averaged over all columns in all rows in the table. e.g. A table with 2 rows: * A row with 3 cells in &quot;family:col&quot; and 1 cell in &quot;other:col&quot; (4 cells / 2 columns) * A row with 1 cell in &quot;family:col&quot;, 7 cells in &quot;family:other_col&quot;, and 7 cells in &quot;other:data&quot; (15 cells / 3 columns) would report (4 + 15)/(2 + 3) = 3.8 in this field.
    &quot;averageColumnsPerRow&quot;: 3.14, # How many (column family, column qualifier) combinations are present per row in the table, averaged over all rows in the table. e.g. A table with 2 rows: * A row with cells in &quot;family:col&quot; and &quot;other:col&quot; (2 distinct columns) * A row with cells in &quot;family:col&quot;, &quot;family:other_col&quot;, and &quot;other:data&quot; (3 distinct columns) would report (2 + 3)/2 = 2.5 in this field.
    &quot;logicalDataBytes&quot;: &quot;A String&quot;, # This is roughly how many bytes would be needed to read the entire table (e.g. by streaming all contents out).
    &quot;rowCount&quot;: &quot;A String&quot;, # How many rows are in the table.
  },
}

  updateMask: string, Required. The list of fields to update. A mask specifying which fields (e.g. `change_stream_config`) in the `table` field should be updated. This mask is relative to the `table` field, not to the request message. The wildcard (*) path is currently not supported. Currently UpdateTable is only supported for the following fields: * `change_stream_config` * `change_stream_config.retention_period` * `deletion_protection` If `column_families` is set in `update_mask`, it will return an UNIMPLEMENTED error.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="restore">restore(parent, body=None, x__xgafv=None)</code>
  <pre>Create a new table by restoring from a completed backup. The returned table long-running operation can be used to track the progress of the operation, and to cancel it. The metadata field type is RestoreTableMetadata. The response type is Table, if successful.

Args:
  parent: string, Required. The name of the instance in which to create the restored table. Values are of the form `projects//instances/`. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request for RestoreTable.
  &quot;backup&quot;: &quot;A String&quot;, # Name of the backup from which to restore. Values are of the form `projects//instances//clusters//backups/`.
  &quot;tableId&quot;: &quot;A String&quot;, # Required. The id of the table to create and restore to. This table must not already exist. The `table_id` appended to `parent` forms the full table name of the form `projects//instances//tables/`.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</code>
  <pre>Sets the access control policy on a Table or Backup resource. Replaces any existing policy.

Args:
  resource: string, REQUIRED: The resource for which the policy is being specified. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `SetIamPolicy` method.
  &quot;policy&quot;: { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members`, or principals, to a single `role`. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** ``` { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } ``` **YAML example:** ``` bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) etag: BwWWja0YfJA= version: 3 ``` For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Google Cloud services (such as Projects) might reject them.
    &quot;auditConfigs&quot;: [ # Specifies cloud audit logging configuration for this policy.
      { # Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { &quot;audit_configs&quot;: [ { &quot;service&quot;: &quot;allServices&quot;, &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot;, &quot;exempted_members&quot;: [ &quot;user:jose@example.com&quot; ] }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot; }, { &quot;log_type&quot;: &quot;ADMIN_READ&quot; } ] }, { &quot;service&quot;: &quot;sampleservice.googleapis.com&quot;, &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot; }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot;, &quot;exempted_members&quot;: [ &quot;user:aliya@example.com&quot; ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts `jose@example.com` from DATA_READ logging, and `aliya@example.com` from DATA_WRITE logging.
        &quot;auditLogConfigs&quot;: [ # The configuration for logging of each type of permission.
          { # Provides the configuration for logging a type of permissions. Example: { &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot;, &quot;exempted_members&quot;: [ &quot;user:jose@example.com&quot; ] }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot; } ] } This enables &#x27;DATA_READ&#x27; and &#x27;DATA_WRITE&#x27; logging, while exempting jose@example.com from DATA_READ logging.
            &quot;exemptedMembers&quot;: [ # Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.
              &quot;A String&quot;,
            ],
            &quot;logType&quot;: &quot;A String&quot;, # The log type that this config enables.
          },
        ],
        &quot;service&quot;: &quot;A String&quot;, # Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
      },
    ],
    &quot;bindings&quot;: [ # Associates a list of `members`, or principals, with a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one principal. The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250 of these principals can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the `bindings` grant 50 different roles to `user:alice@example.com`, and not to any other principal, then you can add another 1,450 principals to the `bindings` in the `Policy`.
      { # Associates `members`, or principals, with a `role`.
        &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
          &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
          &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
          &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
          &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
        },
        &quot;members&quot;: [ # Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding.
          &quot;A String&quot;,
        ],
        &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
      },
    ],
    &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
    &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
  },
  &quot;updateMask&quot;: &quot;A String&quot;, # OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: &quot;bindings, etag&quot;`
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members`, or principals, to a single `role`. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** ``` { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } ``` **YAML example:** ``` bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) etag: BwWWja0YfJA= version: 3 ``` For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
  &quot;auditConfigs&quot;: [ # Specifies cloud audit logging configuration for this policy.
    { # Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { &quot;audit_configs&quot;: [ { &quot;service&quot;: &quot;allServices&quot;, &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot;, &quot;exempted_members&quot;: [ &quot;user:jose@example.com&quot; ] }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot; }, { &quot;log_type&quot;: &quot;ADMIN_READ&quot; } ] }, { &quot;service&quot;: &quot;sampleservice.googleapis.com&quot;, &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot; }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot;, &quot;exempted_members&quot;: [ &quot;user:aliya@example.com&quot; ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts `jose@example.com` from DATA_READ logging, and `aliya@example.com` from DATA_WRITE logging.
      &quot;auditLogConfigs&quot;: [ # The configuration for logging of each type of permission.
        { # Provides the configuration for logging a type of permissions. Example: { &quot;audit_log_configs&quot;: [ { &quot;log_type&quot;: &quot;DATA_READ&quot;, &quot;exempted_members&quot;: [ &quot;user:jose@example.com&quot; ] }, { &quot;log_type&quot;: &quot;DATA_WRITE&quot; } ] } This enables &#x27;DATA_READ&#x27; and &#x27;DATA_WRITE&#x27; logging, while exempting jose@example.com from DATA_READ logging.
          &quot;exemptedMembers&quot;: [ # Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.
            &quot;A String&quot;,
          ],
          &quot;logType&quot;: &quot;A String&quot;, # The log type that this config enables.
        },
      ],
      &quot;service&quot;: &quot;A String&quot;, # Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.
    },
  ],
  &quot;bindings&quot;: [ # Associates a list of `members`, or principals, with a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one principal. The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250 of these principals can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the `bindings` grant 50 different roles to `user:alice@example.com`, and not to any other principal, then you can add another 1,450 principals to the `bindings` in the `Policy`.
    { # Associates `members`, or principals, with a `role`.
      &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
        &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
        &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
        &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
        &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
      },
      &quot;members&quot;: [ # Specifies the principals requesting access for a Google Cloud resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a Google service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]`: An identifier for a [Kubernetes service account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts). For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding.
        &quot;A String&quot;,
      ],
      &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to the list of `members`, or principals. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
    },
  ],
  &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
  &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
}</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</code>
  <pre>Returns permissions that the caller has on the specified Table or Backup resource.

Args:
  resource: string, REQUIRED: The resource for which the policy detail is being requested. See [Resource names](https://cloud.google.com/apis/design/resource_names) for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `TestIamPermissions` method.
  &quot;permissions&quot;: [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as `*` or `storage.*`) are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
    &quot;A String&quot;,
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for `TestIamPermissions` method.
  &quot;permissions&quot;: [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="undelete">undelete(name, body=None, x__xgafv=None)</code>
  <pre>Restores a specified table which was accidentally deleted.

Args:
  name: string, Required. The unique name of the table to be restored. Values are of the form `projects/{project}/instances/{instance}/tables/{table}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for google.bigtable.admin.v2.BigtableTableAdmin.UndeleteTable
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

</body></html>