Home | History | Annotate | Download | only in dyn
      1 <html><body>
      2 <style>
      3 
      4 body, h1, h2, h3, div, span, p, pre, a {
      5   margin: 0;
      6   padding: 0;
      7   border: 0;
      8   font-weight: inherit;
      9   font-style: inherit;
     10   font-size: 100%;
     11   font-family: inherit;
     12   vertical-align: baseline;
     13 }
     14 
     15 body {
     16   font-size: 13px;
     17   padding: 1em;
     18 }
     19 
     20 h1 {
     21   font-size: 26px;
     22   margin-bottom: 1em;
     23 }
     24 
     25 h2 {
     26   font-size: 24px;
     27   margin-bottom: 1em;
     28 }
     29 
     30 h3 {
     31   font-size: 20px;
     32   margin-bottom: 1em;
     33   margin-top: 1em;
     34 }
     35 
     36 pre, code {
     37   line-height: 1.5;
     38   font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
     39 }
     40 
     41 pre {
     42   margin-top: 0.5em;
     43 }
     44 
     45 h1, h2, h3, p {
     46   font-family: Arial, sans serif;
     47 }
     48 
     49 h1, h2, h3 {
     50   border-bottom: solid #CCC 1px;
     51 }
     52 
     53 .toc_element {
     54   margin-top: 0.5em;
     55 }
     56 
     57 .firstline {
     58   margin-left: 2 em;
     59 }
     60 
     61 .method  {
     62   margin-top: 1em;
     63   border: solid 1px #CCC;
     64   padding: 1em;
     65   background: #EEE;
     66 }
     67 
     68 .details {
     69   font-weight: bold;
     70   font-size: 14px;
     71 }
     72 
     73 </style>
     74 
     75 <h1><a href="spanner_v1.html">Cloud Spanner API</a> . <a href="spanner_v1.projects.html">projects</a> . <a href="spanner_v1.projects.instances.html">instances</a> . <a href="spanner_v1.projects.instances.databases.html">databases</a> . <a href="spanner_v1.projects.instances.databases.sessions.html">sessions</a></h1>
     76 <h2>Instance Methods</h2>
     77 <p class="toc_element">
     78   <code><a href="#beginTransaction">beginTransaction(session, body, x__xgafv=None)</a></code></p>
     79 <p class="firstline">Begins a new transaction. This step can often be skipped:</p>
     80 <p class="toc_element">
     81   <code><a href="#commit">commit(session, body, x__xgafv=None)</a></code></p>
     82 <p class="firstline">Commits a transaction. The request includes the mutations to be</p>
     83 <p class="toc_element">
     84   <code><a href="#create">create(database, x__xgafv=None)</a></code></p>
     85 <p class="firstline">Creates a new session. A session can be used to perform</p>
     86 <p class="toc_element">
     87   <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
     88 <p class="firstline">Ends a session, releasing server resources associated with it.</p>
     89 <p class="toc_element">
     90   <code><a href="#executeSql">executeSql(session, body, x__xgafv=None)</a></code></p>
     91 <p class="firstline">Executes an SQL query, returning all rows in a single reply. This</p>
     92 <p class="toc_element">
     93   <code><a href="#executeStreamingSql">executeStreamingSql(session, body, x__xgafv=None)</a></code></p>
     94 <p class="firstline">Like ExecuteSql, except returns the result</p>
     95 <p class="toc_element">
     96   <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
     97 <p class="firstline">Gets a session. Returns `NOT_FOUND` if the session does not exist.</p>
     98 <p class="toc_element">
     99   <code><a href="#read">read(session, body, x__xgafv=None)</a></code></p>
    100 <p class="firstline">Reads rows from the database using key lookups and scans, as a</p>
    101 <p class="toc_element">
    102   <code><a href="#rollback">rollback(session, body, x__xgafv=None)</a></code></p>
    103 <p class="firstline">Rolls back a transaction, releasing any locks it holds. It is a good</p>
    104 <p class="toc_element">
    105   <code><a href="#streamingRead">streamingRead(session, body, x__xgafv=None)</a></code></p>
    106 <p class="firstline">Like Read, except returns the result set as a</p>
    107 <h3>Method Details</h3>
    108 <div class="method">
    109     <code class="details" id="beginTransaction">beginTransaction(session, body, x__xgafv=None)</code>
    110   <pre>Begins a new transaction. This step can often be skipped:
    111 Read, ExecuteSql and
    112 Commit can begin a new transaction as a
    113 side-effect.
    114 
    115 Args:
    116   session: string, Required. The session in which the transaction runs. (required)
    117   body: object, The request body. (required)
    118     The object takes the form of:
    119 
    120 { # The request for BeginTransaction.
    121     "options": { # # Transactions # Required. Options for the new transaction.
    122         #
    123         #
    124         # Each session can have at most one active transaction at a time. After the
    125         # active transaction is completed, the session can immediately be
    126         # re-used for the next transaction. It is not necessary to create a
    127         # new session for each transaction.
    128         #
    129         # # Transaction Modes
    130         #
    131         # Cloud Spanner supports two transaction modes:
    132         #
    133         #   1. Locking read-write. This type of transaction is the only way
    134         #      to write data into Cloud Spanner. These transactions rely on
    135         #      pessimistic locking and, if necessary, two-phase commit.
    136         #      Locking read-write transactions may abort, requiring the
    137         #      application to retry.
    138         #
    139         #   2. Snapshot read-only. This transaction type provides guaranteed
    140         #      consistency across several reads, but does not allow
    141         #      writes. Snapshot read-only transactions can be configured to
    142         #      read at timestamps in the past. Snapshot read-only
    143         #      transactions do not need to be committed.
    144         #
    145         # For transactions that only read, snapshot read-only transactions
    146         # provide simpler semantics and are almost always faster. In
    147         # particular, read-only transactions do not take locks, so they do
    148         # not conflict with read-write transactions. As a consequence of not
    149         # taking locks, they also do not abort, so retry loops are not needed.
    150         #
    151         # Transactions may only read/write data in a single database. They
    152         # may, however, read/write data in different tables within that
    153         # database.
    154         #
    155         # ## Locking Read-Write Transactions
    156         #
    157         # Locking transactions may be used to atomically read-modify-write
    158         # data anywhere in a database. This type of transaction is externally
    159         # consistent.
    160         #
    161         # Clients should attempt to minimize the amount of time a transaction
    162         # is active. Faster transactions commit with higher probability
    163         # and cause less contention. Cloud Spanner attempts to keep read locks
    164         # active as long as the transaction continues to do reads, and the
    165         # transaction has not been terminated by
    166         # Commit or
    167         # Rollback.  Long periods of
    168         # inactivity at the client may cause Cloud Spanner to release a
    169         # transaction's locks and abort it.
    170         #
    171         # Reads performed within a transaction acquire locks on the data
    172         # being read. Writes can only be done at commit time, after all reads
    173         # have been completed.
    174         # Conceptually, a read-write transaction consists of zero or more
    175         # reads or SQL queries followed by
    176         # Commit. At any time before
    177         # Commit, the client can send a
    178         # Rollback request to abort the
    179         # transaction.
    180         #
    181         # ### Semantics
    182         #
    183         # Cloud Spanner can commit the transaction if all read locks it acquired
    184         # are still valid at commit time, and it is able to acquire write
    185         # locks for all writes. Cloud Spanner can abort the transaction for any
    186         # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
    187         # that the transaction has not modified any user data in Cloud Spanner.
    188         #
    189         # Unless the transaction commits, Cloud Spanner makes no guarantees about
    190         # how long the transaction's locks were held for. It is an error to
    191         # use Cloud Spanner locks for any sort of mutual exclusion other than
    192         # between Cloud Spanner transactions themselves.
    193         #
    194         # ### Retrying Aborted Transactions
    195         #
    196         # When a transaction aborts, the application can choose to retry the
    197         # whole transaction again. To maximize the chances of successfully
    198         # committing the retry, the client should execute the retry in the
    199         # same session as the original attempt. The original session's lock
    200         # priority increases with each consecutive abort, meaning that each
    201         # attempt has a slightly better chance of success than the previous.
    202         #
    203         # Under some circumstances (e.g., many transactions attempting to
    204         # modify the same row(s)), a transaction can abort many times in a
    205         # short period before successfully committing. Thus, it is not a good
    206         # idea to cap the number of retries a transaction can attempt;
    207         # instead, it is better to limit the total amount of wall time spent
    208         # retrying.
    209         #
    210         # ### Idle Transactions
    211         #
    212         # A transaction is considered idle if it has no outstanding reads or
    213         # SQL queries and has not started a read or SQL query within the last 10
    214         # seconds. Idle transactions can be aborted by Cloud Spanner so that they
    215         # don't hold on to locks indefinitely. In that case, the commit will
    216         # fail with error `ABORTED`.
    217         #
    218         # If this behavior is undesirable, periodically executing a simple
    219         # SQL query in the transaction (e.g., `SELECT 1`) prevents the
    220         # transaction from becoming idle.
    221         #
    222         # ## Snapshot Read-Only Transactions
    223         #
    224         # Snapshot read-only transactions provides a simpler method than
    225         # locking read-write transactions for doing several consistent
    226         # reads. However, this type of transaction does not support writes.
    227         #
    228         # Snapshot transactions do not take locks. Instead, they work by
    229         # choosing a Cloud Spanner timestamp, then executing all reads at that
    230         # timestamp. Since they do not acquire locks, they do not block
    231         # concurrent read-write transactions.
    232         #
    233         # Unlike locking read-write transactions, snapshot read-only
    234         # transactions never abort. They can fail if the chosen read
    235         # timestamp is garbage collected; however, the default garbage
    236         # collection policy is generous enough that most applications do not
    237         # need to worry about this in practice.
    238         #
    239         # Snapshot read-only transactions do not need to call
    240         # Commit or
    241         # Rollback (and in fact are not
    242         # permitted to do so).
    243         #
    244         # To execute a snapshot transaction, the client specifies a timestamp
    245         # bound, which tells Cloud Spanner how to choose a read timestamp.
    246         #
    247         # The types of timestamp bound are:
    248         #
    249         #   - Strong (the default).
    250         #   - Bounded staleness.
    251         #   - Exact staleness.
    252         #
    253         # If the Cloud Spanner database to be read is geographically distributed,
    254         # stale read-only transactions can execute more quickly than strong
    255         # or read-write transaction, because they are able to execute far
    256         # from the leader replica.
    257         #
    258         # Each type of timestamp bound is discussed in detail below.
    259         #
    260         # ### Strong
    261         #
    262         # Strong reads are guaranteed to see the effects of all transactions
    263         # that have committed before the start of the read. Furthermore, all
    264         # rows yielded by a single read are consistent with each other -- if
    265         # any part of the read observes a transaction, all parts of the read
    266         # see the transaction.
    267         #
    268         # Strong reads are not repeatable: two consecutive strong read-only
    269         # transactions might return inconsistent results if there are
    270         # concurrent writes. If consistency across reads is required, the
    271         # reads should be executed within a transaction or at an exact read
    272         # timestamp.
    273         #
    274         # See TransactionOptions.ReadOnly.strong.
    275         #
    276         # ### Exact Staleness
    277         #
    278         # These timestamp bounds execute reads at a user-specified
    279         # timestamp. Reads at a timestamp are guaranteed to see a consistent
    280         # prefix of the global transaction history: they observe
    281         # modifications done by all transactions with a commit timestamp <=
    282         # the read timestamp, and observe none of the modifications done by
    283         # transactions with a larger commit timestamp. They will block until
    284         # all conflicting transactions that may be assigned commit timestamps
    285         # <= the read timestamp have finished.
    286         #
    287         # The timestamp can either be expressed as an absolute Cloud Spanner commit
    288         # timestamp or a staleness relative to the current time.
    289         #
    290         # These modes do not require a "negotiation phase" to pick a
    291         # timestamp. As a result, they execute slightly faster than the
    292         # equivalent boundedly stale concurrency modes. On the other hand,
    293         # boundedly stale reads usually return fresher results.
    294         #
    295         # See TransactionOptions.ReadOnly.read_timestamp and
    296         # TransactionOptions.ReadOnly.exact_staleness.
    297         #
    298         # ### Bounded Staleness
    299         #
    300         # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
    301         # subject to a user-provided staleness bound. Cloud Spanner chooses the
    302         # newest timestamp within the staleness bound that allows execution
    303         # of the reads at the closest available replica without blocking.
    304         #
    305         # All rows yielded are consistent with each other -- if any part of
    306         # the read observes a transaction, all parts of the read see the
    307         # transaction. Boundedly stale reads are not repeatable: two stale
    308         # reads, even if they use the same staleness bound, can execute at
    309         # different timestamps and thus return inconsistent results.
    310         #
    311         # Boundedly stale reads execute in two phases: the first phase
    312         # negotiates a timestamp among all replicas needed to serve the
    313         # read. In the second phase, reads are executed at the negotiated
    314         # timestamp.
    315         #
    316         # As a result of the two phase execution, bounded staleness reads are
    317         # usually a little slower than comparable exact staleness
    318         # reads. However, they are typically able to return fresher
    319         # results, and are more likely to execute at the closest replica.
    320         #
    321         # Because the timestamp negotiation requires up-front knowledge of
    322         # which rows will be read, it can only be used with single-use
    323         # read-only transactions.
    324         #
    325         # See TransactionOptions.ReadOnly.max_staleness and
    326         # TransactionOptions.ReadOnly.min_read_timestamp.
    327         #
    328         # ### Old Read Timestamps and Garbage Collection
    329         #
    330         # Cloud Spanner continuously garbage collects deleted and overwritten data
    331         # in the background to reclaim storage space. This process is known
    332         # as "version GC". By default, version GC reclaims versions after they
    333         # are one hour old. Because of this, Cloud Spanner cannot perform reads
    334         # at read timestamps more than one hour in the past. This
    335         # restriction also applies to in-progress reads and/or SQL queries whose
    336         # timestamp become too old while executing. Reads and SQL queries with
    337         # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
    338       "readWrite": { # Options for read-write transactions. # Transaction may write.
    339           #
    340           # Authorization to begin a read-write transaction requires
    341           # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    342           # on the `session` resource.
    343       },
    344       "readOnly": { # Options for read-only transactions. # Transaction will not write.
    345           #
    346           # Authorization to begin a read-only transaction requires
    347           # `spanner.databases.beginReadOnlyTransaction` permission
    348           # on the `session` resource.
    349         "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
    350             #
    351             # This is useful for requesting fresher data than some previous
    352             # read, or data that is fresh enough to observe the effects of some
    353             # previously committed transaction whose timestamp is known.
    354             #
    355             # Note that this option can only be used in single-use transactions.
    356         "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
    357             # the Transaction message that describes the transaction.
    358         "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
    359             # seconds. Guarantees that all writes that have committed more
    360             # than the specified number of seconds ago are visible. Because
    361             # Cloud Spanner chooses the exact timestamp, this mode works even if
    362             # the client's local clock is substantially skewed from Cloud Spanner
    363             # commit timestamps.
    364             #
    365             # Useful for reading the freshest data available at a nearby
    366             # replica, while bounding the possible staleness if the local
    367             # replica has fallen behind.
    368             #
    369             # Note that this option can only be used in single-use
    370             # transactions.
    371         "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
    372             # old. The timestamp is chosen soon after the read is started.
    373             #
    374             # Guarantees that all writes that have committed more than the
    375             # specified number of seconds ago are visible. Because Cloud Spanner
    376             # chooses the exact timestamp, this mode works even if the client's
    377             # local clock is substantially skewed from Cloud Spanner commit
    378             # timestamps.
    379             #
    380             # Useful for reading at nearby replicas without the distributed
    381             # timestamp negotiation overhead of `max_staleness`.
    382         "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
    383             # reads at a specific timestamp are repeatable; the same read at
    384             # the same timestamp always returns the same data. If the
    385             # timestamp is in the future, the read will block until the
    386             # specified timestamp, modulo the read's deadline.
    387             #
    388             # Useful for large scale consistent reads such as mapreduces, or
    389             # for coordinating many reads against a consistent snapshot of the
    390             # data.
    391         "strong": True or False, # Read at a timestamp where all previously committed transactions
    392             # are visible.
    393       },
    394     },
    395   }
    396 
    397   x__xgafv: string, V1 error format.
    398     Allowed values
    399       1 - v1 error format
    400       2 - v2 error format
    401 
    402 Returns:
    403   An object of the form:
    404 
    405     { # A transaction.
    406     "readTimestamp": "A String", # For snapshot read-only transactions, the read timestamp chosen
    407         # for the transaction. Not returned by default: see
    408         # TransactionOptions.ReadOnly.return_read_timestamp.
    409     "id": "A String", # `id` may be used to identify the transaction in subsequent
    410         # Read,
    411         # ExecuteSql,
    412         # Commit, or
    413         # Rollback calls.
    414         #
    415         # Single-use read-only transactions do not have IDs, because
    416         # single-use transactions do not support multiple requests.
    417   }</pre>
    418 </div>
    419 
    420 <div class="method">
    421     <code class="details" id="commit">commit(session, body, x__xgafv=None)</code>
    422   <pre>Commits a transaction. The request includes the mutations to be
    423 applied to rows in the database.
    424 
    425 `Commit` might return an `ABORTED` error. This can occur at any time;
    426 commonly, the cause is conflicts with concurrent
    427 transactions. However, it can also happen for a variety of other
    428 reasons. If `Commit` returns `ABORTED`, the caller should re-attempt
    429 the transaction from the beginning, re-using the same session.
    430 
    431 Args:
    432   session: string, Required. The session in which the transaction to be committed is running. (required)
    433   body: object, The request body. (required)
    434     The object takes the form of:
    435 
    436 { # The request for Commit.
    437     "transactionId": "A String", # Commit a previously-started transaction.
    438     "mutations": [ # The mutations to be executed when this transaction commits. All
    439         # mutations are applied atomically, in the order they appear in
    440         # this list.
    441       { # A modification to one or more Cloud Spanner rows.  Mutations can be
    442           # applied to a Cloud Spanner database by sending them in a
    443           # Commit call.
    444         "insert": { # Arguments to insert, update, insert_or_update, and # Insert new rows in a table. If any of the rows already exist,
    445             # the write or transaction fails with error `ALREADY_EXISTS`.
    446             # replace operations.
    447           "table": "A String", # Required. The table whose rows will be written.
    448           "values": [ # The values to be written. `values` can contain more than one
    449               # list of values. If it does, then multiple rows are written, one
    450               # for each entry in `values`. Each list in `values` must have
    451               # exactly as many entries as there are entries in columns
    452               # above. Sending multiple lists is equivalent to sending multiple
    453               # `Mutation`s, each containing one `values` entry and repeating
    454               # table and columns. Individual values in each list are
    455               # encoded as described here.
    456             [
    457               "",
    458             ],
    459           ],
    460           "columns": [ # The names of the columns in table to be written.
    461               #
    462               # The list of columns must contain enough columns to allow
    463               # Cloud Spanner to derive values for all primary key columns in the
    464               # row(s) to be modified.
    465             "A String",
    466           ],
    467         },
    468         "replace": { # Arguments to insert, update, insert_or_update, and # Like insert, except that if the row already exists, it is
    469             # deleted, and the column values provided are inserted
    470             # instead. Unlike insert_or_update, this means any values not
    471             # explicitly written become `NULL`.
    472             # replace operations.
    473           "table": "A String", # Required. The table whose rows will be written.
    474           "values": [ # The values to be written. `values` can contain more than one
    475               # list of values. If it does, then multiple rows are written, one
    476               # for each entry in `values`. Each list in `values` must have
    477               # exactly as many entries as there are entries in columns
    478               # above. Sending multiple lists is equivalent to sending multiple
    479               # `Mutation`s, each containing one `values` entry and repeating
    480               # table and columns. Individual values in each list are
    481               # encoded as described here.
    482             [
    483               "",
    484             ],
    485           ],
    486           "columns": [ # The names of the columns in table to be written.
    487               #
    488               # The list of columns must contain enough columns to allow
    489               # Cloud Spanner to derive values for all primary key columns in the
    490               # row(s) to be modified.
    491             "A String",
    492           ],
    493         },
    494         "delete": { # Arguments to delete operations. # Delete rows from a table. Succeeds whether or not the named
    495             # rows were present.
    496           "table": "A String", # Required. The table whose rows will be deleted.
    497           "keySet": { # `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All # Required. The primary keys of the rows within table to delete.
    498               # the keys are expected to be in the same table or index. The keys need
    499               # not be sorted in any particular way.
    500               #
    501               # If the same key is specified multiple times in the set (for example
    502               # if two ranges, two keys, or a key and a range overlap), Cloud Spanner
    503               # behaves as if the key were only specified once.
    504             "ranges": [ # A list of key ranges. See KeyRange for more information about
    505                 # key range specifications.
    506               { # KeyRange represents a range of rows in a table or index.
    507                   #
    508                   # A range has a start key and an end key. These keys can be open or
    509                   # closed, indicating if the range includes rows with that key.
    510                   #
    511                   # Keys are represented by lists, where the ith value in the list
    512                   # corresponds to the ith component of the table or index primary key.
    513                   # Individual values are encoded as described here.
    514                   #
    515                   # For example, consider the following table definition:
    516                   #
    517                   #     CREATE TABLE UserEvents (
    518                   #       UserName STRING(MAX),
    519                   #       EventDate STRING(10)
    520                   #     ) PRIMARY KEY(UserName, EventDate);
    521                   #
    522                   # The following keys name rows in this table:
    523                   #
    524                   #     "Bob", "2014-09-23"
    525                   #
    526                   # Since the `UserEvents` table's `PRIMARY KEY` clause names two
    527                   # columns, each `UserEvents` key has two elements; the first is the
    528                   # `UserName`, and the second is the `EventDate`.
    529                   #
    530                   # Key ranges with multiple components are interpreted
    531                   # lexicographically by component using the table or index key's declared
    532                   # sort order. For example, the following range returns all events for
    533                   # user `"Bob"` that occurred in the year 2015:
    534                   #
    535                   #     "start_closed": ["Bob", "2015-01-01"]
    536                   #     "end_closed": ["Bob", "2015-12-31"]
    537                   #
    538                   # Start and end keys can omit trailing key components. This affects the
    539                   # inclusion and exclusion of rows that exactly match the provided key
    540                   # components: if the key is closed, then rows that exactly match the
    541                   # provided components are included; if the key is open, then rows
    542                   # that exactly match are not included.
    543                   #
    544                   # For example, the following range includes all events for `"Bob"` that
    545                   # occurred during and after the year 2000:
    546                   #
    547                   #     "start_closed": ["Bob", "2000-01-01"]
    548                   #     "end_closed": ["Bob"]
    549                   #
    550                   # The next example retrieves all events for `"Bob"`:
    551                   #
    552                   #     "start_closed": ["Bob"]
    553                   #     "end_closed": ["Bob"]
    554                   #
    555                   # To retrieve events before the year 2000:
    556                   #
    557                   #     "start_closed": ["Bob"]
    558                   #     "end_open": ["Bob", "2000-01-01"]
    559                   #
    560                   # The following range includes all rows in the table:
    561                   #
    562                   #     "start_closed": []
    563                   #     "end_closed": []
    564                   #
    565                   # This range returns all users whose `UserName` begins with any
    566                   # character from A to C:
    567                   #
    568                   #     "start_closed": ["A"]
    569                   #     "end_open": ["D"]
    570                   #
    571                   # This range returns all users whose `UserName` begins with B:
    572                   #
    573                   #     "start_closed": ["B"]
    574                   #     "end_open": ["C"]
    575                   #
    576                   # Key ranges honor column sort order. For example, suppose a table is
    577                   # defined as follows:
    578                   #
    579                   #     CREATE TABLE DescendingSortedTable {
    580                   #       Key INT64,
    581                   #       ...
    582                   #     ) PRIMARY KEY(Key DESC);
    583                   #
    584                   # The following range retrieves all rows with key values between 1
    585                   # and 100 inclusive:
    586                   #
    587                   #     "start_closed": ["100"]
    588                   #     "end_closed": ["1"]
    589                   #
    590                   # Note that 100 is passed as the start, and 1 is passed as the end,
    591                   # because `Key` is a descending column in the schema.
    592                 "endOpen": [ # If the end is open, then the range excludes rows whose first
    593                     # `len(end_open)` key columns exactly match `end_open`.
    594                   "",
    595                 ],
    596                 "startOpen": [ # If the start is open, then the range excludes rows whose first
    597                     # `len(start_open)` key columns exactly match `start_open`.
    598                   "",
    599                 ],
    600                 "endClosed": [ # If the end is closed, then the range includes all rows whose
    601                     # first `len(end_closed)` key columns exactly match `end_closed`.
    602                   "",
    603                 ],
    604                 "startClosed": [ # If the start is closed, then the range includes all rows whose
    605                     # first `len(start_closed)` key columns exactly match `start_closed`.
    606                   "",
    607                 ],
    608               },
    609             ],
    610             "keys": [ # A list of specific keys. Entries in `keys` should have exactly as
    611                 # many elements as there are columns in the primary or index key
    612                 # with which this `KeySet` is used.  Individual key values are
    613                 # encoded as described here.
    614               [
    615                 "",
    616               ],
    617             ],
    618             "all": True or False, # For convenience `all` can be set to `true` to indicate that this
    619                 # `KeySet` matches all keys in the table or index. Note that any keys
    620                 # specified in `keys` or `ranges` are only yielded once.
    621           },
    622         },
    623         "update": { # Arguments to insert, update, insert_or_update, and # Update existing rows in a table. If any of the rows does not
    624             # already exist, the transaction fails with error `NOT_FOUND`.
    625             # replace operations.
    626           "table": "A String", # Required. The table whose rows will be written.
    627           "values": [ # The values to be written. `values` can contain more than one
    628               # list of values. If it does, then multiple rows are written, one
    629               # for each entry in `values`. Each list in `values` must have
    630               # exactly as many entries as there are entries in columns
    631               # above. Sending multiple lists is equivalent to sending multiple
    632               # `Mutation`s, each containing one `values` entry and repeating
    633               # table and columns. Individual values in each list are
    634               # encoded as described here.
    635             [
    636               "",
    637             ],
    638           ],
    639           "columns": [ # The names of the columns in table to be written.
    640               #
    641               # The list of columns must contain enough columns to allow
    642               # Cloud Spanner to derive values for all primary key columns in the
    643               # row(s) to be modified.
    644             "A String",
    645           ],
    646         },
    647         "insertOrUpdate": { # Arguments to insert, update, insert_or_update, and # Like insert, except that if the row already exists, then
    648             # its column values are overwritten with the ones provided. Any
    649             # column values not explicitly written are preserved.
    650             # replace operations.
    651           "table": "A String", # Required. The table whose rows will be written.
    652           "values": [ # The values to be written. `values` can contain more than one
    653               # list of values. If it does, then multiple rows are written, one
    654               # for each entry in `values`. Each list in `values` must have
    655               # exactly as many entries as there are entries in columns
    656               # above. Sending multiple lists is equivalent to sending multiple
    657               # `Mutation`s, each containing one `values` entry and repeating
    658               # table and columns. Individual values in each list are
    659               # encoded as described here.
    660             [
    661               "",
    662             ],
    663           ],
    664           "columns": [ # The names of the columns in table to be written.
    665               #
    666               # The list of columns must contain enough columns to allow
    667               # Cloud Spanner to derive values for all primary key columns in the
    668               # row(s) to be modified.
    669             "A String",
    670           ],
    671         },
    672       },
    673     ],
    674     "singleUseTransaction": { # # Transactions # Execute mutations in a temporary transaction. Note that unlike
    675         # commit of a previously-started transaction, commit with a
    676         # temporary transaction is non-idempotent. That is, if the
    677         # `CommitRequest` is sent to Cloud Spanner more than once (for
    678         # instance, due to retries in the application, or in the
    679         # transport library), it is possible that the mutations are
    680         # executed more than once. If this is undesirable, use
    681         # BeginTransaction and
    682         # Commit instead.
    683         #
    684         #
    685         # Each session can have at most one active transaction at a time. After the
    686         # active transaction is completed, the session can immediately be
    687         # re-used for the next transaction. It is not necessary to create a
    688         # new session for each transaction.
    689         #
    690         # # Transaction Modes
    691         #
    692         # Cloud Spanner supports two transaction modes:
    693         #
    694         #   1. Locking read-write. This type of transaction is the only way
    695         #      to write data into Cloud Spanner. These transactions rely on
    696         #      pessimistic locking and, if necessary, two-phase commit.
    697         #      Locking read-write transactions may abort, requiring the
    698         #      application to retry.
    699         #
    700         #   2. Snapshot read-only. This transaction type provides guaranteed
    701         #      consistency across several reads, but does not allow
    702         #      writes. Snapshot read-only transactions can be configured to
    703         #      read at timestamps in the past. Snapshot read-only
    704         #      transactions do not need to be committed.
    705         #
    706         # For transactions that only read, snapshot read-only transactions
    707         # provide simpler semantics and are almost always faster. In
    708         # particular, read-only transactions do not take locks, so they do
    709         # not conflict with read-write transactions. As a consequence of not
    710         # taking locks, they also do not abort, so retry loops are not needed.
    711         #
    712         # Transactions may only read/write data in a single database. They
    713         # may, however, read/write data in different tables within that
    714         # database.
    715         #
    716         # ## Locking Read-Write Transactions
    717         #
    718         # Locking transactions may be used to atomically read-modify-write
    719         # data anywhere in a database. This type of transaction is externally
    720         # consistent.
    721         #
    722         # Clients should attempt to minimize the amount of time a transaction
    723         # is active. Faster transactions commit with higher probability
    724         # and cause less contention. Cloud Spanner attempts to keep read locks
    725         # active as long as the transaction continues to do reads, and the
    726         # transaction has not been terminated by
    727         # Commit or
    728         # Rollback.  Long periods of
    729         # inactivity at the client may cause Cloud Spanner to release a
    730         # transaction's locks and abort it.
    731         #
    732         # Reads performed within a transaction acquire locks on the data
    733         # being read. Writes can only be done at commit time, after all reads
    734         # have been completed.
    735         # Conceptually, a read-write transaction consists of zero or more
    736         # reads or SQL queries followed by
    737         # Commit. At any time before
    738         # Commit, the client can send a
    739         # Rollback request to abort the
    740         # transaction.
    741         #
    742         # ### Semantics
    743         #
    744         # Cloud Spanner can commit the transaction if all read locks it acquired
    745         # are still valid at commit time, and it is able to acquire write
    746         # locks for all writes. Cloud Spanner can abort the transaction for any
    747         # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
    748         # that the transaction has not modified any user data in Cloud Spanner.
    749         #
    750         # Unless the transaction commits, Cloud Spanner makes no guarantees about
    751         # how long the transaction's locks were held for. It is an error to
    752         # use Cloud Spanner locks for any sort of mutual exclusion other than
    753         # between Cloud Spanner transactions themselves.
    754         #
    755         # ### Retrying Aborted Transactions
    756         #
    757         # When a transaction aborts, the application can choose to retry the
    758         # whole transaction again. To maximize the chances of successfully
    759         # committing the retry, the client should execute the retry in the
    760         # same session as the original attempt. The original session's lock
    761         # priority increases with each consecutive abort, meaning that each
    762         # attempt has a slightly better chance of success than the previous.
    763         #
    764         # Under some circumstances (e.g., many transactions attempting to
    765         # modify the same row(s)), a transaction can abort many times in a
    766         # short period before successfully committing. Thus, it is not a good
    767         # idea to cap the number of retries a transaction can attempt;
    768         # instead, it is better to limit the total amount of wall time spent
    769         # retrying.
    770         #
    771         # ### Idle Transactions
    772         #
    773         # A transaction is considered idle if it has no outstanding reads or
    774         # SQL queries and has not started a read or SQL query within the last 10
    775         # seconds. Idle transactions can be aborted by Cloud Spanner so that they
    776         # don't hold on to locks indefinitely. In that case, the commit will
    777         # fail with error `ABORTED`.
    778         #
    779         # If this behavior is undesirable, periodically executing a simple
    780         # SQL query in the transaction (e.g., `SELECT 1`) prevents the
    781         # transaction from becoming idle.
    782         #
    783         # ## Snapshot Read-Only Transactions
    784         #
    785         # Snapshot read-only transactions provides a simpler method than
    786         # locking read-write transactions for doing several consistent
    787         # reads. However, this type of transaction does not support writes.
    788         #
    789         # Snapshot transactions do not take locks. Instead, they work by
    790         # choosing a Cloud Spanner timestamp, then executing all reads at that
    791         # timestamp. Since they do not acquire locks, they do not block
    792         # concurrent read-write transactions.
    793         #
    794         # Unlike locking read-write transactions, snapshot read-only
    795         # transactions never abort. They can fail if the chosen read
    796         # timestamp is garbage collected; however, the default garbage
    797         # collection policy is generous enough that most applications do not
    798         # need to worry about this in practice.
    799         #
    800         # Snapshot read-only transactions do not need to call
    801         # Commit or
    802         # Rollback (and in fact are not
    803         # permitted to do so).
    804         #
    805         # To execute a snapshot transaction, the client specifies a timestamp
    806         # bound, which tells Cloud Spanner how to choose a read timestamp.
    807         #
    808         # The types of timestamp bound are:
    809         #
    810         #   - Strong (the default).
    811         #   - Bounded staleness.
    812         #   - Exact staleness.
    813         #
    814         # If the Cloud Spanner database to be read is geographically distributed,
    815         # stale read-only transactions can execute more quickly than strong
    816         # or read-write transaction, because they are able to execute far
    817         # from the leader replica.
    818         #
    819         # Each type of timestamp bound is discussed in detail below.
    820         #
    821         # ### Strong
    822         #
    823         # Strong reads are guaranteed to see the effects of all transactions
    824         # that have committed before the start of the read. Furthermore, all
    825         # rows yielded by a single read are consistent with each other -- if
    826         # any part of the read observes a transaction, all parts of the read
    827         # see the transaction.
    828         #
    829         # Strong reads are not repeatable: two consecutive strong read-only
    830         # transactions might return inconsistent results if there are
    831         # concurrent writes. If consistency across reads is required, the
    832         # reads should be executed within a transaction or at an exact read
    833         # timestamp.
    834         #
    835         # See TransactionOptions.ReadOnly.strong.
    836         #
    837         # ### Exact Staleness
    838         #
    839         # These timestamp bounds execute reads at a user-specified
    840         # timestamp. Reads at a timestamp are guaranteed to see a consistent
    841         # prefix of the global transaction history: they observe
    842         # modifications done by all transactions with a commit timestamp <=
    843         # the read timestamp, and observe none of the modifications done by
    844         # transactions with a larger commit timestamp. They will block until
    845         # all conflicting transactions that may be assigned commit timestamps
    846         # <= the read timestamp have finished.
    847         #
    848         # The timestamp can either be expressed as an absolute Cloud Spanner commit
    849         # timestamp or a staleness relative to the current time.
    850         #
    851         # These modes do not require a "negotiation phase" to pick a
    852         # timestamp. As a result, they execute slightly faster than the
    853         # equivalent boundedly stale concurrency modes. On the other hand,
    854         # boundedly stale reads usually return fresher results.
    855         #
    856         # See TransactionOptions.ReadOnly.read_timestamp and
    857         # TransactionOptions.ReadOnly.exact_staleness.
    858         #
    859         # ### Bounded Staleness
    860         #
    861         # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
    862         # subject to a user-provided staleness bound. Cloud Spanner chooses the
    863         # newest timestamp within the staleness bound that allows execution
    864         # of the reads at the closest available replica without blocking.
    865         #
    866         # All rows yielded are consistent with each other -- if any part of
    867         # the read observes a transaction, all parts of the read see the
    868         # transaction. Boundedly stale reads are not repeatable: two stale
    869         # reads, even if they use the same staleness bound, can execute at
    870         # different timestamps and thus return inconsistent results.
    871         #
    872         # Boundedly stale reads execute in two phases: the first phase
    873         # negotiates a timestamp among all replicas needed to serve the
    874         # read. In the second phase, reads are executed at the negotiated
    875         # timestamp.
    876         #
    877         # As a result of the two phase execution, bounded staleness reads are
    878         # usually a little slower than comparable exact staleness
    879         # reads. However, they are typically able to return fresher
    880         # results, and are more likely to execute at the closest replica.
    881         #
    882         # Because the timestamp negotiation requires up-front knowledge of
    883         # which rows will be read, it can only be used with single-use
    884         # read-only transactions.
    885         #
    886         # See TransactionOptions.ReadOnly.max_staleness and
    887         # TransactionOptions.ReadOnly.min_read_timestamp.
    888         #
    889         # ### Old Read Timestamps and Garbage Collection
    890         #
    891         # Cloud Spanner continuously garbage collects deleted and overwritten data
    892         # in the background to reclaim storage space. This process is known
    893         # as "version GC". By default, version GC reclaims versions after they
    894         # are one hour old. Because of this, Cloud Spanner cannot perform reads
    895         # at read timestamps more than one hour in the past. This
    896         # restriction also applies to in-progress reads and/or SQL queries whose
    897         # timestamp become too old while executing. Reads and SQL queries with
    898         # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
    899       "readWrite": { # Options for read-write transactions. # Transaction may write.
    900           #
    901           # Authorization to begin a read-write transaction requires
    902           # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    903           # on the `session` resource.
    904       },
    905       "readOnly": { # Options for read-only transactions. # Transaction will not write.
    906           #
    907           # Authorization to begin a read-only transaction requires
    908           # `spanner.databases.beginReadOnlyTransaction` permission
    909           # on the `session` resource.
    910         "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
    911             #
    912             # This is useful for requesting fresher data than some previous
    913             # read, or data that is fresh enough to observe the effects of some
    914             # previously committed transaction whose timestamp is known.
    915             #
    916             # Note that this option can only be used in single-use transactions.
    917         "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
    918             # the Transaction message that describes the transaction.
    919         "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
    920             # seconds. Guarantees that all writes that have committed more
    921             # than the specified number of seconds ago are visible. Because
    922             # Cloud Spanner chooses the exact timestamp, this mode works even if
    923             # the client's local clock is substantially skewed from Cloud Spanner
    924             # commit timestamps.
    925             #
    926             # Useful for reading the freshest data available at a nearby
    927             # replica, while bounding the possible staleness if the local
    928             # replica has fallen behind.
    929             #
    930             # Note that this option can only be used in single-use
    931             # transactions.
    932         "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
    933             # old. The timestamp is chosen soon after the read is started.
    934             #
    935             # Guarantees that all writes that have committed more than the
    936             # specified number of seconds ago are visible. Because Cloud Spanner
    937             # chooses the exact timestamp, this mode works even if the client's
    938             # local clock is substantially skewed from Cloud Spanner commit
    939             # timestamps.
    940             #
    941             # Useful for reading at nearby replicas without the distributed
    942             # timestamp negotiation overhead of `max_staleness`.
    943         "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
    944             # reads at a specific timestamp are repeatable; the same read at
    945             # the same timestamp always returns the same data. If the
    946             # timestamp is in the future, the read will block until the
    947             # specified timestamp, modulo the read's deadline.
    948             #
    949             # Useful for large scale consistent reads such as mapreduces, or
    950             # for coordinating many reads against a consistent snapshot of the
    951             # data.
    952         "strong": True or False, # Read at a timestamp where all previously committed transactions
    953             # are visible.
    954       },
    955     },
    956   }
    957 
    958   x__xgafv: string, V1 error format.
    959     Allowed values
    960       1 - v1 error format
    961       2 - v2 error format
    962 
    963 Returns:
    964   An object of the form:
    965 
    966     { # The response for Commit.
    967     "commitTimestamp": "A String", # The Cloud Spanner timestamp at which the transaction committed.
    968   }</pre>
    969 </div>
    970 
    971 <div class="method">
    972     <code class="details" id="create">create(database, x__xgafv=None)</code>
    973   <pre>Creates a new session. A session can be used to perform
    974 transactions that read and/or modify data in a Cloud Spanner database.
    975 Sessions are meant to be reused for many consecutive
    976 transactions.
    977 
    978 Sessions can only execute one transaction at a time. To execute
    979 multiple concurrent read-write/write-only transactions, create
    980 multiple sessions. Note that standalone reads and queries use a
    981 transaction internally, and count toward the one transaction
    982 limit.
    983 
    984 Cloud Spanner limits the number of sessions that can exist at any given
    985 time; thus, it is a good idea to delete idle and/or unneeded sessions.
    986 Aside from explicit deletes, Cloud Spanner can delete sessions for which no
    987 operations are sent for more than an hour. If a session is deleted,
    988 requests to it return `NOT_FOUND`.
    989 
    990 Idle sessions can be kept alive by sending a trivial SQL query
    991 periodically, e.g., `"SELECT 1"`.
    992 
    993 Args:
    994   database: string, Required. The database in which the new session is created. (required)
    995   x__xgafv: string, V1 error format.
    996     Allowed values
    997       1 - v1 error format
    998       2 - v2 error format
    999 
   1000 Returns:
   1001   An object of the form:
   1002 
   1003     { # A session in the Cloud Spanner API.
   1004     "name": "A String", # Required. The name of the session.
   1005   }</pre>
   1006 </div>
   1007 
   1008 <div class="method">
   1009     <code class="details" id="delete">delete(name, x__xgafv=None)</code>
   1010   <pre>Ends a session, releasing server resources associated with it.
   1011 
   1012 Args:
   1013   name: string, Required. The name of the session to delete. (required)
   1014   x__xgafv: string, V1 error format.
   1015     Allowed values
   1016       1 - v1 error format
   1017       2 - v2 error format
   1018 
   1019 Returns:
   1020   An object of the form:
   1021 
   1022     { # A generic empty message that you can re-use to avoid defining duplicated
   1023       # empty messages in your APIs. A typical example is to use it as the request
   1024       # or the response type of an API method. For instance:
   1025       #
   1026       #     service Foo {
   1027       #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
   1028       #     }
   1029       #
   1030       # The JSON representation for `Empty` is empty JSON object `{}`.
   1031   }</pre>
   1032 </div>
   1033 
   1034 <div class="method">
   1035     <code class="details" id="executeSql">executeSql(session, body, x__xgafv=None)</code>
   1036   <pre>Executes an SQL query, returning all rows in a single reply. This
   1037 method cannot be used to return a result set larger than 10 MiB;
   1038 if the query yields more data than that, the query fails with
   1039 a `FAILED_PRECONDITION` error.
   1040 
   1041 Queries inside read-write transactions might return `ABORTED`. If
   1042 this occurs, the application should restart the transaction from
   1043 the beginning. See Transaction for more details.
   1044 
   1045 Larger result sets can be fetched in streaming fashion by calling
   1046 ExecuteStreamingSql instead.
   1047 
   1048 Args:
   1049   session: string, Required. The session in which the SQL query should be performed. (required)
   1050   body: object, The request body. (required)
   1051     The object takes the form of:
   1052 
   1053 { # The request for ExecuteSql and
   1054       # ExecuteStreamingSql.
   1055     "transaction": { # This message is used to select the transaction in which a # The transaction to use. If none is provided, the default is a
   1056         # temporary read-only transaction with strong concurrency.
   1057         # Read or
   1058         # ExecuteSql call runs.
   1059         #
   1060         # See TransactionOptions for more information about transactions.
   1061       "begin": { # # Transactions # Begin a new transaction and execute this read or SQL query in
   1062           # it. The transaction ID of the new transaction is returned in
   1063           # ResultSetMetadata.transaction, which is a Transaction.
   1064           #
   1065           #
   1066           # Each session can have at most one active transaction at a time. After the
   1067           # active transaction is completed, the session can immediately be
   1068           # re-used for the next transaction. It is not necessary to create a
   1069           # new session for each transaction.
   1070           #
   1071           # # Transaction Modes
   1072           #
   1073           # Cloud Spanner supports two transaction modes:
   1074           #
   1075           #   1. Locking read-write. This type of transaction is the only way
   1076           #      to write data into Cloud Spanner. These transactions rely on
   1077           #      pessimistic locking and, if necessary, two-phase commit.
   1078           #      Locking read-write transactions may abort, requiring the
   1079           #      application to retry.
   1080           #
   1081           #   2. Snapshot read-only. This transaction type provides guaranteed
   1082           #      consistency across several reads, but does not allow
   1083           #      writes. Snapshot read-only transactions can be configured to
   1084           #      read at timestamps in the past. Snapshot read-only
   1085           #      transactions do not need to be committed.
   1086           #
   1087           # For transactions that only read, snapshot read-only transactions
   1088           # provide simpler semantics and are almost always faster. In
   1089           # particular, read-only transactions do not take locks, so they do
   1090           # not conflict with read-write transactions. As a consequence of not
   1091           # taking locks, they also do not abort, so retry loops are not needed.
   1092           #
   1093           # Transactions may only read/write data in a single database. They
   1094           # may, however, read/write data in different tables within that
   1095           # database.
   1096           #
   1097           # ## Locking Read-Write Transactions
   1098           #
   1099           # Locking transactions may be used to atomically read-modify-write
   1100           # data anywhere in a database. This type of transaction is externally
   1101           # consistent.
   1102           #
   1103           # Clients should attempt to minimize the amount of time a transaction
   1104           # is active. Faster transactions commit with higher probability
   1105           # and cause less contention. Cloud Spanner attempts to keep read locks
   1106           # active as long as the transaction continues to do reads, and the
   1107           # transaction has not been terminated by
   1108           # Commit or
   1109           # Rollback.  Long periods of
   1110           # inactivity at the client may cause Cloud Spanner to release a
   1111           # transaction's locks and abort it.
   1112           #
   1113           # Reads performed within a transaction acquire locks on the data
   1114           # being read. Writes can only be done at commit time, after all reads
   1115           # have been completed.
   1116           # Conceptually, a read-write transaction consists of zero or more
   1117           # reads or SQL queries followed by
   1118           # Commit. At any time before
   1119           # Commit, the client can send a
   1120           # Rollback request to abort the
   1121           # transaction.
   1122           #
   1123           # ### Semantics
   1124           #
   1125           # Cloud Spanner can commit the transaction if all read locks it acquired
   1126           # are still valid at commit time, and it is able to acquire write
   1127           # locks for all writes. Cloud Spanner can abort the transaction for any
   1128           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   1129           # that the transaction has not modified any user data in Cloud Spanner.
   1130           #
   1131           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   1132           # how long the transaction's locks were held for. It is an error to
   1133           # use Cloud Spanner locks for any sort of mutual exclusion other than
   1134           # between Cloud Spanner transactions themselves.
   1135           #
   1136           # ### Retrying Aborted Transactions
   1137           #
   1138           # When a transaction aborts, the application can choose to retry the
   1139           # whole transaction again. To maximize the chances of successfully
   1140           # committing the retry, the client should execute the retry in the
   1141           # same session as the original attempt. The original session's lock
   1142           # priority increases with each consecutive abort, meaning that each
   1143           # attempt has a slightly better chance of success than the previous.
   1144           #
   1145           # Under some circumstances (e.g., many transactions attempting to
   1146           # modify the same row(s)), a transaction can abort many times in a
   1147           # short period before successfully committing. Thus, it is not a good
   1148           # idea to cap the number of retries a transaction can attempt;
   1149           # instead, it is better to limit the total amount of wall time spent
   1150           # retrying.
   1151           #
   1152           # ### Idle Transactions
   1153           #
   1154           # A transaction is considered idle if it has no outstanding reads or
   1155           # SQL queries and has not started a read or SQL query within the last 10
   1156           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   1157           # don't hold on to locks indefinitely. In that case, the commit will
   1158           # fail with error `ABORTED`.
   1159           #
   1160           # If this behavior is undesirable, periodically executing a simple
   1161           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   1162           # transaction from becoming idle.
   1163           #
   1164           # ## Snapshot Read-Only Transactions
   1165           #
   1166           # Snapshot read-only transactions provides a simpler method than
   1167           # locking read-write transactions for doing several consistent
   1168           # reads. However, this type of transaction does not support writes.
   1169           #
   1170           # Snapshot transactions do not take locks. Instead, they work by
   1171           # choosing a Cloud Spanner timestamp, then executing all reads at that
   1172           # timestamp. Since they do not acquire locks, they do not block
   1173           # concurrent read-write transactions.
   1174           #
   1175           # Unlike locking read-write transactions, snapshot read-only
   1176           # transactions never abort. They can fail if the chosen read
   1177           # timestamp is garbage collected; however, the default garbage
   1178           # collection policy is generous enough that most applications do not
   1179           # need to worry about this in practice.
   1180           #
   1181           # Snapshot read-only transactions do not need to call
   1182           # Commit or
   1183           # Rollback (and in fact are not
   1184           # permitted to do so).
   1185           #
   1186           # To execute a snapshot transaction, the client specifies a timestamp
   1187           # bound, which tells Cloud Spanner how to choose a read timestamp.
   1188           #
   1189           # The types of timestamp bound are:
   1190           #
   1191           #   - Strong (the default).
   1192           #   - Bounded staleness.
   1193           #   - Exact staleness.
   1194           #
   1195           # If the Cloud Spanner database to be read is geographically distributed,
   1196           # stale read-only transactions can execute more quickly than strong
   1197           # or read-write transaction, because they are able to execute far
   1198           # from the leader replica.
   1199           #
   1200           # Each type of timestamp bound is discussed in detail below.
   1201           #
   1202           # ### Strong
   1203           #
   1204           # Strong reads are guaranteed to see the effects of all transactions
   1205           # that have committed before the start of the read. Furthermore, all
   1206           # rows yielded by a single read are consistent with each other -- if
   1207           # any part of the read observes a transaction, all parts of the read
   1208           # see the transaction.
   1209           #
   1210           # Strong reads are not repeatable: two consecutive strong read-only
   1211           # transactions might return inconsistent results if there are
   1212           # concurrent writes. If consistency across reads is required, the
   1213           # reads should be executed within a transaction or at an exact read
   1214           # timestamp.
   1215           #
   1216           # See TransactionOptions.ReadOnly.strong.
   1217           #
   1218           # ### Exact Staleness
   1219           #
   1220           # These timestamp bounds execute reads at a user-specified
   1221           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   1222           # prefix of the global transaction history: they observe
   1223           # modifications done by all transactions with a commit timestamp <=
   1224           # the read timestamp, and observe none of the modifications done by
   1225           # transactions with a larger commit timestamp. They will block until
   1226           # all conflicting transactions that may be assigned commit timestamps
   1227           # <= the read timestamp have finished.
   1228           #
   1229           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   1230           # timestamp or a staleness relative to the current time.
   1231           #
   1232           # These modes do not require a "negotiation phase" to pick a
   1233           # timestamp. As a result, they execute slightly faster than the
   1234           # equivalent boundedly stale concurrency modes. On the other hand,
   1235           # boundedly stale reads usually return fresher results.
   1236           #
   1237           # See TransactionOptions.ReadOnly.read_timestamp and
   1238           # TransactionOptions.ReadOnly.exact_staleness.
   1239           #
   1240           # ### Bounded Staleness
   1241           #
   1242           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   1243           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   1244           # newest timestamp within the staleness bound that allows execution
   1245           # of the reads at the closest available replica without blocking.
   1246           #
   1247           # All rows yielded are consistent with each other -- if any part of
   1248           # the read observes a transaction, all parts of the read see the
   1249           # transaction. Boundedly stale reads are not repeatable: two stale
   1250           # reads, even if they use the same staleness bound, can execute at
   1251           # different timestamps and thus return inconsistent results.
   1252           #
   1253           # Boundedly stale reads execute in two phases: the first phase
   1254           # negotiates a timestamp among all replicas needed to serve the
   1255           # read. In the second phase, reads are executed at the negotiated
   1256           # timestamp.
   1257           #
   1258           # As a result of the two phase execution, bounded staleness reads are
   1259           # usually a little slower than comparable exact staleness
   1260           # reads. However, they are typically able to return fresher
   1261           # results, and are more likely to execute at the closest replica.
   1262           #
   1263           # Because the timestamp negotiation requires up-front knowledge of
   1264           # which rows will be read, it can only be used with single-use
   1265           # read-only transactions.
   1266           #
   1267           # See TransactionOptions.ReadOnly.max_staleness and
   1268           # TransactionOptions.ReadOnly.min_read_timestamp.
   1269           #
   1270           # ### Old Read Timestamps and Garbage Collection
   1271           #
   1272           # Cloud Spanner continuously garbage collects deleted and overwritten data
   1273           # in the background to reclaim storage space. This process is known
   1274           # as "version GC". By default, version GC reclaims versions after they
   1275           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   1276           # at read timestamps more than one hour in the past. This
   1277           # restriction also applies to in-progress reads and/or SQL queries whose
   1278           # timestamp become too old while executing. Reads and SQL queries with
   1279           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   1280         "readWrite": { # Options for read-write transactions. # Transaction may write.
   1281             #
   1282             # Authorization to begin a read-write transaction requires
   1283             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   1284             # on the `session` resource.
   1285         },
   1286         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   1287             #
   1288             # Authorization to begin a read-only transaction requires
   1289             # `spanner.databases.beginReadOnlyTransaction` permission
   1290             # on the `session` resource.
   1291           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   1292               #
   1293               # This is useful for requesting fresher data than some previous
   1294               # read, or data that is fresh enough to observe the effects of some
   1295               # previously committed transaction whose timestamp is known.
   1296               #
   1297               # Note that this option can only be used in single-use transactions.
   1298           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   1299               # the Transaction message that describes the transaction.
   1300           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   1301               # seconds. Guarantees that all writes that have committed more
   1302               # than the specified number of seconds ago are visible. Because
   1303               # Cloud Spanner chooses the exact timestamp, this mode works even if
   1304               # the client's local clock is substantially skewed from Cloud Spanner
   1305               # commit timestamps.
   1306               #
   1307               # Useful for reading the freshest data available at a nearby
   1308               # replica, while bounding the possible staleness if the local
   1309               # replica has fallen behind.
   1310               #
   1311               # Note that this option can only be used in single-use
   1312               # transactions.
   1313           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   1314               # old. The timestamp is chosen soon after the read is started.
   1315               #
   1316               # Guarantees that all writes that have committed more than the
   1317               # specified number of seconds ago are visible. Because Cloud Spanner
   1318               # chooses the exact timestamp, this mode works even if the client's
   1319               # local clock is substantially skewed from Cloud Spanner commit
   1320               # timestamps.
   1321               #
   1322               # Useful for reading at nearby replicas without the distributed
   1323               # timestamp negotiation overhead of `max_staleness`.
   1324           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   1325               # reads at a specific timestamp are repeatable; the same read at
   1326               # the same timestamp always returns the same data. If the
   1327               # timestamp is in the future, the read will block until the
   1328               # specified timestamp, modulo the read's deadline.
   1329               #
   1330               # Useful for large scale consistent reads such as mapreduces, or
   1331               # for coordinating many reads against a consistent snapshot of the
   1332               # data.
   1333           "strong": True or False, # Read at a timestamp where all previously committed transactions
   1334               # are visible.
   1335         },
   1336       },
   1337       "singleUse": { # # Transactions # Execute the read or SQL query in a temporary transaction.
   1338           # This is the most efficient way to execute a transaction that
   1339           # consists of a single SQL query.
   1340           #
   1341           #
   1342           # Each session can have at most one active transaction at a time. After the
   1343           # active transaction is completed, the session can immediately be
   1344           # re-used for the next transaction. It is not necessary to create a
   1345           # new session for each transaction.
   1346           #
   1347           # # Transaction Modes
   1348           #
   1349           # Cloud Spanner supports two transaction modes:
   1350           #
   1351           #   1. Locking read-write. This type of transaction is the only way
   1352           #      to write data into Cloud Spanner. These transactions rely on
   1353           #      pessimistic locking and, if necessary, two-phase commit.
   1354           #      Locking read-write transactions may abort, requiring the
   1355           #      application to retry.
   1356           #
   1357           #   2. Snapshot read-only. This transaction type provides guaranteed
   1358           #      consistency across several reads, but does not allow
   1359           #      writes. Snapshot read-only transactions can be configured to
   1360           #      read at timestamps in the past. Snapshot read-only
   1361           #      transactions do not need to be committed.
   1362           #
   1363           # For transactions that only read, snapshot read-only transactions
   1364           # provide simpler semantics and are almost always faster. In
   1365           # particular, read-only transactions do not take locks, so they do
   1366           # not conflict with read-write transactions. As a consequence of not
   1367           # taking locks, they also do not abort, so retry loops are not needed.
   1368           #
   1369           # Transactions may only read/write data in a single database. They
   1370           # may, however, read/write data in different tables within that
   1371           # database.
   1372           #
   1373           # ## Locking Read-Write Transactions
   1374           #
   1375           # Locking transactions may be used to atomically read-modify-write
   1376           # data anywhere in a database. This type of transaction is externally
   1377           # consistent.
   1378           #
   1379           # Clients should attempt to minimize the amount of time a transaction
   1380           # is active. Faster transactions commit with higher probability
   1381           # and cause less contention. Cloud Spanner attempts to keep read locks
   1382           # active as long as the transaction continues to do reads, and the
   1383           # transaction has not been terminated by
   1384           # Commit or
   1385           # Rollback.  Long periods of
   1386           # inactivity at the client may cause Cloud Spanner to release a
   1387           # transaction's locks and abort it.
   1388           #
   1389           # Reads performed within a transaction acquire locks on the data
   1390           # being read. Writes can only be done at commit time, after all reads
   1391           # have been completed.
   1392           # Conceptually, a read-write transaction consists of zero or more
   1393           # reads or SQL queries followed by
   1394           # Commit. At any time before
   1395           # Commit, the client can send a
   1396           # Rollback request to abort the
   1397           # transaction.
   1398           #
   1399           # ### Semantics
   1400           #
   1401           # Cloud Spanner can commit the transaction if all read locks it acquired
   1402           # are still valid at commit time, and it is able to acquire write
   1403           # locks for all writes. Cloud Spanner can abort the transaction for any
   1404           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   1405           # that the transaction has not modified any user data in Cloud Spanner.
   1406           #
   1407           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   1408           # how long the transaction's locks were held for. It is an error to
   1409           # use Cloud Spanner locks for any sort of mutual exclusion other than
   1410           # between Cloud Spanner transactions themselves.
   1411           #
   1412           # ### Retrying Aborted Transactions
   1413           #
   1414           # When a transaction aborts, the application can choose to retry the
   1415           # whole transaction again. To maximize the chances of successfully
   1416           # committing the retry, the client should execute the retry in the
   1417           # same session as the original attempt. The original session's lock
   1418           # priority increases with each consecutive abort, meaning that each
   1419           # attempt has a slightly better chance of success than the previous.
   1420           #
   1421           # Under some circumstances (e.g., many transactions attempting to
   1422           # modify the same row(s)), a transaction can abort many times in a
   1423           # short period before successfully committing. Thus, it is not a good
   1424           # idea to cap the number of retries a transaction can attempt;
   1425           # instead, it is better to limit the total amount of wall time spent
   1426           # retrying.
   1427           #
   1428           # ### Idle Transactions
   1429           #
   1430           # A transaction is considered idle if it has no outstanding reads or
   1431           # SQL queries and has not started a read or SQL query within the last 10
   1432           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   1433           # don't hold on to locks indefinitely. In that case, the commit will
   1434           # fail with error `ABORTED`.
   1435           #
   1436           # If this behavior is undesirable, periodically executing a simple
   1437           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   1438           # transaction from becoming idle.
   1439           #
   1440           # ## Snapshot Read-Only Transactions
   1441           #
   1442           # Snapshot read-only transactions provides a simpler method than
   1443           # locking read-write transactions for doing several consistent
   1444           # reads. However, this type of transaction does not support writes.
   1445           #
   1446           # Snapshot transactions do not take locks. Instead, they work by
   1447           # choosing a Cloud Spanner timestamp, then executing all reads at that
   1448           # timestamp. Since they do not acquire locks, they do not block
   1449           # concurrent read-write transactions.
   1450           #
   1451           # Unlike locking read-write transactions, snapshot read-only
   1452           # transactions never abort. They can fail if the chosen read
   1453           # timestamp is garbage collected; however, the default garbage
   1454           # collection policy is generous enough that most applications do not
   1455           # need to worry about this in practice.
   1456           #
   1457           # Snapshot read-only transactions do not need to call
   1458           # Commit or
   1459           # Rollback (and in fact are not
   1460           # permitted to do so).
   1461           #
   1462           # To execute a snapshot transaction, the client specifies a timestamp
   1463           # bound, which tells Cloud Spanner how to choose a read timestamp.
   1464           #
   1465           # The types of timestamp bound are:
   1466           #
   1467           #   - Strong (the default).
   1468           #   - Bounded staleness.
   1469           #   - Exact staleness.
   1470           #
   1471           # If the Cloud Spanner database to be read is geographically distributed,
   1472           # stale read-only transactions can execute more quickly than strong
   1473           # or read-write transaction, because they are able to execute far
   1474           # from the leader replica.
   1475           #
   1476           # Each type of timestamp bound is discussed in detail below.
   1477           #
   1478           # ### Strong
   1479           #
   1480           # Strong reads are guaranteed to see the effects of all transactions
   1481           # that have committed before the start of the read. Furthermore, all
   1482           # rows yielded by a single read are consistent with each other -- if
   1483           # any part of the read observes a transaction, all parts of the read
   1484           # see the transaction.
   1485           #
   1486           # Strong reads are not repeatable: two consecutive strong read-only
   1487           # transactions might return inconsistent results if there are
   1488           # concurrent writes. If consistency across reads is required, the
   1489           # reads should be executed within a transaction or at an exact read
   1490           # timestamp.
   1491           #
   1492           # See TransactionOptions.ReadOnly.strong.
   1493           #
   1494           # ### Exact Staleness
   1495           #
   1496           # These timestamp bounds execute reads at a user-specified
   1497           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   1498           # prefix of the global transaction history: they observe
   1499           # modifications done by all transactions with a commit timestamp <=
   1500           # the read timestamp, and observe none of the modifications done by
   1501           # transactions with a larger commit timestamp. They will block until
   1502           # all conflicting transactions that may be assigned commit timestamps
   1503           # <= the read timestamp have finished.
   1504           #
   1505           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   1506           # timestamp or a staleness relative to the current time.
   1507           #
   1508           # These modes do not require a "negotiation phase" to pick a
   1509           # timestamp. As a result, they execute slightly faster than the
   1510           # equivalent boundedly stale concurrency modes. On the other hand,
   1511           # boundedly stale reads usually return fresher results.
   1512           #
   1513           # See TransactionOptions.ReadOnly.read_timestamp and
   1514           # TransactionOptions.ReadOnly.exact_staleness.
   1515           #
   1516           # ### Bounded Staleness
   1517           #
   1518           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   1519           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   1520           # newest timestamp within the staleness bound that allows execution
   1521           # of the reads at the closest available replica without blocking.
   1522           #
   1523           # All rows yielded are consistent with each other -- if any part of
   1524           # the read observes a transaction, all parts of the read see the
   1525           # transaction. Boundedly stale reads are not repeatable: two stale
   1526           # reads, even if they use the same staleness bound, can execute at
   1527           # different timestamps and thus return inconsistent results.
   1528           #
   1529           # Boundedly stale reads execute in two phases: the first phase
   1530           # negotiates a timestamp among all replicas needed to serve the
   1531           # read. In the second phase, reads are executed at the negotiated
   1532           # timestamp.
   1533           #
   1534           # As a result of the two phase execution, bounded staleness reads are
   1535           # usually a little slower than comparable exact staleness
   1536           # reads. However, they are typically able to return fresher
   1537           # results, and are more likely to execute at the closest replica.
   1538           #
   1539           # Because the timestamp negotiation requires up-front knowledge of
   1540           # which rows will be read, it can only be used with single-use
   1541           # read-only transactions.
   1542           #
   1543           # See TransactionOptions.ReadOnly.max_staleness and
   1544           # TransactionOptions.ReadOnly.min_read_timestamp.
   1545           #
   1546           # ### Old Read Timestamps and Garbage Collection
   1547           #
   1548           # Cloud Spanner continuously garbage collects deleted and overwritten data
   1549           # in the background to reclaim storage space. This process is known
   1550           # as "version GC". By default, version GC reclaims versions after they
   1551           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   1552           # at read timestamps more than one hour in the past. This
   1553           # restriction also applies to in-progress reads and/or SQL queries whose
   1554           # timestamp become too old while executing. Reads and SQL queries with
   1555           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   1556         "readWrite": { # Options for read-write transactions. # Transaction may write.
   1557             #
   1558             # Authorization to begin a read-write transaction requires
   1559             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   1560             # on the `session` resource.
   1561         },
   1562         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   1563             #
   1564             # Authorization to begin a read-only transaction requires
   1565             # `spanner.databases.beginReadOnlyTransaction` permission
   1566             # on the `session` resource.
   1567           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   1568               #
   1569               # This is useful for requesting fresher data than some previous
   1570               # read, or data that is fresh enough to observe the effects of some
   1571               # previously committed transaction whose timestamp is known.
   1572               #
   1573               # Note that this option can only be used in single-use transactions.
   1574           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   1575               # the Transaction message that describes the transaction.
   1576           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   1577               # seconds. Guarantees that all writes that have committed more
   1578               # than the specified number of seconds ago are visible. Because
   1579               # Cloud Spanner chooses the exact timestamp, this mode works even if
   1580               # the client's local clock is substantially skewed from Cloud Spanner
   1581               # commit timestamps.
   1582               #
   1583               # Useful for reading the freshest data available at a nearby
   1584               # replica, while bounding the possible staleness if the local
   1585               # replica has fallen behind.
   1586               #
   1587               # Note that this option can only be used in single-use
   1588               # transactions.
   1589           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   1590               # old. The timestamp is chosen soon after the read is started.
   1591               #
   1592               # Guarantees that all writes that have committed more than the
   1593               # specified number of seconds ago are visible. Because Cloud Spanner
   1594               # chooses the exact timestamp, this mode works even if the client's
   1595               # local clock is substantially skewed from Cloud Spanner commit
   1596               # timestamps.
   1597               #
   1598               # Useful for reading at nearby replicas without the distributed
   1599               # timestamp negotiation overhead of `max_staleness`.
   1600           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   1601               # reads at a specific timestamp are repeatable; the same read at
   1602               # the same timestamp always returns the same data. If the
   1603               # timestamp is in the future, the read will block until the
   1604               # specified timestamp, modulo the read's deadline.
   1605               #
   1606               # Useful for large scale consistent reads such as mapreduces, or
   1607               # for coordinating many reads against a consistent snapshot of the
   1608               # data.
   1609           "strong": True or False, # Read at a timestamp where all previously committed transactions
   1610               # are visible.
   1611         },
   1612       },
   1613       "id": "A String", # Execute the read or SQL query in a previously-started transaction.
   1614     },
   1615     "resumeToken": "A String", # If this request is resuming a previously interrupted SQL query
   1616         # execution, `resume_token` should be copied from the last
   1617         # PartialResultSet yielded before the interruption. Doing this
   1618         # enables the new SQL query execution to resume where the last one left
   1619         # off. The rest of the request parameters must exactly match the
   1620         # request that yielded this token.
   1621     "paramTypes": { # It is not always possible for Cloud Spanner to infer the right SQL type
   1622         # from a JSON value.  For example, values of type `BYTES` and values
   1623         # of type `STRING` both appear in params as JSON strings.
   1624         # 
   1625         # In these cases, `param_types` can be used to specify the exact
   1626         # SQL type for some or all of the SQL query parameters. See the
   1627         # definition of Type for more information
   1628         # about SQL types.
   1629       "a_key": { # `Type` indicates the type of a Cloud Spanner value, as might be stored in a
   1630           # table cell or returned from an SQL query.
   1631         "structType": # Object with schema name: StructType # If code == STRUCT, then `struct_type`
   1632             # provides type information for the struct's fields.
   1633         "code": "A String", # Required. The TypeCode for this type.
   1634         "arrayElementType": # Object with schema name: Type # If code == ARRAY, then `array_element_type`
   1635             # is the type of the array elements.
   1636       },
   1637     },
   1638     "queryMode": "A String", # Used to control the amount of debugging information returned in
   1639         # ResultSetStats.
   1640     "sql": "A String", # Required. The SQL query string.
   1641     "params": { # The SQL query string can contain parameter placeholders. A parameter
   1642         # placeholder consists of `'@'` followed by the parameter
   1643         # name. Parameter names consist of any combination of letters,
   1644         # numbers, and underscores.
   1645         # 
   1646         # Parameters can appear anywhere that a literal value is expected.  The same
   1647         # parameter name can be used more than once, for example:
   1648         #   `"WHERE id > @msg_id AND id < @msg_id + 100"`
   1649         # 
   1650         # It is an error to execute an SQL query with unbound parameters.
   1651         # 
   1652         # Parameter values are specified using `params`, which is a JSON
   1653         # object whose keys are parameter names, and whose values are the
   1654         # corresponding parameter values.
   1655       "a_key": "", # Properties of the object.
   1656     },
   1657   }
   1658 
   1659   x__xgafv: string, V1 error format.
   1660     Allowed values
   1661       1 - v1 error format
   1662       2 - v2 error format
   1663 
   1664 Returns:
   1665   An object of the form:
   1666 
   1667     { # Results from Read or
   1668       # ExecuteSql.
   1669     "rows": [ # Each element in `rows` is a row whose format is defined by
   1670         # metadata.row_type. The ith element
   1671         # in each row matches the ith field in
   1672         # metadata.row_type. Elements are
   1673         # encoded based on type as described
   1674         # here.
   1675       [
   1676         "",
   1677       ],
   1678     ],
   1679     "stats": { # Additional statistics about a ResultSet or PartialResultSet. # Query plan and execution statistics for the query that produced this
   1680         # result set. These can be requested by setting
   1681         # ExecuteSqlRequest.query_mode.
   1682       "queryPlan": { # Contains an ordered list of nodes appearing in the query plan. # QueryPlan for the query associated with this result.
   1683         "planNodes": [ # The nodes in the query plan. Plan nodes are returned in pre-order starting
   1684             # with the plan root. Each PlanNode's `id` corresponds to its index in
   1685             # `plan_nodes`.
   1686           { # Node information for nodes appearing in a QueryPlan.plan_nodes.
   1687             "index": 42, # The `PlanNode`'s index in node list.
   1688             "kind": "A String", # Used to determine the type of node. May be needed for visualizing
   1689                 # different kinds of nodes differently. For example, If the node is a
   1690                 # SCALAR node, it will have a condensed representation
   1691                 # which can be used to directly embed a description of the node in its
   1692                 # parent.
   1693             "displayName": "A String", # The display name for the node.
   1694             "executionStats": { # The execution statistics associated with the node, contained in a group of
   1695                 # key-value pairs. Only present if the plan was returned as a result of a
   1696                 # profile query. For example, number of executions, number of rows/time per
   1697                 # execution etc.
   1698               "a_key": "", # Properties of the object.
   1699             },
   1700             "childLinks": [ # List of child node `index`es and their relationship to this parent.
   1701               { # Metadata associated with a parent-child relationship appearing in a
   1702                   # PlanNode.
   1703                 "variable": "A String", # Only present if the child node is SCALAR and corresponds
   1704                     # to an output variable of the parent node. The field carries the name of
   1705                     # the output variable.
   1706                     # For example, a `TableScan` operator that reads rows from a table will
   1707                     # have child links to the `SCALAR` nodes representing the output variables
   1708                     # created for each column that is read by the operator. The corresponding
   1709                     # `variable` fields will be set to the variable names assigned to the
   1710                     # columns.
   1711                 "childIndex": 42, # The node to which the link points.
   1712                 "type": "A String", # The type of the link. For example, in Hash Joins this could be used to
   1713                     # distinguish between the build child and the probe child, or in the case
   1714                     # of the child being an output variable, to represent the tag associated
   1715                     # with the output variable.
   1716               },
   1717             ],
   1718             "shortRepresentation": { # Condensed representation of a node and its subtree. Only present for # Condensed representation for SCALAR nodes.
   1719                 # `SCALAR` PlanNode(s).
   1720               "subqueries": { # A mapping of (subquery variable name) -> (subquery node id) for cases
   1721                   # where the `description` string of this node references a `SCALAR`
   1722                   # subquery contained in the expression subtree rooted at this node. The
   1723                   # referenced `SCALAR` subquery may not necessarily be a direct child of
   1724                   # this node.
   1725                 "a_key": 42,
   1726               },
   1727               "description": "A String", # A string representation of the expression subtree rooted at this node.
   1728             },
   1729             "metadata": { # Attributes relevant to the node contained in a group of key-value pairs.
   1730                 # For example, a Parameter Reference node could have the following
   1731                 # information in its metadata:
   1732                 #
   1733                 #     {
   1734                 #       "parameter_reference": "param1",
   1735                 #       "parameter_type": "array"
   1736                 #     }
   1737               "a_key": "", # Properties of the object.
   1738             },
   1739           },
   1740         ],
   1741       },
   1742       "queryStats": { # Aggregated statistics from the execution of the query. Only present when
   1743           # the query is profiled. For example, a query could return the statistics as
   1744           # follows:
   1745           #
   1746           #     {
   1747           #       "rows_returned": "3",
   1748           #       "elapsed_time": "1.22 secs",
   1749           #       "cpu_time": "1.19 secs"
   1750           #     }
   1751         "a_key": "", # Properties of the object.
   1752       },
   1753     },
   1754     "metadata": { # Metadata about a ResultSet or PartialResultSet. # Metadata about the result set, such as row type information.
   1755       "rowType": { # `StructType` defines the fields of a STRUCT type. # Indicates the field names and types for the rows in the result
   1756           # set.  For example, a SQL query like `"SELECT UserId, UserName FROM
   1757           # Users"` could return a `row_type` value like:
   1758           #
   1759           #     "fields": [
   1760           #       { "name": "UserId", "type": { "code": "INT64" } },
   1761           #       { "name": "UserName", "type": { "code": "STRING" } },
   1762           #     ]
   1763         "fields": [ # The list of fields that make up this struct. Order is
   1764             # significant, because values of this struct type are represented as
   1765             # lists, where the order of field values matches the order of
   1766             # fields in the StructType. In turn, the order of fields
   1767             # matches the order of columns in a read request, or the order of
   1768             # fields in the `SELECT` clause of a query.
   1769           { # Message representing a single field of a struct.
   1770             "type": { # `Type` indicates the type of a Cloud Spanner value, as might be stored in a # The type of the field.
   1771                 # table cell or returned from an SQL query.
   1772               "structType": # Object with schema name: StructType # If code == STRUCT, then `struct_type`
   1773                   # provides type information for the struct's fields.
   1774               "code": "A String", # Required. The TypeCode for this type.
   1775               "arrayElementType": # Object with schema name: Type # If code == ARRAY, then `array_element_type`
   1776                   # is the type of the array elements.
   1777             },
   1778             "name": "A String", # The name of the field. For reads, this is the column name. For
   1779                 # SQL queries, it is the column alias (e.g., `"Word"` in the
   1780                 # query `"SELECT 'hello' AS Word"`), or the column name (e.g.,
   1781                 # `"ColName"` in the query `"SELECT ColName FROM Table"`). Some
   1782                 # columns might have an empty name (e.g., !"SELECT
   1783                 # UPPER(ColName)"`). Note that a query result can contain
   1784                 # multiple fields with the same name.
   1785           },
   1786         ],
   1787       },
   1788       "transaction": { # A transaction. # If the read or SQL query began a transaction as a side-effect, the
   1789           # information about the new transaction is yielded here.
   1790         "readTimestamp": "A String", # For snapshot read-only transactions, the read timestamp chosen
   1791             # for the transaction. Not returned by default: see
   1792             # TransactionOptions.ReadOnly.return_read_timestamp.
   1793         "id": "A String", # `id` may be used to identify the transaction in subsequent
   1794             # Read,
   1795             # ExecuteSql,
   1796             # Commit, or
   1797             # Rollback calls.
   1798             #
   1799             # Single-use read-only transactions do not have IDs, because
   1800             # single-use transactions do not support multiple requests.
   1801       },
   1802     },
   1803   }</pre>
   1804 </div>
   1805 
   1806 <div class="method">
   1807     <code class="details" id="executeStreamingSql">executeStreamingSql(session, body, x__xgafv=None)</code>
   1808   <pre>Like ExecuteSql, except returns the result
   1809 set as a stream. Unlike ExecuteSql, there
   1810 is no limit on the size of the returned result set. However, no
   1811 individual row in the result set can exceed 100 MiB, and no
   1812 column value can exceed 10 MiB.
   1813 
   1814 Args:
   1815   session: string, Required. The session in which the SQL query should be performed. (required)
   1816   body: object, The request body. (required)
   1817     The object takes the form of:
   1818 
   1819 { # The request for ExecuteSql and
   1820       # ExecuteStreamingSql.
   1821     "transaction": { # This message is used to select the transaction in which a # The transaction to use. If none is provided, the default is a
   1822         # temporary read-only transaction with strong concurrency.
   1823         # Read or
   1824         # ExecuteSql call runs.
   1825         #
   1826         # See TransactionOptions for more information about transactions.
   1827       "begin": { # # Transactions # Begin a new transaction and execute this read or SQL query in
   1828           # it. The transaction ID of the new transaction is returned in
   1829           # ResultSetMetadata.transaction, which is a Transaction.
   1830           #
   1831           #
   1832           # Each session can have at most one active transaction at a time. After the
   1833           # active transaction is completed, the session can immediately be
   1834           # re-used for the next transaction. It is not necessary to create a
   1835           # new session for each transaction.
   1836           #
   1837           # # Transaction Modes
   1838           #
   1839           # Cloud Spanner supports two transaction modes:
   1840           #
   1841           #   1. Locking read-write. This type of transaction is the only way
   1842           #      to write data into Cloud Spanner. These transactions rely on
   1843           #      pessimistic locking and, if necessary, two-phase commit.
   1844           #      Locking read-write transactions may abort, requiring the
   1845           #      application to retry.
   1846           #
   1847           #   2. Snapshot read-only. This transaction type provides guaranteed
   1848           #      consistency across several reads, but does not allow
   1849           #      writes. Snapshot read-only transactions can be configured to
   1850           #      read at timestamps in the past. Snapshot read-only
   1851           #      transactions do not need to be committed.
   1852           #
   1853           # For transactions that only read, snapshot read-only transactions
   1854           # provide simpler semantics and are almost always faster. In
   1855           # particular, read-only transactions do not take locks, so they do
   1856           # not conflict with read-write transactions. As a consequence of not
   1857           # taking locks, they also do not abort, so retry loops are not needed.
   1858           #
   1859           # Transactions may only read/write data in a single database. They
   1860           # may, however, read/write data in different tables within that
   1861           # database.
   1862           #
   1863           # ## Locking Read-Write Transactions
   1864           #
   1865           # Locking transactions may be used to atomically read-modify-write
   1866           # data anywhere in a database. This type of transaction is externally
   1867           # consistent.
   1868           #
   1869           # Clients should attempt to minimize the amount of time a transaction
   1870           # is active. Faster transactions commit with higher probability
   1871           # and cause less contention. Cloud Spanner attempts to keep read locks
   1872           # active as long as the transaction continues to do reads, and the
   1873           # transaction has not been terminated by
   1874           # Commit or
   1875           # Rollback.  Long periods of
   1876           # inactivity at the client may cause Cloud Spanner to release a
   1877           # transaction's locks and abort it.
   1878           #
   1879           # Reads performed within a transaction acquire locks on the data
   1880           # being read. Writes can only be done at commit time, after all reads
   1881           # have been completed.
   1882           # Conceptually, a read-write transaction consists of zero or more
   1883           # reads or SQL queries followed by
   1884           # Commit. At any time before
   1885           # Commit, the client can send a
   1886           # Rollback request to abort the
   1887           # transaction.
   1888           #
   1889           # ### Semantics
   1890           #
   1891           # Cloud Spanner can commit the transaction if all read locks it acquired
   1892           # are still valid at commit time, and it is able to acquire write
   1893           # locks for all writes. Cloud Spanner can abort the transaction for any
   1894           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   1895           # that the transaction has not modified any user data in Cloud Spanner.
   1896           #
   1897           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   1898           # how long the transaction's locks were held for. It is an error to
   1899           # use Cloud Spanner locks for any sort of mutual exclusion other than
   1900           # between Cloud Spanner transactions themselves.
   1901           #
   1902           # ### Retrying Aborted Transactions
   1903           #
   1904           # When a transaction aborts, the application can choose to retry the
   1905           # whole transaction again. To maximize the chances of successfully
   1906           # committing the retry, the client should execute the retry in the
   1907           # same session as the original attempt. The original session's lock
   1908           # priority increases with each consecutive abort, meaning that each
   1909           # attempt has a slightly better chance of success than the previous.
   1910           #
   1911           # Under some circumstances (e.g., many transactions attempting to
   1912           # modify the same row(s)), a transaction can abort many times in a
   1913           # short period before successfully committing. Thus, it is not a good
   1914           # idea to cap the number of retries a transaction can attempt;
   1915           # instead, it is better to limit the total amount of wall time spent
   1916           # retrying.
   1917           #
   1918           # ### Idle Transactions
   1919           #
   1920           # A transaction is considered idle if it has no outstanding reads or
   1921           # SQL queries and has not started a read or SQL query within the last 10
   1922           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   1923           # don't hold on to locks indefinitely. In that case, the commit will
   1924           # fail with error `ABORTED`.
   1925           #
   1926           # If this behavior is undesirable, periodically executing a simple
   1927           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   1928           # transaction from becoming idle.
   1929           #
   1930           # ## Snapshot Read-Only Transactions
   1931           #
   1932           # Snapshot read-only transactions provides a simpler method than
   1933           # locking read-write transactions for doing several consistent
   1934           # reads. However, this type of transaction does not support writes.
   1935           #
   1936           # Snapshot transactions do not take locks. Instead, they work by
   1937           # choosing a Cloud Spanner timestamp, then executing all reads at that
   1938           # timestamp. Since they do not acquire locks, they do not block
   1939           # concurrent read-write transactions.
   1940           #
   1941           # Unlike locking read-write transactions, snapshot read-only
   1942           # transactions never abort. They can fail if the chosen read
   1943           # timestamp is garbage collected; however, the default garbage
   1944           # collection policy is generous enough that most applications do not
   1945           # need to worry about this in practice.
   1946           #
   1947           # Snapshot read-only transactions do not need to call
   1948           # Commit or
   1949           # Rollback (and in fact are not
   1950           # permitted to do so).
   1951           #
   1952           # To execute a snapshot transaction, the client specifies a timestamp
   1953           # bound, which tells Cloud Spanner how to choose a read timestamp.
   1954           #
   1955           # The types of timestamp bound are:
   1956           #
   1957           #   - Strong (the default).
   1958           #   - Bounded staleness.
   1959           #   - Exact staleness.
   1960           #
   1961           # If the Cloud Spanner database to be read is geographically distributed,
   1962           # stale read-only transactions can execute more quickly than strong
   1963           # or read-write transaction, because they are able to execute far
   1964           # from the leader replica.
   1965           #
   1966           # Each type of timestamp bound is discussed in detail below.
   1967           #
   1968           # ### Strong
   1969           #
   1970           # Strong reads are guaranteed to see the effects of all transactions
   1971           # that have committed before the start of the read. Furthermore, all
   1972           # rows yielded by a single read are consistent with each other -- if
   1973           # any part of the read observes a transaction, all parts of the read
   1974           # see the transaction.
   1975           #
   1976           # Strong reads are not repeatable: two consecutive strong read-only
   1977           # transactions might return inconsistent results if there are
   1978           # concurrent writes. If consistency across reads is required, the
   1979           # reads should be executed within a transaction or at an exact read
   1980           # timestamp.
   1981           #
   1982           # See TransactionOptions.ReadOnly.strong.
   1983           #
   1984           # ### Exact Staleness
   1985           #
   1986           # These timestamp bounds execute reads at a user-specified
   1987           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   1988           # prefix of the global transaction history: they observe
   1989           # modifications done by all transactions with a commit timestamp <=
   1990           # the read timestamp, and observe none of the modifications done by
   1991           # transactions with a larger commit timestamp. They will block until
   1992           # all conflicting transactions that may be assigned commit timestamps
   1993           # <= the read timestamp have finished.
   1994           #
   1995           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   1996           # timestamp or a staleness relative to the current time.
   1997           #
   1998           # These modes do not require a "negotiation phase" to pick a
   1999           # timestamp. As a result, they execute slightly faster than the
   2000           # equivalent boundedly stale concurrency modes. On the other hand,
   2001           # boundedly stale reads usually return fresher results.
   2002           #
   2003           # See TransactionOptions.ReadOnly.read_timestamp and
   2004           # TransactionOptions.ReadOnly.exact_staleness.
   2005           #
   2006           # ### Bounded Staleness
   2007           #
   2008           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   2009           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   2010           # newest timestamp within the staleness bound that allows execution
   2011           # of the reads at the closest available replica without blocking.
   2012           #
   2013           # All rows yielded are consistent with each other -- if any part of
   2014           # the read observes a transaction, all parts of the read see the
   2015           # transaction. Boundedly stale reads are not repeatable: two stale
   2016           # reads, even if they use the same staleness bound, can execute at
   2017           # different timestamps and thus return inconsistent results.
   2018           #
   2019           # Boundedly stale reads execute in two phases: the first phase
   2020           # negotiates a timestamp among all replicas needed to serve the
   2021           # read. In the second phase, reads are executed at the negotiated
   2022           # timestamp.
   2023           #
   2024           # As a result of the two phase execution, bounded staleness reads are
   2025           # usually a little slower than comparable exact staleness
   2026           # reads. However, they are typically able to return fresher
   2027           # results, and are more likely to execute at the closest replica.
   2028           #
   2029           # Because the timestamp negotiation requires up-front knowledge of
   2030           # which rows will be read, it can only be used with single-use
   2031           # read-only transactions.
   2032           #
   2033           # See TransactionOptions.ReadOnly.max_staleness and
   2034           # TransactionOptions.ReadOnly.min_read_timestamp.
   2035           #
   2036           # ### Old Read Timestamps and Garbage Collection
   2037           #
   2038           # Cloud Spanner continuously garbage collects deleted and overwritten data
   2039           # in the background to reclaim storage space. This process is known
   2040           # as "version GC". By default, version GC reclaims versions after they
   2041           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   2042           # at read timestamps more than one hour in the past. This
   2043           # restriction also applies to in-progress reads and/or SQL queries whose
   2044           # timestamp become too old while executing. Reads and SQL queries with
   2045           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   2046         "readWrite": { # Options for read-write transactions. # Transaction may write.
   2047             #
   2048             # Authorization to begin a read-write transaction requires
   2049             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   2050             # on the `session` resource.
   2051         },
   2052         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   2053             #
   2054             # Authorization to begin a read-only transaction requires
   2055             # `spanner.databases.beginReadOnlyTransaction` permission
   2056             # on the `session` resource.
   2057           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   2058               #
   2059               # This is useful for requesting fresher data than some previous
   2060               # read, or data that is fresh enough to observe the effects of some
   2061               # previously committed transaction whose timestamp is known.
   2062               #
   2063               # Note that this option can only be used in single-use transactions.
   2064           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   2065               # the Transaction message that describes the transaction.
   2066           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   2067               # seconds. Guarantees that all writes that have committed more
   2068               # than the specified number of seconds ago are visible. Because
   2069               # Cloud Spanner chooses the exact timestamp, this mode works even if
   2070               # the client's local clock is substantially skewed from Cloud Spanner
   2071               # commit timestamps.
   2072               #
   2073               # Useful for reading the freshest data available at a nearby
   2074               # replica, while bounding the possible staleness if the local
   2075               # replica has fallen behind.
   2076               #
   2077               # Note that this option can only be used in single-use
   2078               # transactions.
   2079           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   2080               # old. The timestamp is chosen soon after the read is started.
   2081               #
   2082               # Guarantees that all writes that have committed more than the
   2083               # specified number of seconds ago are visible. Because Cloud Spanner
   2084               # chooses the exact timestamp, this mode works even if the client's
   2085               # local clock is substantially skewed from Cloud Spanner commit
   2086               # timestamps.
   2087               #
   2088               # Useful for reading at nearby replicas without the distributed
   2089               # timestamp negotiation overhead of `max_staleness`.
   2090           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   2091               # reads at a specific timestamp are repeatable; the same read at
   2092               # the same timestamp always returns the same data. If the
   2093               # timestamp is in the future, the read will block until the
   2094               # specified timestamp, modulo the read's deadline.
   2095               #
   2096               # Useful for large scale consistent reads such as mapreduces, or
   2097               # for coordinating many reads against a consistent snapshot of the
   2098               # data.
   2099           "strong": True or False, # Read at a timestamp where all previously committed transactions
   2100               # are visible.
   2101         },
   2102       },
   2103       "singleUse": { # # Transactions # Execute the read or SQL query in a temporary transaction.
   2104           # This is the most efficient way to execute a transaction that
   2105           # consists of a single SQL query.
   2106           #
   2107           #
   2108           # Each session can have at most one active transaction at a time. After the
   2109           # active transaction is completed, the session can immediately be
   2110           # re-used for the next transaction. It is not necessary to create a
   2111           # new session for each transaction.
   2112           #
   2113           # # Transaction Modes
   2114           #
   2115           # Cloud Spanner supports two transaction modes:
   2116           #
   2117           #   1. Locking read-write. This type of transaction is the only way
   2118           #      to write data into Cloud Spanner. These transactions rely on
   2119           #      pessimistic locking and, if necessary, two-phase commit.
   2120           #      Locking read-write transactions may abort, requiring the
   2121           #      application to retry.
   2122           #
   2123           #   2. Snapshot read-only. This transaction type provides guaranteed
   2124           #      consistency across several reads, but does not allow
   2125           #      writes. Snapshot read-only transactions can be configured to
   2126           #      read at timestamps in the past. Snapshot read-only
   2127           #      transactions do not need to be committed.
   2128           #
   2129           # For transactions that only read, snapshot read-only transactions
   2130           # provide simpler semantics and are almost always faster. In
   2131           # particular, read-only transactions do not take locks, so they do
   2132           # not conflict with read-write transactions. As a consequence of not
   2133           # taking locks, they also do not abort, so retry loops are not needed.
   2134           #
   2135           # Transactions may only read/write data in a single database. They
   2136           # may, however, read/write data in different tables within that
   2137           # database.
   2138           #
   2139           # ## Locking Read-Write Transactions
   2140           #
   2141           # Locking transactions may be used to atomically read-modify-write
   2142           # data anywhere in a database. This type of transaction is externally
   2143           # consistent.
   2144           #
   2145           # Clients should attempt to minimize the amount of time a transaction
   2146           # is active. Faster transactions commit with higher probability
   2147           # and cause less contention. Cloud Spanner attempts to keep read locks
   2148           # active as long as the transaction continues to do reads, and the
   2149           # transaction has not been terminated by
   2150           # Commit or
   2151           # Rollback.  Long periods of
   2152           # inactivity at the client may cause Cloud Spanner to release a
   2153           # transaction's locks and abort it.
   2154           #
   2155           # Reads performed within a transaction acquire locks on the data
   2156           # being read. Writes can only be done at commit time, after all reads
   2157           # have been completed.
   2158           # Conceptually, a read-write transaction consists of zero or more
   2159           # reads or SQL queries followed by
   2160           # Commit. At any time before
   2161           # Commit, the client can send a
   2162           # Rollback request to abort the
   2163           # transaction.
   2164           #
   2165           # ### Semantics
   2166           #
   2167           # Cloud Spanner can commit the transaction if all read locks it acquired
   2168           # are still valid at commit time, and it is able to acquire write
   2169           # locks for all writes. Cloud Spanner can abort the transaction for any
   2170           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   2171           # that the transaction has not modified any user data in Cloud Spanner.
   2172           #
   2173           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   2174           # how long the transaction's locks were held for. It is an error to
   2175           # use Cloud Spanner locks for any sort of mutual exclusion other than
   2176           # between Cloud Spanner transactions themselves.
   2177           #
   2178           # ### Retrying Aborted Transactions
   2179           #
   2180           # When a transaction aborts, the application can choose to retry the
   2181           # whole transaction again. To maximize the chances of successfully
   2182           # committing the retry, the client should execute the retry in the
   2183           # same session as the original attempt. The original session's lock
   2184           # priority increases with each consecutive abort, meaning that each
   2185           # attempt has a slightly better chance of success than the previous.
   2186           #
   2187           # Under some circumstances (e.g., many transactions attempting to
   2188           # modify the same row(s)), a transaction can abort many times in a
   2189           # short period before successfully committing. Thus, it is not a good
   2190           # idea to cap the number of retries a transaction can attempt;
   2191           # instead, it is better to limit the total amount of wall time spent
   2192           # retrying.
   2193           #
   2194           # ### Idle Transactions
   2195           #
   2196           # A transaction is considered idle if it has no outstanding reads or
   2197           # SQL queries and has not started a read or SQL query within the last 10
   2198           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   2199           # don't hold on to locks indefinitely. In that case, the commit will
   2200           # fail with error `ABORTED`.
   2201           #
   2202           # If this behavior is undesirable, periodically executing a simple
   2203           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   2204           # transaction from becoming idle.
   2205           #
   2206           # ## Snapshot Read-Only Transactions
   2207           #
   2208           # Snapshot read-only transactions provides a simpler method than
   2209           # locking read-write transactions for doing several consistent
   2210           # reads. However, this type of transaction does not support writes.
   2211           #
   2212           # Snapshot transactions do not take locks. Instead, they work by
   2213           # choosing a Cloud Spanner timestamp, then executing all reads at that
   2214           # timestamp. Since they do not acquire locks, they do not block
   2215           # concurrent read-write transactions.
   2216           #
   2217           # Unlike locking read-write transactions, snapshot read-only
   2218           # transactions never abort. They can fail if the chosen read
   2219           # timestamp is garbage collected; however, the default garbage
   2220           # collection policy is generous enough that most applications do not
   2221           # need to worry about this in practice.
   2222           #
   2223           # Snapshot read-only transactions do not need to call
   2224           # Commit or
   2225           # Rollback (and in fact are not
   2226           # permitted to do so).
   2227           #
   2228           # To execute a snapshot transaction, the client specifies a timestamp
   2229           # bound, which tells Cloud Spanner how to choose a read timestamp.
   2230           #
   2231           # The types of timestamp bound are:
   2232           #
   2233           #   - Strong (the default).
   2234           #   - Bounded staleness.
   2235           #   - Exact staleness.
   2236           #
   2237           # If the Cloud Spanner database to be read is geographically distributed,
   2238           # stale read-only transactions can execute more quickly than strong
   2239           # or read-write transaction, because they are able to execute far
   2240           # from the leader replica.
   2241           #
   2242           # Each type of timestamp bound is discussed in detail below.
   2243           #
   2244           # ### Strong
   2245           #
   2246           # Strong reads are guaranteed to see the effects of all transactions
   2247           # that have committed before the start of the read. Furthermore, all
   2248           # rows yielded by a single read are consistent with each other -- if
   2249           # any part of the read observes a transaction, all parts of the read
   2250           # see the transaction.
   2251           #
   2252           # Strong reads are not repeatable: two consecutive strong read-only
   2253           # transactions might return inconsistent results if there are
   2254           # concurrent writes. If consistency across reads is required, the
   2255           # reads should be executed within a transaction or at an exact read
   2256           # timestamp.
   2257           #
   2258           # See TransactionOptions.ReadOnly.strong.
   2259           #
   2260           # ### Exact Staleness
   2261           #
   2262           # These timestamp bounds execute reads at a user-specified
   2263           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   2264           # prefix of the global transaction history: they observe
   2265           # modifications done by all transactions with a commit timestamp <=
   2266           # the read timestamp, and observe none of the modifications done by
   2267           # transactions with a larger commit timestamp. They will block until
   2268           # all conflicting transactions that may be assigned commit timestamps
   2269           # <= the read timestamp have finished.
   2270           #
   2271           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   2272           # timestamp or a staleness relative to the current time.
   2273           #
   2274           # These modes do not require a "negotiation phase" to pick a
   2275           # timestamp. As a result, they execute slightly faster than the
   2276           # equivalent boundedly stale concurrency modes. On the other hand,
   2277           # boundedly stale reads usually return fresher results.
   2278           #
   2279           # See TransactionOptions.ReadOnly.read_timestamp and
   2280           # TransactionOptions.ReadOnly.exact_staleness.
   2281           #
   2282           # ### Bounded Staleness
   2283           #
   2284           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   2285           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   2286           # newest timestamp within the staleness bound that allows execution
   2287           # of the reads at the closest available replica without blocking.
   2288           #
   2289           # All rows yielded are consistent with each other -- if any part of
   2290           # the read observes a transaction, all parts of the read see the
   2291           # transaction. Boundedly stale reads are not repeatable: two stale
   2292           # reads, even if they use the same staleness bound, can execute at
   2293           # different timestamps and thus return inconsistent results.
   2294           #
   2295           # Boundedly stale reads execute in two phases: the first phase
   2296           # negotiates a timestamp among all replicas needed to serve the
   2297           # read. In the second phase, reads are executed at the negotiated
   2298           # timestamp.
   2299           #
   2300           # As a result of the two phase execution, bounded staleness reads are
   2301           # usually a little slower than comparable exact staleness
   2302           # reads. However, they are typically able to return fresher
   2303           # results, and are more likely to execute at the closest replica.
   2304           #
   2305           # Because the timestamp negotiation requires up-front knowledge of
   2306           # which rows will be read, it can only be used with single-use
   2307           # read-only transactions.
   2308           #
   2309           # See TransactionOptions.ReadOnly.max_staleness and
   2310           # TransactionOptions.ReadOnly.min_read_timestamp.
   2311           #
   2312           # ### Old Read Timestamps and Garbage Collection
   2313           #
   2314           # Cloud Spanner continuously garbage collects deleted and overwritten data
   2315           # in the background to reclaim storage space. This process is known
   2316           # as "version GC". By default, version GC reclaims versions after they
   2317           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   2318           # at read timestamps more than one hour in the past. This
   2319           # restriction also applies to in-progress reads and/or SQL queries whose
   2320           # timestamp become too old while executing. Reads and SQL queries with
   2321           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   2322         "readWrite": { # Options for read-write transactions. # Transaction may write.
   2323             #
   2324             # Authorization to begin a read-write transaction requires
   2325             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   2326             # on the `session` resource.
   2327         },
   2328         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   2329             #
   2330             # Authorization to begin a read-only transaction requires
   2331             # `spanner.databases.beginReadOnlyTransaction` permission
   2332             # on the `session` resource.
   2333           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   2334               #
   2335               # This is useful for requesting fresher data than some previous
   2336               # read, or data that is fresh enough to observe the effects of some
   2337               # previously committed transaction whose timestamp is known.
   2338               #
   2339               # Note that this option can only be used in single-use transactions.
   2340           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   2341               # the Transaction message that describes the transaction.
   2342           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   2343               # seconds. Guarantees that all writes that have committed more
   2344               # than the specified number of seconds ago are visible. Because
   2345               # Cloud Spanner chooses the exact timestamp, this mode works even if
   2346               # the client's local clock is substantially skewed from Cloud Spanner
   2347               # commit timestamps.
   2348               #
   2349               # Useful for reading the freshest data available at a nearby
   2350               # replica, while bounding the possible staleness if the local
   2351               # replica has fallen behind.
   2352               #
   2353               # Note that this option can only be used in single-use
   2354               # transactions.
   2355           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   2356               # old. The timestamp is chosen soon after the read is started.
   2357               #
   2358               # Guarantees that all writes that have committed more than the
   2359               # specified number of seconds ago are visible. Because Cloud Spanner
   2360               # chooses the exact timestamp, this mode works even if the client's
   2361               # local clock is substantially skewed from Cloud Spanner commit
   2362               # timestamps.
   2363               #
   2364               # Useful for reading at nearby replicas without the distributed
   2365               # timestamp negotiation overhead of `max_staleness`.
   2366           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   2367               # reads at a specific timestamp are repeatable; the same read at
   2368               # the same timestamp always returns the same data. If the
   2369               # timestamp is in the future, the read will block until the
   2370               # specified timestamp, modulo the read's deadline.
   2371               #
   2372               # Useful for large scale consistent reads such as mapreduces, or
   2373               # for coordinating many reads against a consistent snapshot of the
   2374               # data.
   2375           "strong": True or False, # Read at a timestamp where all previously committed transactions
   2376               # are visible.
   2377         },
   2378       },
   2379       "id": "A String", # Execute the read or SQL query in a previously-started transaction.
   2380     },
   2381     "resumeToken": "A String", # If this request is resuming a previously interrupted SQL query
   2382         # execution, `resume_token` should be copied from the last
   2383         # PartialResultSet yielded before the interruption. Doing this
   2384         # enables the new SQL query execution to resume where the last one left
   2385         # off. The rest of the request parameters must exactly match the
   2386         # request that yielded this token.
   2387     "paramTypes": { # It is not always possible for Cloud Spanner to infer the right SQL type
   2388         # from a JSON value.  For example, values of type `BYTES` and values
   2389         # of type `STRING` both appear in params as JSON strings.
   2390         # 
   2391         # In these cases, `param_types` can be used to specify the exact
   2392         # SQL type for some or all of the SQL query parameters. See the
   2393         # definition of Type for more information
   2394         # about SQL types.
   2395       "a_key": { # `Type` indicates the type of a Cloud Spanner value, as might be stored in a
   2396           # table cell or returned from an SQL query.
   2397         "structType": # Object with schema name: StructType # If code == STRUCT, then `struct_type`
   2398             # provides type information for the struct's fields.
   2399         "code": "A String", # Required. The TypeCode for this type.
   2400         "arrayElementType": # Object with schema name: Type # If code == ARRAY, then `array_element_type`
   2401             # is the type of the array elements.
   2402       },
   2403     },
   2404     "queryMode": "A String", # Used to control the amount of debugging information returned in
   2405         # ResultSetStats.
   2406     "sql": "A String", # Required. The SQL query string.
   2407     "params": { # The SQL query string can contain parameter placeholders. A parameter
   2408         # placeholder consists of `'@'` followed by the parameter
   2409         # name. Parameter names consist of any combination of letters,
   2410         # numbers, and underscores.
   2411         # 
   2412         # Parameters can appear anywhere that a literal value is expected.  The same
   2413         # parameter name can be used more than once, for example:
   2414         #   `"WHERE id > @msg_id AND id < @msg_id + 100"`
   2415         # 
   2416         # It is an error to execute an SQL query with unbound parameters.
   2417         # 
   2418         # Parameter values are specified using `params`, which is a JSON
   2419         # object whose keys are parameter names, and whose values are the
   2420         # corresponding parameter values.
   2421       "a_key": "", # Properties of the object.
   2422     },
   2423   }
   2424 
   2425   x__xgafv: string, V1 error format.
   2426     Allowed values
   2427       1 - v1 error format
   2428       2 - v2 error format
   2429 
   2430 Returns:
   2431   An object of the form:
   2432 
   2433     { # Partial results from a streaming read or SQL query. Streaming reads and
   2434       # SQL queries better tolerate large result sets, large rows, and large
   2435       # values, but are a little trickier to consume.
   2436     "resumeToken": "A String", # Streaming calls might be interrupted for a variety of reasons, such
   2437         # as TCP connection loss. If this occurs, the stream of results can
   2438         # be resumed by re-sending the original request and including
   2439         # `resume_token`. Note that executing any other transaction in the
   2440         # same session invalidates the token.
   2441     "chunkedValue": True or False, # If true, then the final value in values is chunked, and must
   2442         # be combined with more values from subsequent `PartialResultSet`s
   2443         # to obtain a complete field value.
   2444     "values": [ # A streamed result set consists of a stream of values, which might
   2445         # be split into many `PartialResultSet` messages to accommodate
   2446         # large rows and/or large values. Every N complete values defines a
   2447         # row, where N is equal to the number of entries in
   2448         # metadata.row_type.fields.
   2449         #
   2450         # Most values are encoded based on type as described
   2451         # here.
   2452         #
   2453         # It is possible that the last value in values is "chunked",
   2454         # meaning that the rest of the value is sent in subsequent
   2455         # `PartialResultSet`(s). This is denoted by the chunked_value
   2456         # field. Two or more chunked values can be merged to form a
   2457         # complete value as follows:
   2458         #
   2459         #   * `bool/number/null`: cannot be chunked
   2460         #   * `string`: concatenate the strings
   2461         #   * `list`: concatenate the lists. If the last element in a list is a
   2462         #     `string`, `list`, or `object`, merge it with the first element in
   2463         #     the next list by applying these rules recursively.
   2464         #   * `object`: concatenate the (field name, field value) pairs. If a
   2465         #     field name is duplicated, then apply these rules recursively
   2466         #     to merge the field values.
   2467         #
   2468         # Some examples of merging:
   2469         #
   2470         #     # Strings are concatenated.
   2471         #     "foo", "bar" => "foobar"
   2472         #
   2473         #     # Lists of non-strings are concatenated.
   2474         #     [2, 3], [4] => [2, 3, 4]
   2475         #
   2476         #     # Lists are concatenated, but the last and first elements are merged
   2477         #     # because they are strings.
   2478         #     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
   2479         #
   2480         #     # Lists are concatenated, but the last and first elements are merged
   2481         #     # because they are lists. Recursively, the last and first elements
   2482         #     # of the inner lists are merged because they are strings.
   2483         #     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
   2484         #
   2485         #     # Non-overlapping object fields are combined.
   2486         #     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
   2487         #
   2488         #     # Overlapping object fields are merged.
   2489         #     {"a": "1"}, {"a": "2"} => {"a": "12"}
   2490         #
   2491         #     # Examples of merging objects containing lists of strings.
   2492         #     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
   2493         #
   2494         # For a more complete example, suppose a streaming SQL query is
   2495         # yielding a result set whose rows contain a single string
   2496         # field. The following `PartialResultSet`s might be yielded:
   2497         #
   2498         #     {
   2499         #       "metadata": { ... }
   2500         #       "values": ["Hello", "W"]
   2501         #       "chunked_value": true
   2502         #       "resume_token": "Af65..."
   2503         #     }
   2504         #     {
   2505         #       "values": ["orl"]
   2506         #       "chunked_value": true
   2507         #       "resume_token": "Bqp2..."
   2508         #     }
   2509         #     {
   2510         #       "values": ["d"]
   2511         #       "resume_token": "Zx1B..."
   2512         #     }
   2513         #
   2514         # This sequence of `PartialResultSet`s encodes two rows, one
   2515         # containing the field value `"Hello"`, and a second containing the
   2516         # field value `"World" = "W" + "orl" + "d"`.
   2517       "",
   2518     ],
   2519     "stats": { # Additional statistics about a ResultSet or PartialResultSet. # Query plan and execution statistics for the query that produced this
   2520         # streaming result set. These can be requested by setting
   2521         # ExecuteSqlRequest.query_mode and are sent
   2522         # only once with the last response in the stream.
   2523       "queryPlan": { # Contains an ordered list of nodes appearing in the query plan. # QueryPlan for the query associated with this result.
   2524         "planNodes": [ # The nodes in the query plan. Plan nodes are returned in pre-order starting
   2525             # with the plan root. Each PlanNode's `id` corresponds to its index in
   2526             # `plan_nodes`.
   2527           { # Node information for nodes appearing in a QueryPlan.plan_nodes.
   2528             "index": 42, # The `PlanNode`'s index in node list.
   2529             "kind": "A String", # Used to determine the type of node. May be needed for visualizing
   2530                 # different kinds of nodes differently. For example, If the node is a
   2531                 # SCALAR node, it will have a condensed representation
   2532                 # which can be used to directly embed a description of the node in its
   2533                 # parent.
   2534             "displayName": "A String", # The display name for the node.
   2535             "executionStats": { # The execution statistics associated with the node, contained in a group of
   2536                 # key-value pairs. Only present if the plan was returned as a result of a
   2537                 # profile query. For example, number of executions, number of rows/time per
   2538                 # execution etc.
   2539               "a_key": "", # Properties of the object.
   2540             },
   2541             "childLinks": [ # List of child node `index`es and their relationship to this parent.
   2542               { # Metadata associated with a parent-child relationship appearing in a
   2543                   # PlanNode.
   2544                 "variable": "A String", # Only present if the child node is SCALAR and corresponds
   2545                     # to an output variable of the parent node. The field carries the name of
   2546                     # the output variable.
   2547                     # For example, a `TableScan` operator that reads rows from a table will
   2548                     # have child links to the `SCALAR` nodes representing the output variables
   2549                     # created for each column that is read by the operator. The corresponding
   2550                     # `variable` fields will be set to the variable names assigned to the
   2551                     # columns.
   2552                 "childIndex": 42, # The node to which the link points.
   2553                 "type": "A String", # The type of the link. For example, in Hash Joins this could be used to
   2554                     # distinguish between the build child and the probe child, or in the case
   2555                     # of the child being an output variable, to represent the tag associated
   2556                     # with the output variable.
   2557               },
   2558             ],
   2559             "shortRepresentation": { # Condensed representation of a node and its subtree. Only present for # Condensed representation for SCALAR nodes.
   2560                 # `SCALAR` PlanNode(s).
   2561               "subqueries": { # A mapping of (subquery variable name) -> (subquery node id) for cases
   2562                   # where the `description` string of this node references a `SCALAR`
   2563                   # subquery contained in the expression subtree rooted at this node. The
   2564                   # referenced `SCALAR` subquery may not necessarily be a direct child of
   2565                   # this node.
   2566                 "a_key": 42,
   2567               },
   2568               "description": "A String", # A string representation of the expression subtree rooted at this node.
   2569             },
   2570             "metadata": { # Attributes relevant to the node contained in a group of key-value pairs.
   2571                 # For example, a Parameter Reference node could have the following
   2572                 # information in its metadata:
   2573                 #
   2574                 #     {
   2575                 #       "parameter_reference": "param1",
   2576                 #       "parameter_type": "array"
   2577                 #     }
   2578               "a_key": "", # Properties of the object.
   2579             },
   2580           },
   2581         ],
   2582       },
   2583       "queryStats": { # Aggregated statistics from the execution of the query. Only present when
   2584           # the query is profiled. For example, a query could return the statistics as
   2585           # follows:
   2586           #
   2587           #     {
   2588           #       "rows_returned": "3",
   2589           #       "elapsed_time": "1.22 secs",
   2590           #       "cpu_time": "1.19 secs"
   2591           #     }
   2592         "a_key": "", # Properties of the object.
   2593       },
   2594     },
   2595     "metadata": { # Metadata about a ResultSet or PartialResultSet. # Metadata about the result set, such as row type information.
   2596         # Only present in the first response.
   2597       "rowType": { # `StructType` defines the fields of a STRUCT type. # Indicates the field names and types for the rows in the result
   2598           # set.  For example, a SQL query like `"SELECT UserId, UserName FROM
   2599           # Users"` could return a `row_type` value like:
   2600           #
   2601           #     "fields": [
   2602           #       { "name": "UserId", "type": { "code": "INT64" } },
   2603           #       { "name": "UserName", "type": { "code": "STRING" } },
   2604           #     ]
   2605         "fields": [ # The list of fields that make up this struct. Order is
   2606             # significant, because values of this struct type are represented as
   2607             # lists, where the order of field values matches the order of
   2608             # fields in the StructType. In turn, the order of fields
   2609             # matches the order of columns in a read request, or the order of
   2610             # fields in the `SELECT` clause of a query.
   2611           { # Message representing a single field of a struct.
   2612             "type": { # `Type` indicates the type of a Cloud Spanner value, as might be stored in a # The type of the field.
   2613                 # table cell or returned from an SQL query.
   2614               "structType": # Object with schema name: StructType # If code == STRUCT, then `struct_type`
   2615                   # provides type information for the struct's fields.
   2616               "code": "A String", # Required. The TypeCode for this type.
   2617               "arrayElementType": # Object with schema name: Type # If code == ARRAY, then `array_element_type`
   2618                   # is the type of the array elements.
   2619             },
   2620             "name": "A String", # The name of the field. For reads, this is the column name. For
   2621                 # SQL queries, it is the column alias (e.g., `"Word"` in the
   2622                 # query `"SELECT 'hello' AS Word"`), or the column name (e.g.,
   2623                 # `"ColName"` in the query `"SELECT ColName FROM Table"`). Some
   2624                 # columns might have an empty name (e.g., !"SELECT
   2625                 # UPPER(ColName)"`). Note that a query result can contain
   2626                 # multiple fields with the same name.
   2627           },
   2628         ],
   2629       },
   2630       "transaction": { # A transaction. # If the read or SQL query began a transaction as a side-effect, the
   2631           # information about the new transaction is yielded here.
   2632         "readTimestamp": "A String", # For snapshot read-only transactions, the read timestamp chosen
   2633             # for the transaction. Not returned by default: see
   2634             # TransactionOptions.ReadOnly.return_read_timestamp.
   2635         "id": "A String", # `id` may be used to identify the transaction in subsequent
   2636             # Read,
   2637             # ExecuteSql,
   2638             # Commit, or
   2639             # Rollback calls.
   2640             #
   2641             # Single-use read-only transactions do not have IDs, because
   2642             # single-use transactions do not support multiple requests.
   2643       },
   2644     },
   2645   }</pre>
   2646 </div>
   2647 
   2648 <div class="method">
   2649     <code class="details" id="get">get(name, x__xgafv=None)</code>
   2650   <pre>Gets a session. Returns `NOT_FOUND` if the session does not exist.
   2651 This is mainly useful for determining whether a session is still
   2652 alive.
   2653 
   2654 Args:
   2655   name: string, Required. The name of the session to retrieve. (required)
   2656   x__xgafv: string, V1 error format.
   2657     Allowed values
   2658       1 - v1 error format
   2659       2 - v2 error format
   2660 
   2661 Returns:
   2662   An object of the form:
   2663 
   2664     { # A session in the Cloud Spanner API.
   2665     "name": "A String", # Required. The name of the session.
   2666   }</pre>
   2667 </div>
   2668 
   2669 <div class="method">
   2670     <code class="details" id="read">read(session, body, x__xgafv=None)</code>
   2671   <pre>Reads rows from the database using key lookups and scans, as a
   2672 simple key/value style alternative to
   2673 ExecuteSql.  This method cannot be used to
   2674 return a result set larger than 10 MiB; if the read matches more
   2675 data than that, the read fails with a `FAILED_PRECONDITION`
   2676 error.
   2677 
   2678 Reads inside read-write transactions might return `ABORTED`. If
   2679 this occurs, the application should restart the transaction from
   2680 the beginning. See Transaction for more details.
   2681 
   2682 Larger result sets can be yielded in streaming fashion by calling
   2683 StreamingRead instead.
   2684 
   2685 Args:
   2686   session: string, Required. The session in which the read should be performed. (required)
   2687   body: object, The request body. (required)
   2688     The object takes the form of:
   2689 
   2690 { # The request for Read and
   2691       # StreamingRead.
   2692     "index": "A String", # If non-empty, the name of an index on table. This index is
   2693         # used instead of the table primary key when interpreting key_set
   2694         # and sorting result rows. See key_set for further information.
   2695     "transaction": { # This message is used to select the transaction in which a # The transaction to use. If none is provided, the default is a
   2696         # temporary read-only transaction with strong concurrency.
   2697         # Read or
   2698         # ExecuteSql call runs.
   2699         #
   2700         # See TransactionOptions for more information about transactions.
   2701       "begin": { # # Transactions # Begin a new transaction and execute this read or SQL query in
   2702           # it. The transaction ID of the new transaction is returned in
   2703           # ResultSetMetadata.transaction, which is a Transaction.
   2704           #
   2705           #
   2706           # Each session can have at most one active transaction at a time. After the
   2707           # active transaction is completed, the session can immediately be
   2708           # re-used for the next transaction. It is not necessary to create a
   2709           # new session for each transaction.
   2710           #
   2711           # # Transaction Modes
   2712           #
   2713           # Cloud Spanner supports two transaction modes:
   2714           #
   2715           #   1. Locking read-write. This type of transaction is the only way
   2716           #      to write data into Cloud Spanner. These transactions rely on
   2717           #      pessimistic locking and, if necessary, two-phase commit.
   2718           #      Locking read-write transactions may abort, requiring the
   2719           #      application to retry.
   2720           #
   2721           #   2. Snapshot read-only. This transaction type provides guaranteed
   2722           #      consistency across several reads, but does not allow
   2723           #      writes. Snapshot read-only transactions can be configured to
   2724           #      read at timestamps in the past. Snapshot read-only
   2725           #      transactions do not need to be committed.
   2726           #
   2727           # For transactions that only read, snapshot read-only transactions
   2728           # provide simpler semantics and are almost always faster. In
   2729           # particular, read-only transactions do not take locks, so they do
   2730           # not conflict with read-write transactions. As a consequence of not
   2731           # taking locks, they also do not abort, so retry loops are not needed.
   2732           #
   2733           # Transactions may only read/write data in a single database. They
   2734           # may, however, read/write data in different tables within that
   2735           # database.
   2736           #
   2737           # ## Locking Read-Write Transactions
   2738           #
   2739           # Locking transactions may be used to atomically read-modify-write
   2740           # data anywhere in a database. This type of transaction is externally
   2741           # consistent.
   2742           #
   2743           # Clients should attempt to minimize the amount of time a transaction
   2744           # is active. Faster transactions commit with higher probability
   2745           # and cause less contention. Cloud Spanner attempts to keep read locks
   2746           # active as long as the transaction continues to do reads, and the
   2747           # transaction has not been terminated by
   2748           # Commit or
   2749           # Rollback.  Long periods of
   2750           # inactivity at the client may cause Cloud Spanner to release a
   2751           # transaction's locks and abort it.
   2752           #
   2753           # Reads performed within a transaction acquire locks on the data
   2754           # being read. Writes can only be done at commit time, after all reads
   2755           # have been completed.
   2756           # Conceptually, a read-write transaction consists of zero or more
   2757           # reads or SQL queries followed by
   2758           # Commit. At any time before
   2759           # Commit, the client can send a
   2760           # Rollback request to abort the
   2761           # transaction.
   2762           #
   2763           # ### Semantics
   2764           #
   2765           # Cloud Spanner can commit the transaction if all read locks it acquired
   2766           # are still valid at commit time, and it is able to acquire write
   2767           # locks for all writes. Cloud Spanner can abort the transaction for any
   2768           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   2769           # that the transaction has not modified any user data in Cloud Spanner.
   2770           #
   2771           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   2772           # how long the transaction's locks were held for. It is an error to
   2773           # use Cloud Spanner locks for any sort of mutual exclusion other than
   2774           # between Cloud Spanner transactions themselves.
   2775           #
   2776           # ### Retrying Aborted Transactions
   2777           #
   2778           # When a transaction aborts, the application can choose to retry the
   2779           # whole transaction again. To maximize the chances of successfully
   2780           # committing the retry, the client should execute the retry in the
   2781           # same session as the original attempt. The original session's lock
   2782           # priority increases with each consecutive abort, meaning that each
   2783           # attempt has a slightly better chance of success than the previous.
   2784           #
   2785           # Under some circumstances (e.g., many transactions attempting to
   2786           # modify the same row(s)), a transaction can abort many times in a
   2787           # short period before successfully committing. Thus, it is not a good
   2788           # idea to cap the number of retries a transaction can attempt;
   2789           # instead, it is better to limit the total amount of wall time spent
   2790           # retrying.
   2791           #
   2792           # ### Idle Transactions
   2793           #
   2794           # A transaction is considered idle if it has no outstanding reads or
   2795           # SQL queries and has not started a read or SQL query within the last 10
   2796           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   2797           # don't hold on to locks indefinitely. In that case, the commit will
   2798           # fail with error `ABORTED`.
   2799           #
   2800           # If this behavior is undesirable, periodically executing a simple
   2801           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   2802           # transaction from becoming idle.
   2803           #
   2804           # ## Snapshot Read-Only Transactions
   2805           #
   2806           # Snapshot read-only transactions provides a simpler method than
   2807           # locking read-write transactions for doing several consistent
   2808           # reads. However, this type of transaction does not support writes.
   2809           #
   2810           # Snapshot transactions do not take locks. Instead, they work by
   2811           # choosing a Cloud Spanner timestamp, then executing all reads at that
   2812           # timestamp. Since they do not acquire locks, they do not block
   2813           # concurrent read-write transactions.
   2814           #
   2815           # Unlike locking read-write transactions, snapshot read-only
   2816           # transactions never abort. They can fail if the chosen read
   2817           # timestamp is garbage collected; however, the default garbage
   2818           # collection policy is generous enough that most applications do not
   2819           # need to worry about this in practice.
   2820           #
   2821           # Snapshot read-only transactions do not need to call
   2822           # Commit or
   2823           # Rollback (and in fact are not
   2824           # permitted to do so).
   2825           #
   2826           # To execute a snapshot transaction, the client specifies a timestamp
   2827           # bound, which tells Cloud Spanner how to choose a read timestamp.
   2828           #
   2829           # The types of timestamp bound are:
   2830           #
   2831           #   - Strong (the default).
   2832           #   - Bounded staleness.
   2833           #   - Exact staleness.
   2834           #
   2835           # If the Cloud Spanner database to be read is geographically distributed,
   2836           # stale read-only transactions can execute more quickly than strong
   2837           # or read-write transaction, because they are able to execute far
   2838           # from the leader replica.
   2839           #
   2840           # Each type of timestamp bound is discussed in detail below.
   2841           #
   2842           # ### Strong
   2843           #
   2844           # Strong reads are guaranteed to see the effects of all transactions
   2845           # that have committed before the start of the read. Furthermore, all
   2846           # rows yielded by a single read are consistent with each other -- if
   2847           # any part of the read observes a transaction, all parts of the read
   2848           # see the transaction.
   2849           #
   2850           # Strong reads are not repeatable: two consecutive strong read-only
   2851           # transactions might return inconsistent results if there are
   2852           # concurrent writes. If consistency across reads is required, the
   2853           # reads should be executed within a transaction or at an exact read
   2854           # timestamp.
   2855           #
   2856           # See TransactionOptions.ReadOnly.strong.
   2857           #
   2858           # ### Exact Staleness
   2859           #
   2860           # These timestamp bounds execute reads at a user-specified
   2861           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   2862           # prefix of the global transaction history: they observe
   2863           # modifications done by all transactions with a commit timestamp <=
   2864           # the read timestamp, and observe none of the modifications done by
   2865           # transactions with a larger commit timestamp. They will block until
   2866           # all conflicting transactions that may be assigned commit timestamps
   2867           # <= the read timestamp have finished.
   2868           #
   2869           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   2870           # timestamp or a staleness relative to the current time.
   2871           #
   2872           # These modes do not require a "negotiation phase" to pick a
   2873           # timestamp. As a result, they execute slightly faster than the
   2874           # equivalent boundedly stale concurrency modes. On the other hand,
   2875           # boundedly stale reads usually return fresher results.
   2876           #
   2877           # See TransactionOptions.ReadOnly.read_timestamp and
   2878           # TransactionOptions.ReadOnly.exact_staleness.
   2879           #
   2880           # ### Bounded Staleness
   2881           #
   2882           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   2883           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   2884           # newest timestamp within the staleness bound that allows execution
   2885           # of the reads at the closest available replica without blocking.
   2886           #
   2887           # All rows yielded are consistent with each other -- if any part of
   2888           # the read observes a transaction, all parts of the read see the
   2889           # transaction. Boundedly stale reads are not repeatable: two stale
   2890           # reads, even if they use the same staleness bound, can execute at
   2891           # different timestamps and thus return inconsistent results.
   2892           #
   2893           # Boundedly stale reads execute in two phases: the first phase
   2894           # negotiates a timestamp among all replicas needed to serve the
   2895           # read. In the second phase, reads are executed at the negotiated
   2896           # timestamp.
   2897           #
   2898           # As a result of the two phase execution, bounded staleness reads are
   2899           # usually a little slower than comparable exact staleness
   2900           # reads. However, they are typically able to return fresher
   2901           # results, and are more likely to execute at the closest replica.
   2902           #
   2903           # Because the timestamp negotiation requires up-front knowledge of
   2904           # which rows will be read, it can only be used with single-use
   2905           # read-only transactions.
   2906           #
   2907           # See TransactionOptions.ReadOnly.max_staleness and
   2908           # TransactionOptions.ReadOnly.min_read_timestamp.
   2909           #
   2910           # ### Old Read Timestamps and Garbage Collection
   2911           #
   2912           # Cloud Spanner continuously garbage collects deleted and overwritten data
   2913           # in the background to reclaim storage space. This process is known
   2914           # as "version GC". By default, version GC reclaims versions after they
   2915           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   2916           # at read timestamps more than one hour in the past. This
   2917           # restriction also applies to in-progress reads and/or SQL queries whose
   2918           # timestamp become too old while executing. Reads and SQL queries with
   2919           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   2920         "readWrite": { # Options for read-write transactions. # Transaction may write.
   2921             #
   2922             # Authorization to begin a read-write transaction requires
   2923             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   2924             # on the `session` resource.
   2925         },
   2926         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   2927             #
   2928             # Authorization to begin a read-only transaction requires
   2929             # `spanner.databases.beginReadOnlyTransaction` permission
   2930             # on the `session` resource.
   2931           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   2932               #
   2933               # This is useful for requesting fresher data than some previous
   2934               # read, or data that is fresh enough to observe the effects of some
   2935               # previously committed transaction whose timestamp is known.
   2936               #
   2937               # Note that this option can only be used in single-use transactions.
   2938           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   2939               # the Transaction message that describes the transaction.
   2940           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   2941               # seconds. Guarantees that all writes that have committed more
   2942               # than the specified number of seconds ago are visible. Because
   2943               # Cloud Spanner chooses the exact timestamp, this mode works even if
   2944               # the client's local clock is substantially skewed from Cloud Spanner
   2945               # commit timestamps.
   2946               #
   2947               # Useful for reading the freshest data available at a nearby
   2948               # replica, while bounding the possible staleness if the local
   2949               # replica has fallen behind.
   2950               #
   2951               # Note that this option can only be used in single-use
   2952               # transactions.
   2953           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   2954               # old. The timestamp is chosen soon after the read is started.
   2955               #
   2956               # Guarantees that all writes that have committed more than the
   2957               # specified number of seconds ago are visible. Because Cloud Spanner
   2958               # chooses the exact timestamp, this mode works even if the client's
   2959               # local clock is substantially skewed from Cloud Spanner commit
   2960               # timestamps.
   2961               #
   2962               # Useful for reading at nearby replicas without the distributed
   2963               # timestamp negotiation overhead of `max_staleness`.
   2964           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   2965               # reads at a specific timestamp are repeatable; the same read at
   2966               # the same timestamp always returns the same data. If the
   2967               # timestamp is in the future, the read will block until the
   2968               # specified timestamp, modulo the read's deadline.
   2969               #
   2970               # Useful for large scale consistent reads such as mapreduces, or
   2971               # for coordinating many reads against a consistent snapshot of the
   2972               # data.
   2973           "strong": True or False, # Read at a timestamp where all previously committed transactions
   2974               # are visible.
   2975         },
   2976       },
   2977       "singleUse": { # # Transactions # Execute the read or SQL query in a temporary transaction.
   2978           # This is the most efficient way to execute a transaction that
   2979           # consists of a single SQL query.
   2980           #
   2981           #
   2982           # Each session can have at most one active transaction at a time. After the
   2983           # active transaction is completed, the session can immediately be
   2984           # re-used for the next transaction. It is not necessary to create a
   2985           # new session for each transaction.
   2986           #
   2987           # # Transaction Modes
   2988           #
   2989           # Cloud Spanner supports two transaction modes:
   2990           #
   2991           #   1. Locking read-write. This type of transaction is the only way
   2992           #      to write data into Cloud Spanner. These transactions rely on
   2993           #      pessimistic locking and, if necessary, two-phase commit.
   2994           #      Locking read-write transactions may abort, requiring the
   2995           #      application to retry.
   2996           #
   2997           #   2. Snapshot read-only. This transaction type provides guaranteed
   2998           #      consistency across several reads, but does not allow
   2999           #      writes. Snapshot read-only transactions can be configured to
   3000           #      read at timestamps in the past. Snapshot read-only
   3001           #      transactions do not need to be committed.
   3002           #
   3003           # For transactions that only read, snapshot read-only transactions
   3004           # provide simpler semantics and are almost always faster. In
   3005           # particular, read-only transactions do not take locks, so they do
   3006           # not conflict with read-write transactions. As a consequence of not
   3007           # taking locks, they also do not abort, so retry loops are not needed.
   3008           #
   3009           # Transactions may only read/write data in a single database. They
   3010           # may, however, read/write data in different tables within that
   3011           # database.
   3012           #
   3013           # ## Locking Read-Write Transactions
   3014           #
   3015           # Locking transactions may be used to atomically read-modify-write
   3016           # data anywhere in a database. This type of transaction is externally
   3017           # consistent.
   3018           #
   3019           # Clients should attempt to minimize the amount of time a transaction
   3020           # is active. Faster transactions commit with higher probability
   3021           # and cause less contention. Cloud Spanner attempts to keep read locks
   3022           # active as long as the transaction continues to do reads, and the
   3023           # transaction has not been terminated by
   3024           # Commit or
   3025           # Rollback.  Long periods of
   3026           # inactivity at the client may cause Cloud Spanner to release a
   3027           # transaction's locks and abort it.
   3028           #
   3029           # Reads performed within a transaction acquire locks on the data
   3030           # being read. Writes can only be done at commit time, after all reads
   3031           # have been completed.
   3032           # Conceptually, a read-write transaction consists of zero or more
   3033           # reads or SQL queries followed by
   3034           # Commit. At any time before
   3035           # Commit, the client can send a
   3036           # Rollback request to abort the
   3037           # transaction.
   3038           #
   3039           # ### Semantics
   3040           #
   3041           # Cloud Spanner can commit the transaction if all read locks it acquired
   3042           # are still valid at commit time, and it is able to acquire write
   3043           # locks for all writes. Cloud Spanner can abort the transaction for any
   3044           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   3045           # that the transaction has not modified any user data in Cloud Spanner.
   3046           #
   3047           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   3048           # how long the transaction's locks were held for. It is an error to
   3049           # use Cloud Spanner locks for any sort of mutual exclusion other than
   3050           # between Cloud Spanner transactions themselves.
   3051           #
   3052           # ### Retrying Aborted Transactions
   3053           #
   3054           # When a transaction aborts, the application can choose to retry the
   3055           # whole transaction again. To maximize the chances of successfully
   3056           # committing the retry, the client should execute the retry in the
   3057           # same session as the original attempt. The original session's lock
   3058           # priority increases with each consecutive abort, meaning that each
   3059           # attempt has a slightly better chance of success than the previous.
   3060           #
   3061           # Under some circumstances (e.g., many transactions attempting to
   3062           # modify the same row(s)), a transaction can abort many times in a
   3063           # short period before successfully committing. Thus, it is not a good
   3064           # idea to cap the number of retries a transaction can attempt;
   3065           # instead, it is better to limit the total amount of wall time spent
   3066           # retrying.
   3067           #
   3068           # ### Idle Transactions
   3069           #
   3070           # A transaction is considered idle if it has no outstanding reads or
   3071           # SQL queries and has not started a read or SQL query within the last 10
   3072           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   3073           # don't hold on to locks indefinitely. In that case, the commit will
   3074           # fail with error `ABORTED`.
   3075           #
   3076           # If this behavior is undesirable, periodically executing a simple
   3077           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   3078           # transaction from becoming idle.
   3079           #
   3080           # ## Snapshot Read-Only Transactions
   3081           #
   3082           # Snapshot read-only transactions provides a simpler method than
   3083           # locking read-write transactions for doing several consistent
   3084           # reads. However, this type of transaction does not support writes.
   3085           #
   3086           # Snapshot transactions do not take locks. Instead, they work by
   3087           # choosing a Cloud Spanner timestamp, then executing all reads at that
   3088           # timestamp. Since they do not acquire locks, they do not block
   3089           # concurrent read-write transactions.
   3090           #
   3091           # Unlike locking read-write transactions, snapshot read-only
   3092           # transactions never abort. They can fail if the chosen read
   3093           # timestamp is garbage collected; however, the default garbage
   3094           # collection policy is generous enough that most applications do not
   3095           # need to worry about this in practice.
   3096           #
   3097           # Snapshot read-only transactions do not need to call
   3098           # Commit or
   3099           # Rollback (and in fact are not
   3100           # permitted to do so).
   3101           #
   3102           # To execute a snapshot transaction, the client specifies a timestamp
   3103           # bound, which tells Cloud Spanner how to choose a read timestamp.
   3104           #
   3105           # The types of timestamp bound are:
   3106           #
   3107           #   - Strong (the default).
   3108           #   - Bounded staleness.
   3109           #   - Exact staleness.
   3110           #
   3111           # If the Cloud Spanner database to be read is geographically distributed,
   3112           # stale read-only transactions can execute more quickly than strong
   3113           # or read-write transaction, because they are able to execute far
   3114           # from the leader replica.
   3115           #
   3116           # Each type of timestamp bound is discussed in detail below.
   3117           #
   3118           # ### Strong
   3119           #
   3120           # Strong reads are guaranteed to see the effects of all transactions
   3121           # that have committed before the start of the read. Furthermore, all
   3122           # rows yielded by a single read are consistent with each other -- if
   3123           # any part of the read observes a transaction, all parts of the read
   3124           # see the transaction.
   3125           #
   3126           # Strong reads are not repeatable: two consecutive strong read-only
   3127           # transactions might return inconsistent results if there are
   3128           # concurrent writes. If consistency across reads is required, the
   3129           # reads should be executed within a transaction or at an exact read
   3130           # timestamp.
   3131           #
   3132           # See TransactionOptions.ReadOnly.strong.
   3133           #
   3134           # ### Exact Staleness
   3135           #
   3136           # These timestamp bounds execute reads at a user-specified
   3137           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   3138           # prefix of the global transaction history: they observe
   3139           # modifications done by all transactions with a commit timestamp <=
   3140           # the read timestamp, and observe none of the modifications done by
   3141           # transactions with a larger commit timestamp. They will block until
   3142           # all conflicting transactions that may be assigned commit timestamps
   3143           # <= the read timestamp have finished.
   3144           #
   3145           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   3146           # timestamp or a staleness relative to the current time.
   3147           #
   3148           # These modes do not require a "negotiation phase" to pick a
   3149           # timestamp. As a result, they execute slightly faster than the
   3150           # equivalent boundedly stale concurrency modes. On the other hand,
   3151           # boundedly stale reads usually return fresher results.
   3152           #
   3153           # See TransactionOptions.ReadOnly.read_timestamp and
   3154           # TransactionOptions.ReadOnly.exact_staleness.
   3155           #
   3156           # ### Bounded Staleness
   3157           #
   3158           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   3159           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   3160           # newest timestamp within the staleness bound that allows execution
   3161           # of the reads at the closest available replica without blocking.
   3162           #
   3163           # All rows yielded are consistent with each other -- if any part of
   3164           # the read observes a transaction, all parts of the read see the
   3165           # transaction. Boundedly stale reads are not repeatable: two stale
   3166           # reads, even if they use the same staleness bound, can execute at
   3167           # different timestamps and thus return inconsistent results.
   3168           #
   3169           # Boundedly stale reads execute in two phases: the first phase
   3170           # negotiates a timestamp among all replicas needed to serve the
   3171           # read. In the second phase, reads are executed at the negotiated
   3172           # timestamp.
   3173           #
   3174           # As a result of the two phase execution, bounded staleness reads are
   3175           # usually a little slower than comparable exact staleness
   3176           # reads. However, they are typically able to return fresher
   3177           # results, and are more likely to execute at the closest replica.
   3178           #
   3179           # Because the timestamp negotiation requires up-front knowledge of
   3180           # which rows will be read, it can only be used with single-use
   3181           # read-only transactions.
   3182           #
   3183           # See TransactionOptions.ReadOnly.max_staleness and
   3184           # TransactionOptions.ReadOnly.min_read_timestamp.
   3185           #
   3186           # ### Old Read Timestamps and Garbage Collection
   3187           #
   3188           # Cloud Spanner continuously garbage collects deleted and overwritten data
   3189           # in the background to reclaim storage space. This process is known
   3190           # as "version GC". By default, version GC reclaims versions after they
   3191           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   3192           # at read timestamps more than one hour in the past. This
   3193           # restriction also applies to in-progress reads and/or SQL queries whose
   3194           # timestamp become too old while executing. Reads and SQL queries with
   3195           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   3196         "readWrite": { # Options for read-write transactions. # Transaction may write.
   3197             #
   3198             # Authorization to begin a read-write transaction requires
   3199             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   3200             # on the `session` resource.
   3201         },
   3202         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   3203             #
   3204             # Authorization to begin a read-only transaction requires
   3205             # `spanner.databases.beginReadOnlyTransaction` permission
   3206             # on the `session` resource.
   3207           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   3208               #
   3209               # This is useful for requesting fresher data than some previous
   3210               # read, or data that is fresh enough to observe the effects of some
   3211               # previously committed transaction whose timestamp is known.
   3212               #
   3213               # Note that this option can only be used in single-use transactions.
   3214           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   3215               # the Transaction message that describes the transaction.
   3216           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   3217               # seconds. Guarantees that all writes that have committed more
   3218               # than the specified number of seconds ago are visible. Because
   3219               # Cloud Spanner chooses the exact timestamp, this mode works even if
   3220               # the client's local clock is substantially skewed from Cloud Spanner
   3221               # commit timestamps.
   3222               #
   3223               # Useful for reading the freshest data available at a nearby
   3224               # replica, while bounding the possible staleness if the local
   3225               # replica has fallen behind.
   3226               #
   3227               # Note that this option can only be used in single-use
   3228               # transactions.
   3229           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   3230               # old. The timestamp is chosen soon after the read is started.
   3231               #
   3232               # Guarantees that all writes that have committed more than the
   3233               # specified number of seconds ago are visible. Because Cloud Spanner
   3234               # chooses the exact timestamp, this mode works even if the client's
   3235               # local clock is substantially skewed from Cloud Spanner commit
   3236               # timestamps.
   3237               #
   3238               # Useful for reading at nearby replicas without the distributed
   3239               # timestamp negotiation overhead of `max_staleness`.
   3240           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   3241               # reads at a specific timestamp are repeatable; the same read at
   3242               # the same timestamp always returns the same data. If the
   3243               # timestamp is in the future, the read will block until the
   3244               # specified timestamp, modulo the read's deadline.
   3245               #
   3246               # Useful for large scale consistent reads such as mapreduces, or
   3247               # for coordinating many reads against a consistent snapshot of the
   3248               # data.
   3249           "strong": True or False, # Read at a timestamp where all previously committed transactions
   3250               # are visible.
   3251         },
   3252       },
   3253       "id": "A String", # Execute the read or SQL query in a previously-started transaction.
   3254     },
   3255     "resumeToken": "A String", # If this request is resuming a previously interrupted read,
   3256         # `resume_token` should be copied from the last
   3257         # PartialResultSet yielded before the interruption. Doing this
   3258         # enables the new read to resume where the last read left off. The
   3259         # rest of the request parameters must exactly match the request
   3260         # that yielded this token.
   3261     "keySet": { # `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All # Required. `key_set` identifies the rows to be yielded. `key_set` names the
   3262         # primary keys of the rows in table to be yielded, unless index
   3263         # is present. If index is present, then key_set instead names
   3264         # index keys in index.
   3265         # 
   3266         # Rows are yielded in table primary key order (if index is empty)
   3267         # or index key order (if index is non-empty).
   3268         # 
   3269         # It is not an error for the `key_set` to name rows that do not
   3270         # exist in the database. Read yields nothing for nonexistent rows.
   3271         # the keys are expected to be in the same table or index. The keys need
   3272         # not be sorted in any particular way.
   3273         #
   3274         # If the same key is specified multiple times in the set (for example
   3275         # if two ranges, two keys, or a key and a range overlap), Cloud Spanner
   3276         # behaves as if the key were only specified once.
   3277       "ranges": [ # A list of key ranges. See KeyRange for more information about
   3278           # key range specifications.
   3279         { # KeyRange represents a range of rows in a table or index.
   3280             #
   3281             # A range has a start key and an end key. These keys can be open or
   3282             # closed, indicating if the range includes rows with that key.
   3283             #
   3284             # Keys are represented by lists, where the ith value in the list
   3285             # corresponds to the ith component of the table or index primary key.
   3286             # Individual values are encoded as described here.
   3287             #
   3288             # For example, consider the following table definition:
   3289             #
   3290             #     CREATE TABLE UserEvents (
   3291             #       UserName STRING(MAX),
   3292             #       EventDate STRING(10)
   3293             #     ) PRIMARY KEY(UserName, EventDate);
   3294             #
   3295             # The following keys name rows in this table:
   3296             #
   3297             #     "Bob", "2014-09-23"
   3298             #
   3299             # Since the `UserEvents` table's `PRIMARY KEY` clause names two
   3300             # columns, each `UserEvents` key has two elements; the first is the
   3301             # `UserName`, and the second is the `EventDate`.
   3302             #
   3303             # Key ranges with multiple components are interpreted
   3304             # lexicographically by component using the table or index key's declared
   3305             # sort order. For example, the following range returns all events for
   3306             # user `"Bob"` that occurred in the year 2015:
   3307             #
   3308             #     "start_closed": ["Bob", "2015-01-01"]
   3309             #     "end_closed": ["Bob", "2015-12-31"]
   3310             #
   3311             # Start and end keys can omit trailing key components. This affects the
   3312             # inclusion and exclusion of rows that exactly match the provided key
   3313             # components: if the key is closed, then rows that exactly match the
   3314             # provided components are included; if the key is open, then rows
   3315             # that exactly match are not included.
   3316             #
   3317             # For example, the following range includes all events for `"Bob"` that
   3318             # occurred during and after the year 2000:
   3319             #
   3320             #     "start_closed": ["Bob", "2000-01-01"]
   3321             #     "end_closed": ["Bob"]
   3322             #
   3323             # The next example retrieves all events for `"Bob"`:
   3324             #
   3325             #     "start_closed": ["Bob"]
   3326             #     "end_closed": ["Bob"]
   3327             #
   3328             # To retrieve events before the year 2000:
   3329             #
   3330             #     "start_closed": ["Bob"]
   3331             #     "end_open": ["Bob", "2000-01-01"]
   3332             #
   3333             # The following range includes all rows in the table:
   3334             #
   3335             #     "start_closed": []
   3336             #     "end_closed": []
   3337             #
   3338             # This range returns all users whose `UserName` begins with any
   3339             # character from A to C:
   3340             #
   3341             #     "start_closed": ["A"]
   3342             #     "end_open": ["D"]
   3343             #
   3344             # This range returns all users whose `UserName` begins with B:
   3345             #
   3346             #     "start_closed": ["B"]
   3347             #     "end_open": ["C"]
   3348             #
   3349             # Key ranges honor column sort order. For example, suppose a table is
   3350             # defined as follows:
   3351             #
   3352             #     CREATE TABLE DescendingSortedTable {
   3353             #       Key INT64,
   3354             #       ...
   3355             #     ) PRIMARY KEY(Key DESC);
   3356             #
   3357             # The following range retrieves all rows with key values between 1
   3358             # and 100 inclusive:
   3359             #
   3360             #     "start_closed": ["100"]
   3361             #     "end_closed": ["1"]
   3362             #
   3363             # Note that 100 is passed as the start, and 1 is passed as the end,
   3364             # because `Key` is a descending column in the schema.
   3365           "endOpen": [ # If the end is open, then the range excludes rows whose first
   3366               # `len(end_open)` key columns exactly match `end_open`.
   3367             "",
   3368           ],
   3369           "startOpen": [ # If the start is open, then the range excludes rows whose first
   3370               # `len(start_open)` key columns exactly match `start_open`.
   3371             "",
   3372           ],
   3373           "endClosed": [ # If the end is closed, then the range includes all rows whose
   3374               # first `len(end_closed)` key columns exactly match `end_closed`.
   3375             "",
   3376           ],
   3377           "startClosed": [ # If the start is closed, then the range includes all rows whose
   3378               # first `len(start_closed)` key columns exactly match `start_closed`.
   3379             "",
   3380           ],
   3381         },
   3382       ],
   3383       "keys": [ # A list of specific keys. Entries in `keys` should have exactly as
   3384           # many elements as there are columns in the primary or index key
   3385           # with which this `KeySet` is used.  Individual key values are
   3386           # encoded as described here.
   3387         [
   3388           "",
   3389         ],
   3390       ],
   3391       "all": True or False, # For convenience `all` can be set to `true` to indicate that this
   3392           # `KeySet` matches all keys in the table or index. Note that any keys
   3393           # specified in `keys` or `ranges` are only yielded once.
   3394     },
   3395     "limit": "A String", # If greater than zero, only the first `limit` rows are yielded. If `limit`
   3396         # is zero, the default is no limit.
   3397     "table": "A String", # Required. The name of the table in the database to be read.
   3398     "columns": [ # The columns of table to be returned for each row matching
   3399         # this request.
   3400       "A String",
   3401     ],
   3402   }
   3403 
   3404   x__xgafv: string, V1 error format.
   3405     Allowed values
   3406       1 - v1 error format
   3407       2 - v2 error format
   3408 
   3409 Returns:
   3410   An object of the form:
   3411 
   3412     { # Results from Read or
   3413       # ExecuteSql.
   3414     "rows": [ # Each element in `rows` is a row whose format is defined by
   3415         # metadata.row_type. The ith element
   3416         # in each row matches the ith field in
   3417         # metadata.row_type. Elements are
   3418         # encoded based on type as described
   3419         # here.
   3420       [
   3421         "",
   3422       ],
   3423     ],
   3424     "stats": { # Additional statistics about a ResultSet or PartialResultSet. # Query plan and execution statistics for the query that produced this
   3425         # result set. These can be requested by setting
   3426         # ExecuteSqlRequest.query_mode.
   3427       "queryPlan": { # Contains an ordered list of nodes appearing in the query plan. # QueryPlan for the query associated with this result.
   3428         "planNodes": [ # The nodes in the query plan. Plan nodes are returned in pre-order starting
   3429             # with the plan root. Each PlanNode's `id` corresponds to its index in
   3430             # `plan_nodes`.
   3431           { # Node information for nodes appearing in a QueryPlan.plan_nodes.
   3432             "index": 42, # The `PlanNode`'s index in node list.
   3433             "kind": "A String", # Used to determine the type of node. May be needed for visualizing
   3434                 # different kinds of nodes differently. For example, If the node is a
   3435                 # SCALAR node, it will have a condensed representation
   3436                 # which can be used to directly embed a description of the node in its
   3437                 # parent.
   3438             "displayName": "A String", # The display name for the node.
   3439             "executionStats": { # The execution statistics associated with the node, contained in a group of
   3440                 # key-value pairs. Only present if the plan was returned as a result of a
   3441                 # profile query. For example, number of executions, number of rows/time per
   3442                 # execution etc.
   3443               "a_key": "", # Properties of the object.
   3444             },
   3445             "childLinks": [ # List of child node `index`es and their relationship to this parent.
   3446               { # Metadata associated with a parent-child relationship appearing in a
   3447                   # PlanNode.
   3448                 "variable": "A String", # Only present if the child node is SCALAR and corresponds
   3449                     # to an output variable of the parent node. The field carries the name of
   3450                     # the output variable.
   3451                     # For example, a `TableScan` operator that reads rows from a table will
   3452                     # have child links to the `SCALAR` nodes representing the output variables
   3453                     # created for each column that is read by the operator. The corresponding
   3454                     # `variable` fields will be set to the variable names assigned to the
   3455                     # columns.
   3456                 "childIndex": 42, # The node to which the link points.
   3457                 "type": "A String", # The type of the link. For example, in Hash Joins this could be used to
   3458                     # distinguish between the build child and the probe child, or in the case
   3459                     # of the child being an output variable, to represent the tag associated
   3460                     # with the output variable.
   3461               },
   3462             ],
   3463             "shortRepresentation": { # Condensed representation of a node and its subtree. Only present for # Condensed representation for SCALAR nodes.
   3464                 # `SCALAR` PlanNode(s).
   3465               "subqueries": { # A mapping of (subquery variable name) -> (subquery node id) for cases
   3466                   # where the `description` string of this node references a `SCALAR`
   3467                   # subquery contained in the expression subtree rooted at this node. The
   3468                   # referenced `SCALAR` subquery may not necessarily be a direct child of
   3469                   # this node.
   3470                 "a_key": 42,
   3471               },
   3472               "description": "A String", # A string representation of the expression subtree rooted at this node.
   3473             },
   3474             "metadata": { # Attributes relevant to the node contained in a group of key-value pairs.
   3475                 # For example, a Parameter Reference node could have the following
   3476                 # information in its metadata:
   3477                 #
   3478                 #     {
   3479                 #       "parameter_reference": "param1",
   3480                 #       "parameter_type": "array"
   3481                 #     }
   3482               "a_key": "", # Properties of the object.
   3483             },
   3484           },
   3485         ],
   3486       },
   3487       "queryStats": { # Aggregated statistics from the execution of the query. Only present when
   3488           # the query is profiled. For example, a query could return the statistics as
   3489           # follows:
   3490           #
   3491           #     {
   3492           #       "rows_returned": "3",
   3493           #       "elapsed_time": "1.22 secs",
   3494           #       "cpu_time": "1.19 secs"
   3495           #     }
   3496         "a_key": "", # Properties of the object.
   3497       },
   3498     },
   3499     "metadata": { # Metadata about a ResultSet or PartialResultSet. # Metadata about the result set, such as row type information.
   3500       "rowType": { # `StructType` defines the fields of a STRUCT type. # Indicates the field names and types for the rows in the result
   3501           # set.  For example, a SQL query like `"SELECT UserId, UserName FROM
   3502           # Users"` could return a `row_type` value like:
   3503           #
   3504           #     "fields": [
   3505           #       { "name": "UserId", "type": { "code": "INT64" } },
   3506           #       { "name": "UserName", "type": { "code": "STRING" } },
   3507           #     ]
   3508         "fields": [ # The list of fields that make up this struct. Order is
   3509             # significant, because values of this struct type are represented as
   3510             # lists, where the order of field values matches the order of
   3511             # fields in the StructType. In turn, the order of fields
   3512             # matches the order of columns in a read request, or the order of
   3513             # fields in the `SELECT` clause of a query.
   3514           { # Message representing a single field of a struct.
   3515             "type": { # `Type` indicates the type of a Cloud Spanner value, as might be stored in a # The type of the field.
   3516                 # table cell or returned from an SQL query.
   3517               "structType": # Object with schema name: StructType # If code == STRUCT, then `struct_type`
   3518                   # provides type information for the struct's fields.
   3519               "code": "A String", # Required. The TypeCode for this type.
   3520               "arrayElementType": # Object with schema name: Type # If code == ARRAY, then `array_element_type`
   3521                   # is the type of the array elements.
   3522             },
   3523             "name": "A String", # The name of the field. For reads, this is the column name. For
   3524                 # SQL queries, it is the column alias (e.g., `"Word"` in the
   3525                 # query `"SELECT 'hello' AS Word"`), or the column name (e.g.,
   3526                 # `"ColName"` in the query `"SELECT ColName FROM Table"`). Some
   3527                 # columns might have an empty name (e.g., !"SELECT
   3528                 # UPPER(ColName)"`). Note that a query result can contain
   3529                 # multiple fields with the same name.
   3530           },
   3531         ],
   3532       },
   3533       "transaction": { # A transaction. # If the read or SQL query began a transaction as a side-effect, the
   3534           # information about the new transaction is yielded here.
   3535         "readTimestamp": "A String", # For snapshot read-only transactions, the read timestamp chosen
   3536             # for the transaction. Not returned by default: see
   3537             # TransactionOptions.ReadOnly.return_read_timestamp.
   3538         "id": "A String", # `id` may be used to identify the transaction in subsequent
   3539             # Read,
   3540             # ExecuteSql,
   3541             # Commit, or
   3542             # Rollback calls.
   3543             #
   3544             # Single-use read-only transactions do not have IDs, because
   3545             # single-use transactions do not support multiple requests.
   3546       },
   3547     },
   3548   }</pre>
   3549 </div>
   3550 
   3551 <div class="method">
   3552     <code class="details" id="rollback">rollback(session, body, x__xgafv=None)</code>
   3553   <pre>Rolls back a transaction, releasing any locks it holds. It is a good
   3554 idea to call this for any transaction that includes one or more
   3555 Read or ExecuteSql requests and
   3556 ultimately decides not to commit.
   3557 
   3558 `Rollback` returns `OK` if it successfully aborts the transaction, the
   3559 transaction was already aborted, or the transaction is not
   3560 found. `Rollback` never returns `ABORTED`.
   3561 
   3562 Args:
   3563   session: string, Required. The session in which the transaction to roll back is running. (required)
   3564   body: object, The request body. (required)
   3565     The object takes the form of:
   3566 
   3567 { # The request for Rollback.
   3568     "transactionId": "A String", # Required. The transaction to roll back.
   3569   }
   3570 
   3571   x__xgafv: string, V1 error format.
   3572     Allowed values
   3573       1 - v1 error format
   3574       2 - v2 error format
   3575 
   3576 Returns:
   3577   An object of the form:
   3578 
   3579     { # A generic empty message that you can re-use to avoid defining duplicated
   3580       # empty messages in your APIs. A typical example is to use it as the request
   3581       # or the response type of an API method. For instance:
   3582       #
   3583       #     service Foo {
   3584       #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
   3585       #     }
   3586       #
   3587       # The JSON representation for `Empty` is empty JSON object `{}`.
   3588   }</pre>
   3589 </div>
   3590 
   3591 <div class="method">
   3592     <code class="details" id="streamingRead">streamingRead(session, body, x__xgafv=None)</code>
   3593   <pre>Like Read, except returns the result set as a
   3594 stream. Unlike Read, there is no limit on the
   3595 size of the returned result set. However, no individual row in
   3596 the result set can exceed 100 MiB, and no column value can exceed
   3597 10 MiB.
   3598 
   3599 Args:
   3600   session: string, Required. The session in which the read should be performed. (required)
   3601   body: object, The request body. (required)
   3602     The object takes the form of:
   3603 
   3604 { # The request for Read and
   3605       # StreamingRead.
   3606     "index": "A String", # If non-empty, the name of an index on table. This index is
   3607         # used instead of the table primary key when interpreting key_set
   3608         # and sorting result rows. See key_set for further information.
   3609     "transaction": { # This message is used to select the transaction in which a # The transaction to use. If none is provided, the default is a
   3610         # temporary read-only transaction with strong concurrency.
   3611         # Read or
   3612         # ExecuteSql call runs.
   3613         #
   3614         # See TransactionOptions for more information about transactions.
   3615       "begin": { # # Transactions # Begin a new transaction and execute this read or SQL query in
   3616           # it. The transaction ID of the new transaction is returned in
   3617           # ResultSetMetadata.transaction, which is a Transaction.
   3618           #
   3619           #
   3620           # Each session can have at most one active transaction at a time. After the
   3621           # active transaction is completed, the session can immediately be
   3622           # re-used for the next transaction. It is not necessary to create a
   3623           # new session for each transaction.
   3624           #
   3625           # # Transaction Modes
   3626           #
   3627           # Cloud Spanner supports two transaction modes:
   3628           #
   3629           #   1. Locking read-write. This type of transaction is the only way
   3630           #      to write data into Cloud Spanner. These transactions rely on
   3631           #      pessimistic locking and, if necessary, two-phase commit.
   3632           #      Locking read-write transactions may abort, requiring the
   3633           #      application to retry.
   3634           #
   3635           #   2. Snapshot read-only. This transaction type provides guaranteed
   3636           #      consistency across several reads, but does not allow
   3637           #      writes. Snapshot read-only transactions can be configured to
   3638           #      read at timestamps in the past. Snapshot read-only
   3639           #      transactions do not need to be committed.
   3640           #
   3641           # For transactions that only read, snapshot read-only transactions
   3642           # provide simpler semantics and are almost always faster. In
   3643           # particular, read-only transactions do not take locks, so they do
   3644           # not conflict with read-write transactions. As a consequence of not
   3645           # taking locks, they also do not abort, so retry loops are not needed.
   3646           #
   3647           # Transactions may only read/write data in a single database. They
   3648           # may, however, read/write data in different tables within that
   3649           # database.
   3650           #
   3651           # ## Locking Read-Write Transactions
   3652           #
   3653           # Locking transactions may be used to atomically read-modify-write
   3654           # data anywhere in a database. This type of transaction is externally
   3655           # consistent.
   3656           #
   3657           # Clients should attempt to minimize the amount of time a transaction
   3658           # is active. Faster transactions commit with higher probability
   3659           # and cause less contention. Cloud Spanner attempts to keep read locks
   3660           # active as long as the transaction continues to do reads, and the
   3661           # transaction has not been terminated by
   3662           # Commit or
   3663           # Rollback.  Long periods of
   3664           # inactivity at the client may cause Cloud Spanner to release a
   3665           # transaction's locks and abort it.
   3666           #
   3667           # Reads performed within a transaction acquire locks on the data
   3668           # being read. Writes can only be done at commit time, after all reads
   3669           # have been completed.
   3670           # Conceptually, a read-write transaction consists of zero or more
   3671           # reads or SQL queries followed by
   3672           # Commit. At any time before
   3673           # Commit, the client can send a
   3674           # Rollback request to abort the
   3675           # transaction.
   3676           #
   3677           # ### Semantics
   3678           #
   3679           # Cloud Spanner can commit the transaction if all read locks it acquired
   3680           # are still valid at commit time, and it is able to acquire write
   3681           # locks for all writes. Cloud Spanner can abort the transaction for any
   3682           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   3683           # that the transaction has not modified any user data in Cloud Spanner.
   3684           #
   3685           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   3686           # how long the transaction's locks were held for. It is an error to
   3687           # use Cloud Spanner locks for any sort of mutual exclusion other than
   3688           # between Cloud Spanner transactions themselves.
   3689           #
   3690           # ### Retrying Aborted Transactions
   3691           #
   3692           # When a transaction aborts, the application can choose to retry the
   3693           # whole transaction again. To maximize the chances of successfully
   3694           # committing the retry, the client should execute the retry in the
   3695           # same session as the original attempt. The original session's lock
   3696           # priority increases with each consecutive abort, meaning that each
   3697           # attempt has a slightly better chance of success than the previous.
   3698           #
   3699           # Under some circumstances (e.g., many transactions attempting to
   3700           # modify the same row(s)), a transaction can abort many times in a
   3701           # short period before successfully committing. Thus, it is not a good
   3702           # idea to cap the number of retries a transaction can attempt;
   3703           # instead, it is better to limit the total amount of wall time spent
   3704           # retrying.
   3705           #
   3706           # ### Idle Transactions
   3707           #
   3708           # A transaction is considered idle if it has no outstanding reads or
   3709           # SQL queries and has not started a read or SQL query within the last 10
   3710           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   3711           # don't hold on to locks indefinitely. In that case, the commit will
   3712           # fail with error `ABORTED`.
   3713           #
   3714           # If this behavior is undesirable, periodically executing a simple
   3715           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   3716           # transaction from becoming idle.
   3717           #
   3718           # ## Snapshot Read-Only Transactions
   3719           #
   3720           # Snapshot read-only transactions provides a simpler method than
   3721           # locking read-write transactions for doing several consistent
   3722           # reads. However, this type of transaction does not support writes.
   3723           #
   3724           # Snapshot transactions do not take locks. Instead, they work by
   3725           # choosing a Cloud Spanner timestamp, then executing all reads at that
   3726           # timestamp. Since they do not acquire locks, they do not block
   3727           # concurrent read-write transactions.
   3728           #
   3729           # Unlike locking read-write transactions, snapshot read-only
   3730           # transactions never abort. They can fail if the chosen read
   3731           # timestamp is garbage collected; however, the default garbage
   3732           # collection policy is generous enough that most applications do not
   3733           # need to worry about this in practice.
   3734           #
   3735           # Snapshot read-only transactions do not need to call
   3736           # Commit or
   3737           # Rollback (and in fact are not
   3738           # permitted to do so).
   3739           #
   3740           # To execute a snapshot transaction, the client specifies a timestamp
   3741           # bound, which tells Cloud Spanner how to choose a read timestamp.
   3742           #
   3743           # The types of timestamp bound are:
   3744           #
   3745           #   - Strong (the default).
   3746           #   - Bounded staleness.
   3747           #   - Exact staleness.
   3748           #
   3749           # If the Cloud Spanner database to be read is geographically distributed,
   3750           # stale read-only transactions can execute more quickly than strong
   3751           # or read-write transaction, because they are able to execute far
   3752           # from the leader replica.
   3753           #
   3754           # Each type of timestamp bound is discussed in detail below.
   3755           #
   3756           # ### Strong
   3757           #
   3758           # Strong reads are guaranteed to see the effects of all transactions
   3759           # that have committed before the start of the read. Furthermore, all
   3760           # rows yielded by a single read are consistent with each other -- if
   3761           # any part of the read observes a transaction, all parts of the read
   3762           # see the transaction.
   3763           #
   3764           # Strong reads are not repeatable: two consecutive strong read-only
   3765           # transactions might return inconsistent results if there are
   3766           # concurrent writes. If consistency across reads is required, the
   3767           # reads should be executed within a transaction or at an exact read
   3768           # timestamp.
   3769           #
   3770           # See TransactionOptions.ReadOnly.strong.
   3771           #
   3772           # ### Exact Staleness
   3773           #
   3774           # These timestamp bounds execute reads at a user-specified
   3775           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   3776           # prefix of the global transaction history: they observe
   3777           # modifications done by all transactions with a commit timestamp <=
   3778           # the read timestamp, and observe none of the modifications done by
   3779           # transactions with a larger commit timestamp. They will block until
   3780           # all conflicting transactions that may be assigned commit timestamps
   3781           # <= the read timestamp have finished.
   3782           #
   3783           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   3784           # timestamp or a staleness relative to the current time.
   3785           #
   3786           # These modes do not require a "negotiation phase" to pick a
   3787           # timestamp. As a result, they execute slightly faster than the
   3788           # equivalent boundedly stale concurrency modes. On the other hand,
   3789           # boundedly stale reads usually return fresher results.
   3790           #
   3791           # See TransactionOptions.ReadOnly.read_timestamp and
   3792           # TransactionOptions.ReadOnly.exact_staleness.
   3793           #
   3794           # ### Bounded Staleness
   3795           #
   3796           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   3797           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   3798           # newest timestamp within the staleness bound that allows execution
   3799           # of the reads at the closest available replica without blocking.
   3800           #
   3801           # All rows yielded are consistent with each other -- if any part of
   3802           # the read observes a transaction, all parts of the read see the
   3803           # transaction. Boundedly stale reads are not repeatable: two stale
   3804           # reads, even if they use the same staleness bound, can execute at
   3805           # different timestamps and thus return inconsistent results.
   3806           #
   3807           # Boundedly stale reads execute in two phases: the first phase
   3808           # negotiates a timestamp among all replicas needed to serve the
   3809           # read. In the second phase, reads are executed at the negotiated
   3810           # timestamp.
   3811           #
   3812           # As a result of the two phase execution, bounded staleness reads are
   3813           # usually a little slower than comparable exact staleness
   3814           # reads. However, they are typically able to return fresher
   3815           # results, and are more likely to execute at the closest replica.
   3816           #
   3817           # Because the timestamp negotiation requires up-front knowledge of
   3818           # which rows will be read, it can only be used with single-use
   3819           # read-only transactions.
   3820           #
   3821           # See TransactionOptions.ReadOnly.max_staleness and
   3822           # TransactionOptions.ReadOnly.min_read_timestamp.
   3823           #
   3824           # ### Old Read Timestamps and Garbage Collection
   3825           #
   3826           # Cloud Spanner continuously garbage collects deleted and overwritten data
   3827           # in the background to reclaim storage space. This process is known
   3828           # as "version GC". By default, version GC reclaims versions after they
   3829           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   3830           # at read timestamps more than one hour in the past. This
   3831           # restriction also applies to in-progress reads and/or SQL queries whose
   3832           # timestamp become too old while executing. Reads and SQL queries with
   3833           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   3834         "readWrite": { # Options for read-write transactions. # Transaction may write.
   3835             #
   3836             # Authorization to begin a read-write transaction requires
   3837             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   3838             # on the `session` resource.
   3839         },
   3840         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   3841             #
   3842             # Authorization to begin a read-only transaction requires
   3843             # `spanner.databases.beginReadOnlyTransaction` permission
   3844             # on the `session` resource.
   3845           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   3846               #
   3847               # This is useful for requesting fresher data than some previous
   3848               # read, or data that is fresh enough to observe the effects of some
   3849               # previously committed transaction whose timestamp is known.
   3850               #
   3851               # Note that this option can only be used in single-use transactions.
   3852           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   3853               # the Transaction message that describes the transaction.
   3854           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   3855               # seconds. Guarantees that all writes that have committed more
   3856               # than the specified number of seconds ago are visible. Because
   3857               # Cloud Spanner chooses the exact timestamp, this mode works even if
   3858               # the client's local clock is substantially skewed from Cloud Spanner
   3859               # commit timestamps.
   3860               #
   3861               # Useful for reading the freshest data available at a nearby
   3862               # replica, while bounding the possible staleness if the local
   3863               # replica has fallen behind.
   3864               #
   3865               # Note that this option can only be used in single-use
   3866               # transactions.
   3867           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   3868               # old. The timestamp is chosen soon after the read is started.
   3869               #
   3870               # Guarantees that all writes that have committed more than the
   3871               # specified number of seconds ago are visible. Because Cloud Spanner
   3872               # chooses the exact timestamp, this mode works even if the client's
   3873               # local clock is substantially skewed from Cloud Spanner commit
   3874               # timestamps.
   3875               #
   3876               # Useful for reading at nearby replicas without the distributed
   3877               # timestamp negotiation overhead of `max_staleness`.
   3878           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   3879               # reads at a specific timestamp are repeatable; the same read at
   3880               # the same timestamp always returns the same data. If the
   3881               # timestamp is in the future, the read will block until the
   3882               # specified timestamp, modulo the read's deadline.
   3883               #
   3884               # Useful for large scale consistent reads such as mapreduces, or
   3885               # for coordinating many reads against a consistent snapshot of the
   3886               # data.
   3887           "strong": True or False, # Read at a timestamp where all previously committed transactions
   3888               # are visible.
   3889         },
   3890       },
   3891       "singleUse": { # # Transactions # Execute the read or SQL query in a temporary transaction.
   3892           # This is the most efficient way to execute a transaction that
   3893           # consists of a single SQL query.
   3894           #
   3895           #
   3896           # Each session can have at most one active transaction at a time. After the
   3897           # active transaction is completed, the session can immediately be
   3898           # re-used for the next transaction. It is not necessary to create a
   3899           # new session for each transaction.
   3900           #
   3901           # # Transaction Modes
   3902           #
   3903           # Cloud Spanner supports two transaction modes:
   3904           #
   3905           #   1. Locking read-write. This type of transaction is the only way
   3906           #      to write data into Cloud Spanner. These transactions rely on
   3907           #      pessimistic locking and, if necessary, two-phase commit.
   3908           #      Locking read-write transactions may abort, requiring the
   3909           #      application to retry.
   3910           #
   3911           #   2. Snapshot read-only. This transaction type provides guaranteed
   3912           #      consistency across several reads, but does not allow
   3913           #      writes. Snapshot read-only transactions can be configured to
   3914           #      read at timestamps in the past. Snapshot read-only
   3915           #      transactions do not need to be committed.
   3916           #
   3917           # For transactions that only read, snapshot read-only transactions
   3918           # provide simpler semantics and are almost always faster. In
   3919           # particular, read-only transactions do not take locks, so they do
   3920           # not conflict with read-write transactions. As a consequence of not
   3921           # taking locks, they also do not abort, so retry loops are not needed.
   3922           #
   3923           # Transactions may only read/write data in a single database. They
   3924           # may, however, read/write data in different tables within that
   3925           # database.
   3926           #
   3927           # ## Locking Read-Write Transactions
   3928           #
   3929           # Locking transactions may be used to atomically read-modify-write
   3930           # data anywhere in a database. This type of transaction is externally
   3931           # consistent.
   3932           #
   3933           # Clients should attempt to minimize the amount of time a transaction
   3934           # is active. Faster transactions commit with higher probability
   3935           # and cause less contention. Cloud Spanner attempts to keep read locks
   3936           # active as long as the transaction continues to do reads, and the
   3937           # transaction has not been terminated by
   3938           # Commit or
   3939           # Rollback.  Long periods of
   3940           # inactivity at the client may cause Cloud Spanner to release a
   3941           # transaction's locks and abort it.
   3942           #
   3943           # Reads performed within a transaction acquire locks on the data
   3944           # being read. Writes can only be done at commit time, after all reads
   3945           # have been completed.
   3946           # Conceptually, a read-write transaction consists of zero or more
   3947           # reads or SQL queries followed by
   3948           # Commit. At any time before
   3949           # Commit, the client can send a
   3950           # Rollback request to abort the
   3951           # transaction.
   3952           #
   3953           # ### Semantics
   3954           #
   3955           # Cloud Spanner can commit the transaction if all read locks it acquired
   3956           # are still valid at commit time, and it is able to acquire write
   3957           # locks for all writes. Cloud Spanner can abort the transaction for any
   3958           # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
   3959           # that the transaction has not modified any user data in Cloud Spanner.
   3960           #
   3961           # Unless the transaction commits, Cloud Spanner makes no guarantees about
   3962           # how long the transaction's locks were held for. It is an error to
   3963           # use Cloud Spanner locks for any sort of mutual exclusion other than
   3964           # between Cloud Spanner transactions themselves.
   3965           #
   3966           # ### Retrying Aborted Transactions
   3967           #
   3968           # When a transaction aborts, the application can choose to retry the
   3969           # whole transaction again. To maximize the chances of successfully
   3970           # committing the retry, the client should execute the retry in the
   3971           # same session as the original attempt. The original session's lock
   3972           # priority increases with each consecutive abort, meaning that each
   3973           # attempt has a slightly better chance of success than the previous.
   3974           #
   3975           # Under some circumstances (e.g., many transactions attempting to
   3976           # modify the same row(s)), a transaction can abort many times in a
   3977           # short period before successfully committing. Thus, it is not a good
   3978           # idea to cap the number of retries a transaction can attempt;
   3979           # instead, it is better to limit the total amount of wall time spent
   3980           # retrying.
   3981           #
   3982           # ### Idle Transactions
   3983           #
   3984           # A transaction is considered idle if it has no outstanding reads or
   3985           # SQL queries and has not started a read or SQL query within the last 10
   3986           # seconds. Idle transactions can be aborted by Cloud Spanner so that they
   3987           # don't hold on to locks indefinitely. In that case, the commit will
   3988           # fail with error `ABORTED`.
   3989           #
   3990           # If this behavior is undesirable, periodically executing a simple
   3991           # SQL query in the transaction (e.g., `SELECT 1`) prevents the
   3992           # transaction from becoming idle.
   3993           #
   3994           # ## Snapshot Read-Only Transactions
   3995           #
   3996           # Snapshot read-only transactions provides a simpler method than
   3997           # locking read-write transactions for doing several consistent
   3998           # reads. However, this type of transaction does not support writes.
   3999           #
   4000           # Snapshot transactions do not take locks. Instead, they work by
   4001           # choosing a Cloud Spanner timestamp, then executing all reads at that
   4002           # timestamp. Since they do not acquire locks, they do not block
   4003           # concurrent read-write transactions.
   4004           #
   4005           # Unlike locking read-write transactions, snapshot read-only
   4006           # transactions never abort. They can fail if the chosen read
   4007           # timestamp is garbage collected; however, the default garbage
   4008           # collection policy is generous enough that most applications do not
   4009           # need to worry about this in practice.
   4010           #
   4011           # Snapshot read-only transactions do not need to call
   4012           # Commit or
   4013           # Rollback (and in fact are not
   4014           # permitted to do so).
   4015           #
   4016           # To execute a snapshot transaction, the client specifies a timestamp
   4017           # bound, which tells Cloud Spanner how to choose a read timestamp.
   4018           #
   4019           # The types of timestamp bound are:
   4020           #
   4021           #   - Strong (the default).
   4022           #   - Bounded staleness.
   4023           #   - Exact staleness.
   4024           #
   4025           # If the Cloud Spanner database to be read is geographically distributed,
   4026           # stale read-only transactions can execute more quickly than strong
   4027           # or read-write transaction, because they are able to execute far
   4028           # from the leader replica.
   4029           #
   4030           # Each type of timestamp bound is discussed in detail below.
   4031           #
   4032           # ### Strong
   4033           #
   4034           # Strong reads are guaranteed to see the effects of all transactions
   4035           # that have committed before the start of the read. Furthermore, all
   4036           # rows yielded by a single read are consistent with each other -- if
   4037           # any part of the read observes a transaction, all parts of the read
   4038           # see the transaction.
   4039           #
   4040           # Strong reads are not repeatable: two consecutive strong read-only
   4041           # transactions might return inconsistent results if there are
   4042           # concurrent writes. If consistency across reads is required, the
   4043           # reads should be executed within a transaction or at an exact read
   4044           # timestamp.
   4045           #
   4046           # See TransactionOptions.ReadOnly.strong.
   4047           #
   4048           # ### Exact Staleness
   4049           #
   4050           # These timestamp bounds execute reads at a user-specified
   4051           # timestamp. Reads at a timestamp are guaranteed to see a consistent
   4052           # prefix of the global transaction history: they observe
   4053           # modifications done by all transactions with a commit timestamp <=
   4054           # the read timestamp, and observe none of the modifications done by
   4055           # transactions with a larger commit timestamp. They will block until
   4056           # all conflicting transactions that may be assigned commit timestamps
   4057           # <= the read timestamp have finished.
   4058           #
   4059           # The timestamp can either be expressed as an absolute Cloud Spanner commit
   4060           # timestamp or a staleness relative to the current time.
   4061           #
   4062           # These modes do not require a "negotiation phase" to pick a
   4063           # timestamp. As a result, they execute slightly faster than the
   4064           # equivalent boundedly stale concurrency modes. On the other hand,
   4065           # boundedly stale reads usually return fresher results.
   4066           #
   4067           # See TransactionOptions.ReadOnly.read_timestamp and
   4068           # TransactionOptions.ReadOnly.exact_staleness.
   4069           #
   4070           # ### Bounded Staleness
   4071           #
   4072           # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
   4073           # subject to a user-provided staleness bound. Cloud Spanner chooses the
   4074           # newest timestamp within the staleness bound that allows execution
   4075           # of the reads at the closest available replica without blocking.
   4076           #
   4077           # All rows yielded are consistent with each other -- if any part of
   4078           # the read observes a transaction, all parts of the read see the
   4079           # transaction. Boundedly stale reads are not repeatable: two stale
   4080           # reads, even if they use the same staleness bound, can execute at
   4081           # different timestamps and thus return inconsistent results.
   4082           #
   4083           # Boundedly stale reads execute in two phases: the first phase
   4084           # negotiates a timestamp among all replicas needed to serve the
   4085           # read. In the second phase, reads are executed at the negotiated
   4086           # timestamp.
   4087           #
   4088           # As a result of the two phase execution, bounded staleness reads are
   4089           # usually a little slower than comparable exact staleness
   4090           # reads. However, they are typically able to return fresher
   4091           # results, and are more likely to execute at the closest replica.
   4092           #
   4093           # Because the timestamp negotiation requires up-front knowledge of
   4094           # which rows will be read, it can only be used with single-use
   4095           # read-only transactions.
   4096           #
   4097           # See TransactionOptions.ReadOnly.max_staleness and
   4098           # TransactionOptions.ReadOnly.min_read_timestamp.
   4099           #
   4100           # ### Old Read Timestamps and Garbage Collection
   4101           #
   4102           # Cloud Spanner continuously garbage collects deleted and overwritten data
   4103           # in the background to reclaim storage space. This process is known
   4104           # as "version GC". By default, version GC reclaims versions after they
   4105           # are one hour old. Because of this, Cloud Spanner cannot perform reads
   4106           # at read timestamps more than one hour in the past. This
   4107           # restriction also applies to in-progress reads and/or SQL queries whose
   4108           # timestamp become too old while executing. Reads and SQL queries with
   4109           # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
   4110         "readWrite": { # Options for read-write transactions. # Transaction may write.
   4111             #
   4112             # Authorization to begin a read-write transaction requires
   4113             # `spanner.databases.beginOrRollbackReadWriteTransaction` permission
   4114             # on the `session` resource.
   4115         },
   4116         "readOnly": { # Options for read-only transactions. # Transaction will not write.
   4117             #
   4118             # Authorization to begin a read-only transaction requires
   4119             # `spanner.databases.beginReadOnlyTransaction` permission
   4120             # on the `session` resource.
   4121           "minReadTimestamp": "A String", # Executes all reads at a timestamp >= `min_read_timestamp`.
   4122               #
   4123               # This is useful for requesting fresher data than some previous
   4124               # read, or data that is fresh enough to observe the effects of some
   4125               # previously committed transaction whose timestamp is known.
   4126               #
   4127               # Note that this option can only be used in single-use transactions.
   4128           "returnReadTimestamp": True or False, # If true, the Cloud Spanner-selected read timestamp is included in
   4129               # the Transaction message that describes the transaction.
   4130           "maxStaleness": "A String", # Read data at a timestamp >= `NOW - max_staleness`
   4131               # seconds. Guarantees that all writes that have committed more
   4132               # than the specified number of seconds ago are visible. Because
   4133               # Cloud Spanner chooses the exact timestamp, this mode works even if
   4134               # the client's local clock is substantially skewed from Cloud Spanner
   4135               # commit timestamps.
   4136               #
   4137               # Useful for reading the freshest data available at a nearby
   4138               # replica, while bounding the possible staleness if the local
   4139               # replica has fallen behind.
   4140               #
   4141               # Note that this option can only be used in single-use
   4142               # transactions.
   4143           "exactStaleness": "A String", # Executes all reads at a timestamp that is `exact_staleness`
   4144               # old. The timestamp is chosen soon after the read is started.
   4145               #
   4146               # Guarantees that all writes that have committed more than the
   4147               # specified number of seconds ago are visible. Because Cloud Spanner
   4148               # chooses the exact timestamp, this mode works even if the client's
   4149               # local clock is substantially skewed from Cloud Spanner commit
   4150               # timestamps.
   4151               #
   4152               # Useful for reading at nearby replicas without the distributed
   4153               # timestamp negotiation overhead of `max_staleness`.
   4154           "readTimestamp": "A String", # Executes all reads at the given timestamp. Unlike other modes,
   4155               # reads at a specific timestamp are repeatable; the same read at
   4156               # the same timestamp always returns the same data. If the
   4157               # timestamp is in the future, the read will block until the
   4158               # specified timestamp, modulo the read's deadline.
   4159               #
   4160               # Useful for large scale consistent reads such as mapreduces, or
   4161               # for coordinating many reads against a consistent snapshot of the
   4162               # data.
   4163           "strong": True or False, # Read at a timestamp where all previously committed transactions
   4164               # are visible.
   4165         },
   4166       },
   4167       "id": "A String", # Execute the read or SQL query in a previously-started transaction.
   4168     },
   4169     "resumeToken": "A String", # If this request is resuming a previously interrupted read,
   4170         # `resume_token` should be copied from the last
   4171         # PartialResultSet yielded before the interruption. Doing this
   4172         # enables the new read to resume where the last read left off. The
   4173         # rest of the request parameters must exactly match the request
   4174         # that yielded this token.
   4175     "keySet": { # `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All # Required. `key_set` identifies the rows to be yielded. `key_set` names the
   4176         # primary keys of the rows in table to be yielded, unless index
   4177         # is present. If index is present, then key_set instead names
   4178         # index keys in index.
   4179         # 
   4180         # Rows are yielded in table primary key order (if index is empty)
   4181         # or index key order (if index is non-empty).
   4182         # 
   4183         # It is not an error for the `key_set` to name rows that do not
   4184         # exist in the database. Read yields nothing for nonexistent rows.
   4185         # the keys are expected to be in the same table or index. The keys need
   4186         # not be sorted in any particular way.
   4187         #
   4188         # If the same key is specified multiple times in the set (for example
   4189         # if two ranges, two keys, or a key and a range overlap), Cloud Spanner
   4190         # behaves as if the key were only specified once.
   4191       "ranges": [ # A list of key ranges. See KeyRange for more information about
   4192           # key range specifications.
   4193         { # KeyRange represents a range of rows in a table or index.
   4194             #
   4195             # A range has a start key and an end key. These keys can be open or
   4196             # closed, indicating if the range includes rows with that key.
   4197             #
   4198             # Keys are represented by lists, where the ith value in the list
   4199             # corresponds to the ith component of the table or index primary key.
   4200             # Individual values are encoded as described here.
   4201             #
   4202             # For example, consider the following table definition:
   4203             #
   4204             #     CREATE TABLE UserEvents (
   4205             #       UserName STRING(MAX),
   4206             #       EventDate STRING(10)
   4207             #     ) PRIMARY KEY(UserName, EventDate);
   4208             #
   4209             # The following keys name rows in this table:
   4210             #
   4211             #     "Bob", "2014-09-23"
   4212             #
   4213             # Since the `UserEvents` table's `PRIMARY KEY` clause names two
   4214             # columns, each `UserEvents` key has two elements; the first is the
   4215             # `UserName`, and the second is the `EventDate`.
   4216             #
   4217             # Key ranges with multiple components are interpreted
   4218             # lexicographically by component using the table or index key's declared
   4219             # sort order. For example, the following range returns all events for
   4220             # user `"Bob"` that occurred in the year 2015:
   4221             #
   4222             #     "start_closed": ["Bob", "2015-01-01"]
   4223             #     "end_closed": ["Bob", "2015-12-31"]
   4224             #
   4225             # Start and end keys can omit trailing key components. This affects the
   4226             # inclusion and exclusion of rows that exactly match the provided key
   4227             # components: if the key is closed, then rows that exactly match the
   4228             # provided components are included; if the key is open, then rows
   4229             # that exactly match are not included.
   4230             #
   4231             # For example, the following range includes all events for `"Bob"` that
   4232             # occurred during and after the year 2000:
   4233             #
   4234             #     "start_closed": ["Bob", "2000-01-01"]
   4235             #     "end_closed": ["Bob"]
   4236             #
   4237             # The next example retrieves all events for `"Bob"`:
   4238             #
   4239             #     "start_closed": ["Bob"]
   4240             #     "end_closed": ["Bob"]
   4241             #
   4242             # To retrieve events before the year 2000:
   4243             #
   4244             #     "start_closed": ["Bob"]
   4245             #     "end_open": ["Bob", "2000-01-01"]
   4246             #
   4247             # The following range includes all rows in the table:
   4248             #
   4249             #     "start_closed": []
   4250             #     "end_closed": []
   4251             #
   4252             # This range returns all users whose `UserName` begins with any
   4253             # character from A to C:
   4254             #
   4255             #     "start_closed": ["A"]
   4256             #     "end_open": ["D"]
   4257             #
   4258             # This range returns all users whose `UserName` begins with B:
   4259             #
   4260             #     "start_closed": ["B"]
   4261             #     "end_open": ["C"]
   4262             #
   4263             # Key ranges honor column sort order. For example, suppose a table is
   4264             # defined as follows:
   4265             #
   4266             #     CREATE TABLE DescendingSortedTable {
   4267             #       Key INT64,
   4268             #       ...
   4269             #     ) PRIMARY KEY(Key DESC);
   4270             #
   4271             # The following range retrieves all rows with key values between 1
   4272             # and 100 inclusive:
   4273             #
   4274             #     "start_closed": ["100"]
   4275             #     "end_closed": ["1"]
   4276             #
   4277             # Note that 100 is passed as the start, and 1 is passed as the end,
   4278             # because `Key` is a descending column in the schema.
   4279           "endOpen": [ # If the end is open, then the range excludes rows whose first
   4280               # `len(end_open)` key columns exactly match `end_open`.
   4281             "",
   4282           ],
   4283           "startOpen": [ # If the start is open, then the range excludes rows whose first
   4284               # `len(start_open)` key columns exactly match `start_open`.
   4285             "",
   4286           ],
   4287           "endClosed": [ # If the end is closed, then the range includes all rows whose
   4288               # first `len(end_closed)` key columns exactly match `end_closed`.
   4289             "",
   4290           ],
   4291           "startClosed": [ # If the start is closed, then the range includes all rows whose
   4292               # first `len(start_closed)` key columns exactly match `start_closed`.
   4293             "",
   4294           ],
   4295         },
   4296       ],
   4297       "keys": [ # A list of specific keys. Entries in `keys` should have exactly as
   4298           # many elements as there are columns in the primary or index key
   4299           # with which this `KeySet` is used.  Individual key values are
   4300           # encoded as described here.
   4301         [
   4302           "",
   4303         ],
   4304       ],
   4305       "all": True or False, # For convenience `all` can be set to `true` to indicate that this
   4306           # `KeySet` matches all keys in the table or index. Note that any keys
   4307           # specified in `keys` or `ranges` are only yielded once.
   4308     },
   4309     "limit": "A String", # If greater than zero, only the first `limit` rows are yielded. If `limit`
   4310         # is zero, the default is no limit.
   4311     "table": "A String", # Required. The name of the table in the database to be read.
   4312     "columns": [ # The columns of table to be returned for each row matching
   4313         # this request.
   4314       "A String",
   4315     ],
   4316   }
   4317 
   4318   x__xgafv: string, V1 error format.
   4319     Allowed values
   4320       1 - v1 error format
   4321       2 - v2 error format
   4322 
   4323 Returns:
   4324   An object of the form:
   4325 
   4326     { # Partial results from a streaming read or SQL query. Streaming reads and
   4327       # SQL queries better tolerate large result sets, large rows, and large
   4328       # values, but are a little trickier to consume.
   4329     "resumeToken": "A String", # Streaming calls might be interrupted for a variety of reasons, such
   4330         # as TCP connection loss. If this occurs, the stream of results can
   4331         # be resumed by re-sending the original request and including
   4332         # `resume_token`. Note that executing any other transaction in the
   4333         # same session invalidates the token.
   4334     "chunkedValue": True or False, # If true, then the final value in values is chunked, and must
   4335         # be combined with more values from subsequent `PartialResultSet`s
   4336         # to obtain a complete field value.
   4337     "values": [ # A streamed result set consists of a stream of values, which might
   4338         # be split into many `PartialResultSet` messages to accommodate
   4339         # large rows and/or large values. Every N complete values defines a
   4340         # row, where N is equal to the number of entries in
   4341         # metadata.row_type.fields.
   4342         #
   4343         # Most values are encoded based on type as described
   4344         # here.
   4345         #
   4346         # It is possible that the last value in values is "chunked",
   4347         # meaning that the rest of the value is sent in subsequent
   4348         # `PartialResultSet`(s). This is denoted by the chunked_value
   4349         # field. Two or more chunked values can be merged to form a
   4350         # complete value as follows:
   4351         #
   4352         #   * `bool/number/null`: cannot be chunked
   4353         #   * `string`: concatenate the strings
   4354         #   * `list`: concatenate the lists. If the last element in a list is a
   4355         #     `string`, `list`, or `object`, merge it with the first element in
   4356         #     the next list by applying these rules recursively.
   4357         #   * `object`: concatenate the (field name, field value) pairs. If a
   4358         #     field name is duplicated, then apply these rules recursively
   4359         #     to merge the field values.
   4360         #
   4361         # Some examples of merging:
   4362         #
   4363         #     # Strings are concatenated.
   4364         #     "foo", "bar" => "foobar"
   4365         #
   4366         #     # Lists of non-strings are concatenated.
   4367         #     [2, 3], [4] => [2, 3, 4]
   4368         #
   4369         #     # Lists are concatenated, but the last and first elements are merged
   4370         #     # because they are strings.
   4371         #     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
   4372         #
   4373         #     # Lists are concatenated, but the last and first elements are merged
   4374         #     # because they are lists. Recursively, the last and first elements
   4375         #     # of the inner lists are merged because they are strings.
   4376         #     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
   4377         #
   4378         #     # Non-overlapping object fields are combined.
   4379         #     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
   4380         #
   4381         #     # Overlapping object fields are merged.
   4382         #     {"a": "1"}, {"a": "2"} => {"a": "12"}
   4383         #
   4384         #     # Examples of merging objects containing lists of strings.
   4385         #     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
   4386         #
   4387         # For a more complete example, suppose a streaming SQL query is
   4388         # yielding a result set whose rows contain a single string
   4389         # field. The following `PartialResultSet`s might be yielded:
   4390         #
   4391         #     {
   4392         #       "metadata": { ... }
   4393         #       "values": ["Hello", "W"]
   4394         #       "chunked_value": true
   4395         #       "resume_token": "Af65..."
   4396         #     }
   4397         #     {
   4398         #       "values": ["orl"]
   4399         #       "chunked_value": true
   4400         #       "resume_token": "Bqp2..."
   4401         #     }
   4402         #     {
   4403         #       "values": ["d"]
   4404         #       "resume_token": "Zx1B..."
   4405         #     }
   4406         #
   4407         # This sequence of `PartialResultSet`s encodes two rows, one
   4408         # containing the field value `"Hello"`, and a second containing the
   4409         # field value `"World" = "W" + "orl" + "d"`.
   4410       "",
   4411     ],
   4412     "stats": { # Additional statistics about a ResultSet or PartialResultSet. # Query plan and execution statistics for the query that produced this
   4413         # streaming result set. These can be requested by setting
   4414         # ExecuteSqlRequest.query_mode and are sent
   4415         # only once with the last response in the stream.
   4416       "queryPlan": { # Contains an ordered list of nodes appearing in the query plan. # QueryPlan for the query associated with this result.
   4417         "planNodes": [ # The nodes in the query plan. Plan nodes are returned in pre-order starting
   4418             # with the plan root. Each PlanNode's `id` corresponds to its index in
   4419             # `plan_nodes`.
   4420           { # Node information for nodes appearing in a QueryPlan.plan_nodes.
   4421             "index": 42, # The `PlanNode`'s index in node list.
   4422             "kind": "A String", # Used to determine the type of node. May be needed for visualizing
   4423                 # different kinds of nodes differently. For example, If the node is a
   4424                 # SCALAR node, it will have a condensed representation
   4425                 # which can be used to directly embed a description of the node in its
   4426                 # parent.
   4427             "displayName": "A String", # The display name for the node.
   4428             "executionStats": { # The execution statistics associated with the node, contained in a group of
   4429                 # key-value pairs. Only present if the plan was returned as a result of a
   4430                 # profile query. For example, number of executions, number of rows/time per
   4431                 # execution etc.
   4432               "a_key": "", # Properties of the object.
   4433             },
   4434             "childLinks": [ # List of child node `index`es and their relationship to this parent.
   4435               { # Metadata associated with a parent-child relationship appearing in a
   4436                   # PlanNode.
   4437                 "variable": "A String", # Only present if the child node is SCALAR and corresponds
   4438                     # to an output variable of the parent node. The field carries the name of
   4439                     # the output variable.
   4440                     # For example, a `TableScan` operator that reads rows from a table will
   4441                     # have child links to the `SCALAR` nodes representing the output variables
   4442                     # created for each column that is read by the operator. The corresponding
   4443                     # `variable` fields will be set to the variable names assigned to the
   4444                     # columns.
   4445                 "childIndex": 42, # The node to which the link points.
   4446                 "type": "A String", # The type of the link. For example, in Hash Joins this could be used to
   4447                     # distinguish between the build child and the probe child, or in the case
   4448                     # of the child being an output variable, to represent the tag associated
   4449                     # with the output variable.
   4450               },
   4451             ],
   4452             "shortRepresentation": { # Condensed representation of a node and its subtree. Only present for # Condensed representation for SCALAR nodes.
   4453                 # `SCALAR` PlanNode(s).
   4454               "subqueries": { # A mapping of (subquery variable name) -> (subquery node id) for cases
   4455                   # where the `description` string of this node references a `SCALAR`
   4456                   # subquery contained in the expression subtree rooted at this node. The
   4457                   # referenced `SCALAR` subquery may not necessarily be a direct child of
   4458                   # this node.
   4459                 "a_key": 42,
   4460               },
   4461               "description": "A String", # A string representation of the expression subtree rooted at this node.
   4462             },
   4463             "metadata": { # Attributes relevant to the node contained in a group of key-value pairs.
   4464                 # For example, a Parameter Reference node could have the following
   4465                 # information in its metadata:
   4466                 #
   4467                 #     {
   4468                 #       "parameter_reference": "param1",
   4469                 #       "parameter_type": "array"
   4470                 #     }
   4471               "a_key": "", # Properties of the object.
   4472             },
   4473           },
   4474         ],
   4475       },
   4476       "queryStats": { # Aggregated statistics from the execution of the query. Only present when
   4477           # the query is profiled. For example, a query could return the statistics as
   4478           # follows:
   4479           #
   4480           #     {
   4481           #       "rows_returned": "3",
   4482           #       "elapsed_time": "1.22 secs",
   4483           #       "cpu_time": "1.19 secs"
   4484           #     }
   4485         "a_key": "", # Properties of the object.
   4486       },
   4487     },
   4488     "metadata": { # Metadata about a ResultSet or PartialResultSet. # Metadata about the result set, such as row type information.
   4489         # Only present in the first response.
   4490       "rowType": { # `StructType` defines the fields of a STRUCT type. # Indicates the field names and types for the rows in the result
   4491           # set.  For example, a SQL query like `"SELECT UserId, UserName FROM
   4492           # Users"` could return a `row_type` value like:
   4493           #
   4494           #     "fields": [
   4495           #       { "name": "UserId", "type": { "code": "INT64" } },
   4496           #       { "name": "UserName", "type": { "code": "STRING" } },
   4497           #     ]
   4498         "fields": [ # The list of fields that make up this struct. Order is
   4499             # significant, because values of this struct type are represented as
   4500             # lists, where the order of field values matches the order of
   4501             # fields in the StructType. In turn, the order of fields
   4502             # matches the order of columns in a read request, or the order of
   4503             # fields in the `SELECT` clause of a query.
   4504           { # Message representing a single field of a struct.
   4505             "type": { # `Type` indicates the type of a Cloud Spanner value, as might be stored in a # The type of the field.
   4506                 # table cell or returned from an SQL query.
   4507               "structType": # Object with schema name: StructType # If code == STRUCT, then `struct_type`
   4508                   # provides type information for the struct's fields.
   4509               "code": "A String", # Required. The TypeCode for this type.
   4510               "arrayElementType": # Object with schema name: Type # If code == ARRAY, then `array_element_type`
   4511                   # is the type of the array elements.
   4512             },
   4513             "name": "A String", # The name of the field. For reads, this is the column name. For
   4514                 # SQL queries, it is the column alias (e.g., `"Word"` in the
   4515                 # query `"SELECT 'hello' AS Word"`), or the column name (e.g.,
   4516                 # `"ColName"` in the query `"SELECT ColName FROM Table"`). Some
   4517                 # columns might have an empty name (e.g., !"SELECT
   4518                 # UPPER(ColName)"`). Note that a query result can contain
   4519                 # multiple fields with the same name.
   4520           },
   4521         ],
   4522       },
   4523       "transaction": { # A transaction. # If the read or SQL query began a transaction as a side-effect, the
   4524           # information about the new transaction is yielded here.
   4525         "readTimestamp": "A String", # For snapshot read-only transactions, the read timestamp chosen
   4526             # for the transaction. Not returned by default: see
   4527             # TransactionOptions.ReadOnly.return_read_timestamp.
   4528         "id": "A String", # `id` may be used to identify the transaction in subsequent
   4529             # Read,
   4530             # ExecuteSql,
   4531             # Commit, or
   4532             # Rollback calls.
   4533             #
   4534             # Single-use read-only transactions do not have IDs, because
   4535             # single-use transactions do not support multiple requests.
   4536       },
   4537     },
   4538   }</pre>
   4539 </div>
   4540 
   4541 </body></html>