The Cloud Spanner API can be used to manage sessions and execute
transactions on data stored in Cloud Spanner databases.
Constructor
new SpannerClient(optionsopt)
Construct an instance of SpannerClient.
Parameters:
Name
Type
Attributes
Description
options
object
<optional>
The configuration object.
The options accepted by the constructor are described in detail
in this document.
The common options are:
Properties
Name
Type
Attributes
Description
credentials
object
<optional>
Credentials object.
Properties
Name
Type
Attributes
Description
client_email
string
<optional>
private_key
string
<optional>
email
string
<optional>
Account email address. Required when
using a .pem or .p12 keyFilename.
keyFilename
string
<optional>
Full path to the a .json, .pem, or
.p12 key downloaded from the Google Developers Console. If you provide
a path to a JSON file, the projectId option below is not necessary.
NOTE: .pem and .p12 require you to specify options.email as well.
port
number
<optional>
The port on which to connect to
the remote host.
projectId
string
<optional>
The project ID from the Google
Developer's Console, e.g. 'grape-spaceship-123'. We will also check
the environment variable GCLOUD_PROJECT for your project ID. If your
app is running in an environment which supports
Application Default Credentials,
your project ID will be detected automatically.
apiEndpoint
string
<optional>
The domain name of the
API remote host.
clientConfig
gax.ClientConfig
<optional>
Client configuration override.
Follows the structure of gapicConfig.
fallback
boolean
<optional>
Use HTTP fallback mode.
In fallback mode, a special browser-compatible transport implementation is used
instead of gRPC transport. In browser context (if the window object is defined)
the fallback mode is enabled automatically; set options.fallback to false
if you need to override this behavior.
Members
apiEndpoint
The DNS address for this API service - same as servicePath(),
exists for compatibility reasons.
port
The port for this API service.
scopes
The scopes needed to make gRPC calls for every method defined
in this service.
Required. The number of sessions to be created in this batch call.
The API may return fewer than the requested number of sessions. If a
specific number of sessions are desired, the client can make additional
calls to BatchCreateSessions (adjusting
session_count as necessary).
The promise which resolves to an array.
The first element of the array is an object representing BatchCreateSessionsResponse.
Please see the
documentation
for more details and examples.
Common options for this request.
Priority is ignored for this request. Setting the priority in this
request_options struct will not do anything. To set the priority for a
transaction, set it on the reads and writes that are part of this
transaction instead.
The promise which resolves to an array.
The first element of the array is an object representing Transaction.
Please see the
documentation
for more details and examples.
The client will no longer be usable and all future behavior is undefined.
Returns:
Type
Description
Promise
A promise that resolves when the client is closed.
commit(request, optionsopt) → {Promise}
Commits a transaction. The request includes the mutations to be
applied to rows in the database.
Commit might return an ABORTED error. This can occur at any time;
commonly, the cause is conflicts with concurrent
transactions. However, it can also happen for a variety of other
reasons. If Commit returns ABORTED, the caller should re-attempt
the transaction from the beginning, re-using the same session.
On very rare occasions, Commit might return UNKNOWN. This can happen,
for example, if the client job experiences a 1+ hour networking failure.
At that point, Cloud Spanner has lost track of the transaction outcome and
we recommend that you perform another read from the database to see the
state of things as they are now.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the transaction to be committed is running.
Execute mutations in a temporary transaction. Note that unlike
commit of a previously-started transaction, commit with a
temporary transaction is non-idempotent. That is, if the
CommitRequest is sent to Cloud Spanner more than once (for
instance, due to retries in the application, or in the
transport library), it is possible that the mutations are
executed more than once. If this is undesirable, use
BeginTransaction and
Commit instead.
mutations
Array.<number>
The mutations to be executed when this transaction commits. All
mutations are applied atomically, in the order they appear in
this list.
returnCommitStats
boolean
If true, then statistics related to the transaction will be included in
the CommitResponse. Default value is
false.
The promise which resolves to an array.
The first element of the array is an object representing CommitResponse.
Please see the
documentation
for more details and examples.
Example
const [response] = await client.commit(request);
createSession(request, optionsopt) → {Promise}
Creates a new session. A session can be used to perform
transactions that read and/or modify data in a Cloud Spanner database.
Sessions are meant to be reused for many consecutive
transactions.
Sessions can only execute one transaction at a time. To execute
multiple concurrent read-write/write-only transactions, create
multiple sessions. Note that standalone reads and queries use a
transaction internally, and count toward the one transaction
limit.
Active sessions use additional server resources, so it is a good idea to
delete idle and unneeded sessions.
Aside from explicit deletes, Cloud Spanner may delete sessions for which no
operations are sent for more than an hour. If a session is deleted,
requests to it return NOT_FOUND.
Idle sessions can be kept alive by sending a trivial SQL query
periodically, e.g., "SELECT 1".
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
database
string
Required. The database in which the new session is created.
The promise which resolves to an array.
The first element of the array is an object representing Session.
Please see the
documentation
for more details and examples.
Return a fully-qualified database resource name string.
Parameters:
Name
Type
Description
project
string
instance
string
database
string
Returns:
Type
Description
string
Resource name string.
deleteSession(request, optionsopt) → {Promise}
Ends a session, releasing server resources associated with it. This will
asynchronously trigger cancellation of any operations that are running with
this session.
The promise which resolves to an array.
The first element of the array is an object representing Empty.
Please see the
documentation
for more details and examples.
Executes a batch of SQL DML statements. This method allows many statements
to be run with lower latency than submitting them sequentially with
ExecuteSql.
Statements are executed in sequential order. A request can succeed even if
a statement fails. The ExecuteBatchDmlResponse.status field in the
response provides information about the statement that failed. Clients must
inspect this field to determine whether an error occurred.
Execution stops after the first failed statement; the remaining statements
are not executed.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the DML statements should be performed.
Required. The transaction to use. Must be a read-write transaction.
To protect against replays, single-use transactions are not supported. The
caller must either supply an existing transaction ID or begin a new
transaction.
statements
Array.<number>
Required. The list of statements to execute in this batch. Statements are executed
serially, such that the effects of statement i are visible to statement
i+1. Each statement must be a DML statement. Execution stops at the
first failed statement; the remaining statements are not executed.
Callers must provide at least one statement.
seqno
number
Required. A per-transaction sequence number used to identify this request. This field
makes each request idempotent such that if the request is received multiple
times, at most one will succeed.
The sequence number must be monotonically increasing within the
transaction. If a request arrives for the first time with an out-of-order
sequence number, the transaction may be aborted. Replays of previously
handled requests will yield the same response as the first execution.
The promise which resolves to an array.
The first element of the array is an object representing ExecuteBatchDmlResponse.
Please see the
documentation
for more details and examples.
Executes an SQL statement, returning all results in a single reply. This
method cannot be used to return a result set larger than 10 MiB;
if the query yields more data than that, the query fails with
a FAILED_PRECONDITION error.
Operations inside read-write transactions might return ABORTED. If
this occurs, the application should restart the transaction from
the beginning. See Transaction for more details.
Larger result sets can be fetched in streaming fashion by calling
ExecuteStreamingSql instead.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the SQL query should be performed.
For queries, if none is provided, the default is a temporary read-only
transaction with strong concurrency.
Standard DML statements require a read-write transaction. To protect
against replays, single-use transactions are not supported. The caller
must either supply an existing transaction ID or begin a new transaction.
Partitioned DML requires an existing Partitioned DML transaction ID.
Parameter names and values that bind to placeholders in the SQL string.
A parameter placeholder consists of the @ character followed by the
parameter name (for example, @firstName). Parameter names must conform
to the naming requirements of identifiers as specified at
https://cloud.google.com/spanner/docs/lexical#identifiers.
Parameters can appear anywhere that a literal value is expected. The same
parameter name can be used more than once, for example:
"WHERE id > @msg_id AND id < @msg_id + 100"
It is an error to execute a SQL statement with unbound parameters.
paramTypes
Array.<number>
It is not always possible for Cloud Spanner to infer the right SQL type
from a JSON value. For example, values of type BYTES and values
of type STRING both appear in params as JSON strings.
In these cases, param_types can be used to specify the exact
SQL type for some or all of the SQL statement parameters. See the
definition of Type for more information
about SQL types.
resumeToken
Buffer
If this request is resuming a previously interrupted SQL statement
execution, resume_token should be copied from the last
PartialResultSet yielded before the interruption. Doing this
enables the new SQL statement execution to resume where the last one left
off. The rest of the request parameters must exactly match the
request that yielded this token.
Used to control the amount of debugging information returned in
ResultSetStats. If partition_token is set, query_mode can only
be set to QueryMode.NORMAL.
partitionToken
Buffer
If present, results will be restricted to the specified partition
previously created using PartitionQuery(). There must be an exact
match for the values of fields common to this message and the
PartitionQueryRequest message used to create this partition_token.
seqno
number
A per-transaction sequence number used to identify this request. This field
makes each request idempotent such that if the request is received multiple
times, at most one will succeed.
The sequence number must be monotonically increasing within the
transaction. If a request arrives for the first time with an out-of-order
sequence number, the transaction may be aborted. Replays of previously
handled requests will yield the same response as the first execution.
The promise which resolves to an array.
The first element of the array is an object representing ResultSet.
Please see the
documentation
for more details and examples.
Like ExecuteSql, except returns the result
set as a stream. Unlike ExecuteSql, there
is no limit on the size of the returned result set. However, no
individual row in the result set can exceed 100 MiB, and no
column value can exceed 10 MiB.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the SQL query should be performed.
For queries, if none is provided, the default is a temporary read-only
transaction with strong concurrency.
Standard DML statements require a read-write transaction. To protect
against replays, single-use transactions are not supported. The caller
must either supply an existing transaction ID or begin a new transaction.
Partitioned DML requires an existing Partitioned DML transaction ID.
Parameter names and values that bind to placeholders in the SQL string.
A parameter placeholder consists of the @ character followed by the
parameter name (for example, @firstName). Parameter names must conform
to the naming requirements of identifiers as specified at
https://cloud.google.com/spanner/docs/lexical#identifiers.
Parameters can appear anywhere that a literal value is expected. The same
parameter name can be used more than once, for example:
"WHERE id > @msg_id AND id < @msg_id + 100"
It is an error to execute a SQL statement with unbound parameters.
paramTypes
Array.<number>
It is not always possible for Cloud Spanner to infer the right SQL type
from a JSON value. For example, values of type BYTES and values
of type STRING both appear in params as JSON strings.
In these cases, param_types can be used to specify the exact
SQL type for some or all of the SQL statement parameters. See the
definition of Type for more information
about SQL types.
resumeToken
Buffer
If this request is resuming a previously interrupted SQL statement
execution, resume_token should be copied from the last
PartialResultSet yielded before the interruption. Doing this
enables the new SQL statement execution to resume where the last one left
off. The rest of the request parameters must exactly match the
request that yielded this token.
Used to control the amount of debugging information returned in
ResultSetStats. If partition_token is set, query_mode can only
be set to QueryMode.NORMAL.
partitionToken
Buffer
If present, results will be restricted to the specified partition
previously created using PartitionQuery(). There must be an exact
match for the values of fields common to this message and the
PartitionQueryRequest message used to create this partition_token.
seqno
number
A per-transaction sequence number used to identify this request. This field
makes each request idempotent such that if the request is received multiple
times, at most one will succeed.
The sequence number must be monotonically increasing within the
transaction. If a request arrives for the first time with an out-of-order
sequence number, the transaction may be aborted. Replays of previously
handled requests will yield the same response as the first execution.
The promise which resolves to an array.
The first element of the array is an object representing Session.
Please see the
documentation
for more details and examples.
Initialize the client.
Performs asynchronous operations (such as authentication) and prepares the client.
This function will be called automatically when any class method is called for the
first time, but if you need to initialize it before calling an actual method,
feel free to call initialize() directly.
You can await on this method if you want to make sure the client is initialized.
Returns:
Type
Description
Promise
A promise that resolves to an authenticated service stub.
listSessions(request, optionsopt) → {Promise}
Lists all sessions in a given database.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
database
string
Required. The database in which to list sessions.
pageSize
number
Number of sessions to be returned in the response. If 0 or less, defaults
to the server's maximum allowed page size.
pageToken
string
If non-empty, page_token should contain a
next_page_token from a previous
ListSessionsResponse.
filter
string
An expression for filtering the results of the request. Filter rules are
case insensitive. The fields eligible for filtering are:
* `labels.key` where key is the name of a label
Some examples of using filters are:
* `labels.env:*` --> The session has the label "env".
* `labels.env:dev` --> The session has the label "env" and the value of
the label contains the string "dev".
The promise which resolves to an array.
The first element of the array is Array of Session.
The client library will perform auto-pagination by default: it will call the API as many
times as needed and will merge results from all the pages into this array.
Note that it can affect your quota.
We recommend using listSessionsAsync()
method described below for async iteration which you can stop as needed.
Please see the
documentation
for more details and examples.
listSessionsAsync(request, optionsopt) → {Object}
Equivalent to listSessions, but returns an iterable object.
for-await-of syntax is used with the iterable to get response elements on-demand.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
database
string
Required. The database in which to list sessions.
pageSize
number
Number of sessions to be returned in the response. If 0 or less, defaults
to the server's maximum allowed page size.
pageToken
string
If non-empty, page_token should contain a
next_page_token from a previous
ListSessionsResponse.
filter
string
An expression for filtering the results of the request. Filter rules are
case insensitive. The fields eligible for filtering are:
* `labels.key` where key is the name of a label
Some examples of using filters are:
* `labels.env:*` --> The session has the label "env".
* `labels.env:dev` --> The session has the label "env" and the value of
the label contains the string "dev".
An iterable Object that allows async iteration.
When you iterate the returned iterable, each element will be an object representing
Session. The API will be called under the hood as needed, once per the page,
so you can stop the iteration when you don't need more results.
Please see the
documentation
for more details and examples.
Example
const iterable = client.listSessionsAsync(request);
for await (const response of iterable) {
// process response
}
Equivalent to method.name.toCamelCase(), but returns a NodeJS Stream object.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
database
string
Required. The database in which to list sessions.
pageSize
number
Number of sessions to be returned in the response. If 0 or less, defaults
to the server's maximum allowed page size.
pageToken
string
If non-empty, page_token should contain a
next_page_token from a previous
ListSessionsResponse.
filter
string
An expression for filtering the results of the request. Filter rules are
case insensitive. The fields eligible for filtering are:
* `labels.key` where key is the name of a label
Some examples of using filters are:
* `labels.env:*` --> The session has the label "env".
* `labels.env:dev` --> The session has the label "env" and the value of
the label contains the string "dev".
An object stream which emits an object representing Session on 'data' event.
The client library will perform auto-pagination by default: it will call the API as many
times as needed. Note that it can affect your quota.
We recommend using listSessionsAsync()
method described below for async iteration which you can stop as needed.
Please see the
documentation
for more details and examples.
A fully-qualified path representing Session resource.
Returns:
Type
Description
string
A string representing the session.
partitionQuery(request, optionsopt) → {Promise}
Creates a set of partition tokens that can be used to execute a query
operation in parallel. Each of the returned partition tokens can be used
by ExecuteStreamingSql to specify a subset
of the query result to read. The same session and read-only transaction
must be used by the PartitionQueryRequest used to create the
partition tokens and the ExecuteSqlRequests that use the partition tokens.
Partition tokens become invalid when the session used to create them
is deleted, is idle for too long, begins a new transaction, or becomes too
old. When any of these happen, it is not possible to resume the query, and
the whole operation must be restarted from the beginning.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session used to create the partitions.
Read only snapshot transactions are supported, read/write and single use
transactions are not.
sql
string
Required. The query request to generate partitions for. The request will fail if
the query is not root partitionable. The query plan of a root
partitionable query has a single distributed union operator. A distributed
union operator conceptually divides one or more tables into multiple
splits, remotely evaluates a subquery independently on each split, and
then unions all results.
This must not contain DML commands, such as INSERT, UPDATE, or
DELETE. Use ExecuteStreamingSql with a
PartitionedDml transaction for large, partition-friendly DML operations.
Parameter names and values that bind to placeholders in the SQL string.
A parameter placeholder consists of the @ character followed by the
parameter name (for example, @firstName). Parameter names can contain
letters, numbers, and underscores.
Parameters can appear anywhere that a literal value is expected. The same
parameter name can be used more than once, for example:
"WHERE id > @msg_id AND id < @msg_id + 100"
It is an error to execute a SQL statement with unbound parameters.
paramTypes
Array.<number>
It is not always possible for Cloud Spanner to infer the right SQL type
from a JSON value. For example, values of type BYTES and values
of type STRING both appear in params as JSON strings.
In these cases, param_types can be used to specify the exact
SQL type for some or all of the SQL query parameters. See the
definition of Type for more information
about SQL types.
The promise which resolves to an array.
The first element of the array is an object representing PartitionResponse.
Please see the
documentation
for more details and examples.
Creates a set of partition tokens that can be used to execute a read
operation in parallel. Each of the returned partition tokens can be used
by StreamingRead to specify a subset of the read
result to read. The same session and read-only transaction must be used by
the PartitionReadRequest used to create the partition tokens and the
ReadRequests that use the partition tokens. There are no ordering
guarantees on rows returned among the returned partition tokens, or even
within each individual StreamingRead call issued with a partition_token.
Partition tokens become invalid when the session used to create them
is deleted, is idle for too long, begins a new transaction, or becomes too
old. When any of these happen, it is not possible to resume the read, and
the whole operation must be restarted from the beginning.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session used to create the partitions.
Read only snapshot transactions are supported, read/write and single use
transactions are not.
table
string
Required. The name of the table in the database to be read.
index
string
If non-empty, the name of an index on table. This index is
used instead of the table primary key when interpreting key_set
and sorting result rows. See key_set for further information.
columns
Array.<string>
The columns of table to be returned for each row matching
this request.
Required. key_set identifies the rows to be yielded. key_set names the
primary keys of the rows in table to be yielded, unless index
is present. If index is present, then key_set instead names
index keys in index.
It is not an error for the key_set to name rows that do not
exist in the database. Read yields nothing for nonexistent rows.
The promise which resolves to an array.
The first element of the array is an object representing PartitionResponse.
Please see the
documentation
for more details and examples.
Reads rows from the database using key lookups and scans, as a
simple key/value style alternative to
ExecuteSql. This method cannot be used to
return a result set larger than 10 MiB; if the read matches more
data than that, the read fails with a FAILED_PRECONDITION
error.
Reads inside read-write transactions might return ABORTED. If
this occurs, the application should restart the transaction from
the beginning. See Transaction for more details.
Larger result sets can be yielded in streaming fashion by calling
StreamingRead instead.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the read should be performed.
The transaction to use. If none is provided, the default is a
temporary read-only transaction with strong concurrency.
table
string
Required. The name of the table in the database to be read.
index
string
If non-empty, the name of an index on table. This index is
used instead of the table primary key when interpreting key_set
and sorting result rows. See key_set for further information.
columns
Array.<string>
Required. The columns of table to be returned for each row matching
this request.
Required. key_set identifies the rows to be yielded. key_set names the
primary keys of the rows in table to be yielded, unless index
is present. If index is present, then key_set instead names
index keys in index.
If the partition_token field is empty, rows are yielded
in table primary key order (if index is empty) or index key order
(if index is non-empty). If the partition_token field is not
empty, rows will be yielded in an unspecified order.
It is not an error for the key_set to name rows that do not
exist in the database. Read yields nothing for nonexistent rows.
limit
number
If greater than zero, only the first limit rows are yielded. If limit
is zero, the default is no limit. A limit cannot be specified if
partition_token is set.
resumeToken
Buffer
If this request is resuming a previously interrupted read,
resume_token should be copied from the last
PartialResultSet yielded before the interruption. Doing this
enables the new read to resume where the last read left off. The
rest of the request parameters must exactly match the request
that yielded this token.
partitionToken
Buffer
If present, results will be restricted to the specified partition
previously created using PartitionRead(). There must be an exact
match for the values of fields common to this message and the
PartitionReadRequest message used to create this partition_token.
The promise which resolves to an array.
The first element of the array is an object representing ResultSet.
Please see the
documentation
for more details and examples.
Example
const [response] = await client.read(request);
rollback(request, optionsopt) → {Promise}
Rolls back a transaction, releasing any locks it holds. It is a good
idea to call this for any transaction that includes one or more
Read or ExecuteSql requests and
ultimately decides not to commit.
Rollback returns OK if it successfully aborts the transaction, the
transaction was already aborted, or the transaction is not
found. Rollback never returns ABORTED.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the transaction to roll back is running.
The promise which resolves to an array.
The first element of the array is an object representing Empty.
Please see the
documentation
for more details and examples.
Return a fully-qualified session resource name string.
Parameters:
Name
Type
Description
project
string
instance
string
database
string
session
string
Returns:
Type
Description
string
Resource name string.
streamingRead(request, optionsopt) → {Stream}
Like Read, except returns the result set as a
stream. Unlike Read, there is no limit on the
size of the returned result set. However, no individual row in
the result set can exceed 100 MiB, and no column value can exceed
10 MiB.
Parameters:
Name
Type
Attributes
Description
request
Object
The request object that will be sent.
Properties
Name
Type
Description
session
string
Required. The session in which the read should be performed.
The transaction to use. If none is provided, the default is a
temporary read-only transaction with strong concurrency.
table
string
Required. The name of the table in the database to be read.
index
string
If non-empty, the name of an index on table. This index is
used instead of the table primary key when interpreting key_set
and sorting result rows. See key_set for further information.
columns
Array.<string>
Required. The columns of table to be returned for each row matching
this request.
Required. key_set identifies the rows to be yielded. key_set names the
primary keys of the rows in table to be yielded, unless index
is present. If index is present, then key_set instead names
index keys in index.
If the partition_token field is empty, rows are yielded
in table primary key order (if index is empty) or index key order
(if index is non-empty). If the partition_token field is not
empty, rows will be yielded in an unspecified order.
It is not an error for the key_set to name rows that do not
exist in the database. Read yields nothing for nonexistent rows.
limit
number
If greater than zero, only the first limit rows are yielded. If limit
is zero, the default is no limit. A limit cannot be specified if
partition_token is set.
resumeToken
Buffer
If this request is resuming a previously interrupted read,
resume_token should be copied from the last
PartialResultSet yielded before the interruption. Doing this
enables the new read to resume where the last read left off. The
rest of the request parameters must exactly match the request
that yielded this token.
partitionToken
Buffer
If present, results will be restricted to the specified partition
previously created using PartitionRead(). There must be an exact
match for the values of fields common to this message and the
PartitionReadRequest message used to create this partition_token.