Type

Type indicates the type of a Cloud Spanner value, as might be stored in a table cell or returned from an SQL query.

JSON representation
{"code":enum (TypeCode),"arrayElementType":{object (Type)},"structType":{object (StructType)},"typeAnnotation":enum (TypeAnnotationCode),"protoTypeFqn":string}
Fields
code

enum (TypeCode)

Required. TheTypeCode for this type.

arrayElementType

object (Type)

Ifcode ==ARRAY, thenarrayElementType is the type of the array elements.

structType

object (StructType)

Ifcode ==STRUCT, thenstructType provides type information for the struct's fields.

typeAnnotation

enum (TypeAnnotationCode)

TheTypeAnnotationCode that disambiguates SQL type that Spanner will use to represent values of this type during query processing. This is necessary for some type codes because a singleTypeCode can be mapped to different SQL types depending on the SQL dialect.typeAnnotation typically is not needed to process the content of a value (it doesn't affect serialization) and clients can ignore it on the read path.

protoTypeFqn

string

Ifcode ==PROTO orcode ==ENUM, thenprotoTypeFqn is the fully qualified name of the proto type representing the proto/enum definition.

TypeCode

TypeCode is used as part ofType to indicate the type of a Cloud Spanner value.

Each legal value of a type can be encoded to or decoded from a JSON value, using the encodings described below. All Cloud Spanner values can benull, regardless of type;nulls are always encoded as a JSONnull.

Enums
TYPE_CODE_UNSPECIFIEDNot specified.
BOOLEncoded as JSONtrue orfalse.
INT64Encoded asstring, in decimal format.
FLOAT64Encoded asnumber, or the strings"NaN","Infinity", or"-Infinity".
FLOAT32Encoded asnumber, or the strings"NaN","Infinity", or"-Infinity".
TIMESTAMP

Encoded asstring in RFC 3339 timestamp format. The time zone must be present, and must be"Z".

If the schema has the column optionallow_commit_timestamp=true, the placeholder string"spanner.commit_timestamp()" can be used to instruct the system to insert the commit timestamp associated with the transaction commit.

DATEEncoded asstring in RFC 3339 date format.
STRINGEncoded asstring.
BYTESEncoded as a base64-encodedstring, as described in RFC 4648, section 4.
ARRAYEncoded aslist, where the list elements are represented according toarrayElementType.
STRUCTEncoded aslist, where list elementi is represented according tostructType.fields[i].
NUMERIC

Encoded asstring, in decimal format or scientific notation format. Decimal format:[+-]Digits[.[Digits]] or[+-][Digits].Digits

Scientific notation:[+-]Digits[.[Digits]][ExponentIndicator[+-]Digits] or[+-][Digits].Digits[ExponentIndicator[+-]Digits] (ExponentIndicator is"e" or"E")

JSON

Encoded as a JSON-formattedstring as described in RFC 7159. The following rules are applied when parsing JSON input:

  • Whitespace characters are not preserved.
  • If a JSON object has duplicate keys, only the first key is preserved.
  • Members of a JSON object are not guaranteed to have their order preserved.
  • JSON array elements will have their order preserved.
PROTOEncoded as a base64-encodedstring, as described in RFC 4648, section 4.
ENUMEncoded asstring, in decimal format.

TypeAnnotationCode

TypeAnnotationCode is used as a part ofType to disambiguate SQL types that should be used for a given Cloud Spanner value. Disambiguation is needed because the same Cloud Spanner type can be mapped to different SQL types depending on SQL dialect. TypeAnnotationCode doesn't affect the way value is serialized.

Enums
TYPE_ANNOTATION_CODE_UNSPECIFIEDNot specified.
PG_NUMERICPostgreSQL compatible NUMERIC type. This annotation needs to be applied toType instances havingNUMERIC type code to specify that values of this type should be treated as PostgreSQL NUMERIC values. Currently this annotation is always needed forNUMERIC when a client interacts with PostgreSQL-enabled Spanner databases.
PG_JSONBPostgreSQL compatible JSONB type. This annotation needs to be applied toType instances havingJSON type code to specify that values of this type should be treated as PostgreSQL JSONB values. Currently this annotation is always needed forJSON when a client interacts with PostgreSQL-enabled Spanner databases.
PG_OIDPostgreSQL compatible OID type. This annotation can be used by a client interacting with PostgreSQL-enabled Spanner database to specify that a value should be treated using the semantics of the OID type.

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-05-30 UTC.