Class PartialResultSet (2.1.0)

PartialResultSet(mapping=None, *, ignore_unknown_fields=False, **kwargs)

Partial results from a streaming read or SQL query. Streaming reads and SQL queries better tolerate large result sets, large rows, and large values, but are a little trickier to consume.

Attributes

NameDescription
metadata `.result_set.ResultSetMetadata`
Metadata about the result set, such as row type information. Only present in the first response.
values Sequence[`.struct.Value`]
A streamed result set consists of a stream of values, which might be split into many ``PartialResultSet`` messages to accommodate large rows and/or large values. Every N complete values defines a row, where N is equal to the number of entries in `metadata.row_type.fields][google.spanner.v1.StructType.fields]`. Most values are encoded based on type as described `here][google.spanner.v1.TypeCode]`. It is possible that the last value in values is "chunked", meaning that the rest of the value is sent in subsequent ``PartialResultSet``\ (s). This is denoted by the `chunked_value][google.spanner.v1.PartialResultSet.chunked_value]` field. Two or more chunked values can be merged to form a complete value as follows: - ``bool/number/null``: cannot be chunked - ``string``: concatenate the strings - ``list``: concatenate the lists. If the last element in a list is a ``string``, ``list``, or ``object``, merge it with the first element in the next list by applying these rules recursively. - ``object``: concatenate the (field name, field value) pairs. If a field name is duplicated, then apply these rules recursively to merge the field values. Some examples of merging: :: # Strings are concatenated. "foo", "bar" => "foobar" # Lists of non-strings are concatenated. [2, 3], [4] => [2, 3, 4] # Lists are concatenated, but the last and first elements are merged # because they are strings. ["a", "b"], ["c", "d"] => ["a", "bc", "d"] # Lists are concatenated, but the last and first elements are merged # because they are lists. Recursively, the last and first elements # of the inner lists are merged because they are strings. ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"] # Non-overlapping object fields are combined. {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"} # Overlapping object fields are merged. {"a": "1"}, {"a": "2"} => {"a": "12"} # Examples of merging objects containing lists of strings. {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]} For a more complete example, suppose a streaming SQL query is yielding a result set whose rows contain a single string field. The following ``PartialResultSet``\ s might be yielded: :: { "metadata": { ... } "values": ["Hello", "W"] "chunked_value": true "resume_token": "Af65..." } { "values": ["orl"] "chunked_value": true "resume_token": "Bqp2..." } { "values": ["d"] "resume_token": "Zx1B..." } This sequence of ``PartialResultSet``\ s encodes two rows, one containing the field value ``"Hello"``, and a second containing the field value ``"World" = "W" + "orl" + "d"``.
chunked_value bool
If true, then the final value in `values][google.spanner.v1.PartialResultSet.values]` is chunked, and must be combined with more values from subsequent ``PartialResultSet``\ s to obtain a complete field value.
resume_token bytes
Streaming calls might be interrupted for a variety of reasons, such as TCP connection loss. If this occurs, the stream of results can be resumed by re-sending the original request and including ``resume_token``. Note that executing any other transaction in the same session invalidates the token.
stats `.result_set.ResultSetStats`
Query plan and execution statistics for the statement that produced this streaming result set. These can be requested by setting `ExecuteSqlRequest.query_mode][google.spanner.v1.ExecuteSqlRequest.query_mode]` and are sent only once with the last response in the stream. This field will also be present in the last response for DML statements.

Inheritance

builtins.object > proto.message.Message > PartialResultSet