[
  {
    "id": "spanner-data-api-and-sessions-spannerservice-createsession",
    "name": "SpannerService.CreateSession",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Creates a session, the handle a client uses to run reads, queries and transactions against one database; a session is meant to be reused for many consecutive transactions.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.CreateSession",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-getsession",
    "name": "SpannerService.GetSession",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Returns one session by name, mainly to check whether it is still alive; the call fails with NOT_FOUND if the session no longer exists.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.GetSession",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-listsessions",
    "name": "SpannerService.ListSessions",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Lists the sessions of a database, optionally narrowed by a filter on session labels and returned in pages with a page token.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.ListSessions",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-listsessions-label-filtering",
    "name": "ListSessions label filtering",
    "area": "Data API and sessions",
    "local": "available",
    "other": "unavailable",
    "description": "A case-insensitive filter expression on the session list that matches sessions by label, such as having a given label key or a label value containing a given string.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ListSessionsRequest.FIELDS.string.google.spanner.v1.ListSessionsRequest.filter",
    "notes": "Applies AIP-160 label filters."
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-deletesession",
    "name": "SpannerService.DeleteSession",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Ends a session and releases the server resources it holds, which also cancels any operations still running in that session.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.DeleteSession",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-batchcreatesessions",
    "name": "SpannerService.BatchCreateSessions",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Creates many sessions for one database in a single request, which lets a client fill a session pool or cache up front.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.BatchCreateSessions",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-read",
    "name": "SpannerService.Read",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Reads rows from a table or index using key lookups and key range scans, as a key-value style alternative to SQL, and returns the whole result in one reply.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.Read",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-streamingread",
    "name": "SpannerService.StreamingRead",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Performs the same key-based read as Read but returns the rows as a stream of partial result sets, so large results can be consumed incrementally.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.StreamingRead",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-streaming-read-resume-after-a-row-boundary",
    "name": "Streaming read resume after a row boundary",
    "area": "Data API and sessions",
    "local": "available",
    "other": "unavailable",
    "description": "A resume token sent with the original read request lets a client continue a streamed read from the last token it received after an interruption, instead of starting over.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ReadRequest.FIELDS.bytes.google.spanner.v1.ReadRequest.resume_token",
    "notes": "Same transaction or read timestamp; rejects mismatched tokens."
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-executesql",
    "name": "SpannerService.ExecuteSql",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Runs one SQL statement, a query or DML, and returns the complete result in a single reply together with result metadata and optional statistics.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.ExecuteSql",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-executestreamingsql",
    "name": "SpannerService.ExecuteStreamingSql",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Runs a SQL statement like ExecuteSql but returns the results as a stream of partial result sets, so large result sets can be read incrementally.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.ExecuteStreamingSql",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-streaming-query-resume-after-a-row-boundary",
    "name": "Streaming query resume after a row boundary",
    "area": "Data API and sessions",
    "local": "available",
    "other": "unavailable",
    "description": "A resume token lets a client re-send the identical streamed query after a dropped connection and pick up after the last token it received instead of from the first row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteSqlRequest.FIELDS.bytes.google.spanner.v1.ExecuteSqlRequest.resume_token",
    "notes": "Request/transaction-bound token; replays and verifies preceding rows."
  },
  {
    "id": "spanner-data-api-and-sessions-streaming-query-chunking-of-oversized-rows",
    "name": "Streaming query chunking of oversized rows",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "A streamed result can split one large value across several partial result sets, flagging the final value of a message as chunked so the client concatenates the pieces.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.PartialResultSet.FIELDS.bool.google.spanner.v1.PartialResultSet.chunked_value",
    "notes": "PartialResultSet chunked_value; local response-size limits apply."
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-partitionread",
    "name": "SpannerService.PartitionRead",
    "area": "Data API and sessions",
    "local": "limited",
    "other": "limited",
    "description": "Splits a read into partition tokens so separate workers can each run StreamingRead on a subset of the rows in parallel, all within one read-only transaction.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.PartitionRead",
    "notes": "Returns local tokens, one empty and one full partition; no real parallel partitioning."
  },
  {
    "id": "spanner-data-api-and-sessions-spannerservice-partitionquery",
    "name": "SpannerService.PartitionQuery",
    "area": "Data API and sessions",
    "local": "limited",
    "other": "limited",
    "description": "Splits a SQL query into partition tokens that separate workers can each run with ExecuteStreamingSql to read a subset of the result in parallel in one read-only transaction.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.PartitionQuery",
    "notes": "Returns local tokens, one empty and one full partition; no real parallel partitioning."
  },
  {
    "id": "spanner-data-api-and-sessions-single-use-transaction-selector",
    "name": "Single-use transaction selector",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "A transaction selector that runs one read or query in a temporary transaction created for that call, the most efficient choice for a single statement.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.TransactionSelector",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-existing-transaction-id-selector",
    "name": "Existing transaction-ID selector",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "A transaction selector that runs a read or query inside a transaction that was already started, identified by the transaction ID returned when it began.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.TransactionSelector",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-inline-begin-selector",
    "name": "Inline begin selector",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "A transaction selector that starts a new transaction as part of a read or query request and returns its ID in the result metadata, saving a round trip.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.TransactionSelector",
    "notes": ""
  },
  {
    "id": "spanner-data-api-and-sessions-multiplexed-session-transactions",
    "name": "Multiplexed session transactions",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Runs transactions on a multiplexed session, a long-lived session that serves many concurrent transactions across gRPC channels without a session pool.",
    "docs": "https://docs.cloud.google.com/spanner/docs/sessions",
    "notes": "Sessions remain transient across restart."
  },
  {
    "id": "spanner-data-api-and-sessions-multiplexed-precommit-token-retry-handling",
    "name": "Multiplexed precommit-token retry handling",
    "area": "Data API and sessions",
    "local": "available",
    "other": "available",
    "description": "Read-write transactions on a multiplexed session carry a server-issued precommit token; if the response to the final request holds a new token, the client resends that request with it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/sessions",
    "notes": "Sessions remain transient across restart."
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-listinstanceconfigs",
    "name": "InstanceAdminService.ListInstanceConfigs",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Lists the instance configurations available to a project, both Google-managed and user-managed; a configuration defines where an instance's data is replicated.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigs",
    "notes": "Google's emulator exposes built-in config; LocalCloud also manages custom config metadata."
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-getinstanceconfig",
    "name": "InstanceAdminService.GetInstanceConfig",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Returns one instance configuration, including its replicas, leader options, state and etag.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.GetInstanceConfig",
    "notes": "Google's emulator exposes built-in config; LocalCloud also manages custom config metadata."
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-createinstanceconfig",
    "name": "InstanceAdminService.CreateInstanceConfig",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "Creates a user-managed instance configuration from a Google-managed base configuration, optionally adding replicas, and returns a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.CreateInstanceConfig",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-updateinstanceconfig",
    "name": "InstanceAdminService.UpdateInstanceConfig",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "Updates the display name or labels of a user-managed instance configuration, using an update mask and optionally an etag, as a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstanceConfig",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-deleteinstanceconfig",
    "name": "InstanceAdminService.DeleteInstanceConfig",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "Deletes a user-managed instance configuration that no instance uses, optionally guarded by an etag.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstanceConfig",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-custom-instance-config-metadata",
    "name": "Custom instance-config metadata",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "A user-managed instance configuration builds on a Google-managed base configuration and records the replicas and regions that instances using it are placed in.",
    "docs": "https://docs.cloud.google.com/spanner/docs/instance-configurations",
    "notes": "Replicas and regions are metadata only."
  },
  {
    "id": "spanner-instance-administration-custom-instance-config-etag-guards",
    "name": "Custom instance-config etag guards",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "An etag on an instance configuration provides optimistic concurrency control: when supplied, it must match the current configuration for an update or delete to go ahead.",
    "docs": "https://docs.cloud.google.com/spanner/docs/instance-configurations",
    "notes": "Updates/deletes validate supplied etags."
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-listinstances",
    "name": "InstanceAdminService.ListInstances",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Lists the instances of a project in pages, each with details such as its configuration, compute capacity, state and labels.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.ListInstances",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-listinstances-field-label-filtering",
    "name": "ListInstances field/label filtering",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "A case-insensitive filter expression that matches instances by name, display name or label, for example names containing a string or instances carrying a given label.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.ListInstancesRequest.FIELDS.string.google.spanner.admin.instance.v1.ListInstancesRequest.filter",
    "notes": "Applies AIP-160 name, display_name and label filters."
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-getinstance",
    "name": "InstanceAdminService.GetInstance",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Returns the details of one instance, such as its configuration, compute capacity, state, edition and labels.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.GetInstance",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-createinstance",
    "name": "InstanceAdminService.CreateInstance",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Creates an instance, the allocation of compute and storage resources that hosts databases, and returns a long-running operation that completes when it is ready to serve.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.CreateInstance",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-updateinstance",
    "name": "InstanceAdminService.UpdateInstance",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "Changes an instance, for example its display name, labels or compute capacity, using a field mask, and returns a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstance",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-deleteinstance",
    "name": "InstanceAdminService.DeleteInstance",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Deletes an instance together with all of its databases and stops billing for its resources.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstance",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-listinstancepartitions",
    "name": "InstanceAdminService.ListInstancePartitions",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Lists all the instance partitions of an instance, the extra sets of resources that geo-partitioned data can be placed in.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitions",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-getinstancepartition",
    "name": "InstanceAdminService.GetInstancePartition",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Returns the details of one instance partition, such as its configuration, compute capacity and state.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.GetInstancePartition",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-createinstancepartition",
    "name": "InstanceAdminService.CreateInstancePartition",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Creates an instance partition inside an instance, with its own configuration and compute capacity, and returns a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.CreateInstancePartition",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-updateinstancepartition",
    "name": "InstanceAdminService.UpdateInstancePartition",
    "area": "Instance administration",
    "local": "available",
    "other": "unavailable",
    "description": "Changes an instance partition, for example its display name or compute capacity, using a field mask, and returns a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.UpdateInstancePartition",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-deleteinstancepartition",
    "name": "InstanceAdminService.DeleteInstancePartition",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Deletes an instance partition that is not used by any database or backup and is not the default partition of its instance.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.DeleteInstancePartition",
    "notes": ""
  },
  {
    "id": "spanner-instance-administration-instanceadminservice-listinstancepartitionoperations",
    "name": "InstanceAdminService.ListInstancePartitionOperations",
    "area": "Instance administration",
    "local": "available",
    "other": "available",
    "description": "Lists the long-running operations on instance partitions of an instance, pending and recently finished, starting with the most recently started.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.ListInstancePartitionOperations",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-listdatabases",
    "name": "DatabaseAdminService.ListDatabases",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Lists the databases that exist in an instance, returned in pages with a page token.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.ListDatabases",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-createdatabase",
    "name": "DatabaseAdminService.CreateDatabase",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Creates a database in an instance, optionally with initial DDL statements, and returns a long-running operation that tracks its preparation for serving.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.CreateDatabase",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-getdatabase",
    "name": "DatabaseAdminService.GetDatabase",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Returns the state and configuration of one database, such as its dialect, encryption settings, version retention period and drop protection setting.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.GetDatabase",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-updatedatabase",
    "name": "DatabaseAdminService.UpdateDatabase",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Updates settings of an existing database, such as turning drop protection on or off, using an update mask and returning a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabase",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-enforced-database-drop-protection",
    "name": "Enforced database drop protection",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "no-effect",
    "description": "A database setting that, once enabled, makes deletion of the database fail until the setting is turned off, guarding against accidental deletion by authorized users.",
    "docs": "https://docs.cloud.google.com/spanner/docs/prevent-database-deletion",
    "notes": "Prevents DropDatabase and cascading instance deletion."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-dropdatabase",
    "name": "DatabaseAdminService.DropDatabase",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Deletes a database; completed backups of it are kept until their own expiration times.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.DropDatabase",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-createbackup",
    "name": "DatabaseAdminService.CreateBackup",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Starts creating a backup, a consistent copy of a database at a point in time that is stored separately and can later be restored, as a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-historical-backup-version-time",
    "name": "Historical backup version_time",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "A backup option that picks the past timestamp whose database contents the backup captures, an externally consistent copy at that time rather than at the request time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.Backup.FIELDS.google.protobuf.Timestamp.google.spanner.admin.database.v1.Backup.version_time",
    "notes": "Snapshot captures schema/rows at a retained historical timestamp."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-copybackup",
    "name": "DatabaseAdminService.CopyBackup",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Starts copying an existing backup into a new backup, possibly in another instance, as a long-running operation associated with the destination backup.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.CopyBackup",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-getbackup",
    "name": "DatabaseAdminService.GetBackup",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Returns the metadata of one pending or completed backup, such as its state, size, expiration time and version time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.GetBackup",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-listbackups",
    "name": "DatabaseAdminService.ListBackups",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the pending and completed backups of an instance, newest first, optionally narrowed by a filter expression on fields such as name, state or create time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.ListBackups",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-updatebackup",
    "name": "DatabaseAdminService.UpdateBackup",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Changes settings of a pending or completed backup, such as its expiration time, using an update mask.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-deletebackup",
    "name": "DatabaseAdminService.DeleteBackup",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Permanently deletes a pending or completed backup, after which it can no longer be used to restore a database.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.DeleteBackup",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-restoredatabase",
    "name": "DatabaseAdminService.RestoreDatabase",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Creates a new database from a completed backup as a long-running operation, in the same project and in an instance with the same configuration as the backup's instance.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.RestoreDatabase",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-listbackupoperations",
    "name": "DatabaseAdminService.ListBackupOperations",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the long-running operations on backups in an instance, such as creates and copies, covering pending operations and recently finished ones.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.ListBackupOperations",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-listdatabaseoperations",
    "name": "DatabaseAdminService.ListDatabaseOperations",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the long-running operations on the databases of an instance, such as creation, restore and schema updates, both pending and recently finished.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.ListDatabaseOperations",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-instanceadminservice-listinstanceconfigoperations",
    "name": "InstanceAdminService.ListInstanceConfigOperations",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the long-running operations on user-managed instance configurations in a project, such as creation and update, starting with the most recently started.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.ListInstanceConfigOperations",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-operationsservice-listoperations",
    "name": "OperationsService.ListOperations",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Lists the long-running operations under a resource name that match a request filter, returned in pages, so callers can review pending and finished asynchronous work.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.longrunning#google.longrunning.Operations.ListOperations",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-listoperations-filter-expressions",
    "name": "ListOperations filter expressions",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "no-effect",
    "description": "A filter string on operation lists that narrows results by fields such as name, done state, error and metadata values, with conditions combined using AND, OR and NOT.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#databaseadmin",
    "notes": "AIP-160 filters; pagination tokens are bound to filters."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-createbackupschedule",
    "name": "DatabaseAdminService.CreateBackupSchedule",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Creates a schedule that automatically takes backups of a database on a cron-style timetable, with a retention period and either full or incremental backups.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.CreateBackupSchedule",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-getbackupschedule",
    "name": "DatabaseAdminService.GetBackupSchedule",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Returns one backup schedule by name, including its cron timetable, retention period and backup type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.GetBackupSchedule",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-listbackupschedules",
    "name": "DatabaseAdminService.ListBackupSchedules",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Lists all the backup schedules defined for a database.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.ListBackupSchedules",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-updatebackupschedule",
    "name": "DatabaseAdminService.UpdateBackupSchedule",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Changes selected settings of an existing backup schedule, such as its timetable or retention period, as chosen by an update mask.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackupSchedule",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-deletebackupschedule",
    "name": "DatabaseAdminService.DeleteBackupSchedule",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Deletes a backup schedule so that no further automatic backups are created from it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.DeleteBackupSchedule",
    "notes": "Local backup metadata or snapshots; snapshot/restore needs --data_dir; No CMEK; snapshots are full copies."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-scheduled-full-snapshot-execution",
    "name": "Scheduled full snapshot execution",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "A backup schedule of the full type creates a complete backup of the database each time its cron timetable fires and keeps each one for the schedule's retention period.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1",
    "notes": "Supported UTC cron schedules; persistent worker cursor."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-incremental-backup-chain-metadata",
    "name": "Incremental backup chain metadata",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Backups made by an incremental schedule belong to a chain with a shared chain ID, and each backup records the oldest version time of data the backup system keeps for it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1",
    "notes": "Maintains chain fields."
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-updatedatabaseddl",
    "name": "DatabaseAdminService.UpdateDatabaseDdl",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Applies schema changes, such as creating, altering and dropping tables, columns and indexes, from a list of DDL statements and returns a long-running operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-databaseadminservice-getdatabaseddl",
    "name": "DatabaseAdminService.GetDatabaseDdl",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Returns the current schema of a database as a list of formatted DDL statements; schema updates that are still pending are not included.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.GetDatabaseDdl",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-operationsservice-getoperation",
    "name": "OperationsService.GetOperation",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "available",
    "description": "Returns the latest state of a long-running operation by name, which clients poll to learn whether it is done and to read its result or error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.longrunning#google.longrunning.Operations.GetOperation",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-operationsservice-deleteoperation",
    "name": "OperationsService.DeleteOperation",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Tells the service that the client no longer needs a long-running operation's result and deletes its record, without cancelling the underlying work.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.longrunning#google.longrunning.Operations.DeleteOperation",
    "notes": ""
  },
  {
    "id": "spanner-database-administration-operations-and-backups-operationsservice-waitoperation",
    "name": "OperationsService.WaitOperation",
    "area": "Database administration, operations, and backups",
    "local": "available",
    "other": "unavailable",
    "description": "Waits until a long-running operation is done or a timeout passes, then returns its latest state; it may return early, so callers should check the done flag.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.longrunning#google.longrunning.Operations.WaitOperation",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-create-table",
    "name": "CREATE TABLE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Defines a new table with its columns, data types, constraints and primary key, and optionally interleaves it in a parent table.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create_table",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-create-table-if-not-exists",
    "name": "CREATE TABLE IF NOT EXISTS",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Creates a table only when no table of that name exists; if one does, the statement does nothing and raises no error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create_table",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-composite-primary-keys",
    "name": "Composite primary keys",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "A table's primary key can span several columns in a defined order; together they uniquely identify each row and determine the order in which rows are stored.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-not-null-columns",
    "name": "NOT NULL columns",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "A column annotation that makes the column required, so every row written must have a non-NULL value for it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-hidden-columns",
    "name": "Hidden columns",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "A column marked HIDDEN is left out of SELECT * results but can still be selected by name; it mainly keeps TOKENLIST columns out of full-row queries.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-tables-without-an-explicit-primary-key",
    "name": "Tables without an explicit primary key",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "A table created with no primary key columns, which can hold only a single row; this form exists only in GoogleSQL-dialect databases.",
    "docs": "https://docs.cloud.google.com/spanner/docs/schema-and-data-model",
    "notes": "Hidden system-assigned _rowid."
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-add-column",
    "name": "ALTER TABLE ADD COLUMN",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Adds a new column to an existing table, optionally with a default or stored generated value that is backfilled into the existing rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-drop-column",
    "name": "ALTER TABLE DROP COLUMN",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Removes a column, along with its data, from an existing table as a schema change.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-alter-column",
    "name": "ALTER TABLE ALTER COLUMN",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Changes an existing column, for example its data type, NOT NULL setting, default value, generated expression or column options.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-add-constraint",
    "name": "ALTER TABLE ADD CONSTRAINT",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Adds a foreign key or CHECK constraint to an existing table, validating the data already in the table before the constraint takes effect.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-drop-constraint",
    "name": "ALTER TABLE DROP CONSTRAINT",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Removes a named constraint, such as a foreign key or CHECK constraint, from a table together with any index that backs it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-rename-to",
    "name": "ALTER TABLE RENAME TO",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Renames an existing table, optionally adding a synonym so applications can keep using the old name while they move to the new one.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-rename-table",
    "name": "RENAME TABLE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "A GoogleSQL statement that renames one or several tables in a single operation, applying all the renames atomically.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter_table",
    "notes": "Validated schema changes; multi-table RENAME TABLE is GoogleSQL-only."
  },
  {
    "id": "spanner-schema-and-ddl-drop-table",
    "name": "DROP TABLE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Permanently removes a table and its data, along with its foreign keys; the table cannot be recovered afterwards.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#drop_table",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-drop-table-if-exists",
    "name": "DROP TABLE IF EXISTS",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Drops a table only if it exists; naming a table that does not exist has no effect and raises no error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#drop_table",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-create-view",
    "name": "CREATE VIEW",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Defines a named view stored in the schema as a SQL query whose results can be selected like a table, with a SQL SECURITY INVOKER or DEFINER setting.",
    "docs": "https://docs.cloud.google.com/spanner/docs/views",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-create-or-replace-view",
    "name": "CREATE OR REPLACE VIEW",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Creates a view or, when one of that name already exists, replaces its definition; it is also how a view's security type is changed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/views",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-drop-view",
    "name": "DROP VIEW",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Removes a view from the schema without touching the tables that its query reads from.",
    "docs": "https://docs.cloud.google.com/spanner/docs/views",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-sql-security-invoker-view-evaluation",
    "name": "SQL SECURITY INVOKER view evaluation",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "A view declared SQL SECURITY INVOKER runs its defining query as the user who queries it, so results reflect what that caller may see in the underlying tables.",
    "docs": "https://docs.cloud.google.com/spanner/docs/views",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-sql-security-invoker-privilege-checks",
    "name": "SQL SECURITY INVOKER privilege checks",
    "area": "Schema and DDL",
    "local": "available",
    "other": "no-effect",
    "description": "Under fine-grained access control, querying an INVOKER view needs SELECT on the view and on every table, column or view that it references.",
    "docs": "https://docs.cloud.google.com/spanner/docs/views",
    "notes": "Checks underlying object privileges for role-restricted sessions, including PLAN."
  },
  {
    "id": "spanner-schema-and-ddl-sql-security-definer-privilege-checks",
    "name": "SQL SECURITY DEFINER privilege checks",
    "area": "Schema and DDL",
    "local": "available",
    "other": "no-effect",
    "description": "Under fine-grained access control, querying a DEFINER view needs only SELECT on the view itself, so a role can read a chosen subset of data without access to the underlying objects.",
    "docs": "https://docs.cloud.google.com/spanner/docs/views",
    "notes": "Requires SELECT on the view instead of underlying objects."
  },
  {
    "id": "spanner-schema-and-ddl-create-schema",
    "name": "CREATE SCHEMA",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Creates a named schema, a namespace that groups tables, indexes, views and sequences, whose objects are then referred to by schema-qualified names.",
    "docs": "https://docs.cloud.google.com/spanner/docs/named-schemas",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-drop-schema",
    "name": "DROP SCHEMA",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Removes a named schema, the namespace that groups tables, views and other objects under qualified names.",
    "docs": "https://docs.cloud.google.com/spanner/docs/named-schemas",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-objects-in-named-schemas",
    "name": "Objects in named schemas",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Tables, indexes, views and sequences can be created inside a named schema and are then referred to by their schema-qualified names.",
    "docs": "https://docs.cloud.google.com/spanner/docs/named-schemas",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-create-sequence",
    "name": "CREATE SEQUENCE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Creates a sequence object that generates unique integers from an internal counter that is bit-reversed to spread inserts across the key space; usable as a column default.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create-sequence",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-alter-sequence",
    "name": "ALTER SEQUENCE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Changes a sequence's options, such as its skipped value range or its counter, without affecting values the sequence has already generated.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter-sequence",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-drop-sequence",
    "name": "DROP SEQUENCE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Removes a sequence object from the database schema so that it no longer generates values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#drop-sequence",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-get-next-sequence-value",
    "name": "GET_NEXT_SEQUENCE_VALUE()",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Takes a sequence and returns its next INT64 value; it can be used in a read-write transaction or as the default expression of a column.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/sequence_functions",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-get-internal-sequence-state",
    "name": "GET_INTERNAL_SEQUENCE_STATE()",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Returns a sequence's current internal counter before bit reversal as an INT64, useful for export and migration, or NULL if no value was ever generated.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/sequence_functions",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-sequence-counters-across-restart",
    "name": "Sequence counters across restart",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "A sequence's internal counter is stored durably, so after a restart the sequence carries on from where it left off and does not hand out earlier values again.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/sequence_functions",
    "notes": "Requires --data_dir; can skip up to 1,000 reserved values."
  },
  {
    "id": "spanner-schema-and-ddl-sequence-counters-after-backup-restore",
    "name": "Sequence counters after backup restore",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "A backup captures a database's sequences together with its tables, so a database restored from it has those sequences available to generate values again.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/sequence_functions",
    "notes": "Restores the saved sequence allocation state."
  },
  {
    "id": "spanner-schema-and-ddl-create-function",
    "name": "CREATE FUNCTION",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Defines a user-defined function in the schema, with typed parameters and a return type, that queries can then call by name.",
    "docs": "https://docs.cloud.google.com/spanner/docs/install-mysql-functions#install_the_mysql_user-defined_functions",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-create-or-replace-function",
    "name": "CREATE OR REPLACE FUNCTION",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Defines a user-defined function, replacing the definition of any existing function of the same name; this is how function libraries are installed or updated.",
    "docs": "https://docs.cloud.google.com/spanner/docs/install-mysql-functions#install_the_mysql_user-defined_functions",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-googlesql-create-placement",
    "name": "GoogleSQL CREATE PLACEMENT",
    "area": "Schema and DDL",
    "local": "available",
    "other": "limited",
    "description": "Defines a named placement tied to a user-created instance partition, with an optional default leader region, telling Spanner where rows tagged with it are stored.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-data-placements",
    "notes": "Adds lifecycle/partition-existence validation."
  },
  {
    "id": "spanner-schema-and-ddl-googlesql-alter-placement",
    "name": "GoogleSQL ALTER PLACEMENT",
    "area": "Schema and DDL",
    "local": "available",
    "other": "limited",
    "description": "Changes the options of an existing placement, the named location that maps rows to an instance partition, such as its default leader region.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-data-placements",
    "notes": "Validates placement options and referenced partitions."
  },
  {
    "id": "spanner-schema-and-ddl-googlesql-drop-placement",
    "name": "GoogleSQL DROP PLACEMENT",
    "area": "Schema and DDL",
    "local": "available",
    "other": "limited",
    "description": "Deletes a placement; it fails while rows of any placement table still use it, so those rows must first be moved to another placement or removed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-data-placements",
    "notes": "Adds safe-drop checks."
  },
  {
    "id": "spanner-schema-and-ddl-postgresql-placement-ddl",
    "name": "PostgreSQL placement DDL",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "The PostgreSQL-dialect statements for geo-partitioning: CREATE PLACEMENT with a WITH clause of options, DROP PLACEMENT, and a PLACEMENT KEY column on tables.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-data-placements",
    "notes": "Translated placement lifecycle and placement-key DDL."
  },
  {
    "id": "spanner-schema-and-ddl-placement-key-mutation-validation",
    "name": "Placement-key mutation validation",
    "area": "Schema and DDL",
    "local": "available",
    "other": "limited",
    "description": "Every row written to a placement table must carry a placement key value naming an existing placement or the value default, which decides the instance partition that stores the row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-data-placements",
    "notes": "Checks placement keys; all rows remain local."
  },
  {
    "id": "spanner-schema-and-ddl-placement-preview-dml-restrictions",
    "name": "Placement preview DML restrictions",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "While geo-partitioning is in preview, DML on placement tables is restricted; for example, an INSERT or DELETE must be the only statement in its transaction.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-data-placements",
    "notes": "Optional --enforce_placement_dml_restrictions."
  },
  {
    "id": "spanner-schema-and-ddl-information-schema-placements",
    "name": "INFORMATION_SCHEMA.PLACEMENTS",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "A GoogleSQL schema view that lists each placement in the database by name, with a flag showing whether it is the default placement.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#placements",
    "notes": "Google's emulator v1.5.59 adds this too."
  },
  {
    "id": "spanner-schema-and-ddl-information-schema-placement-options",
    "name": "INFORMATION_SCHEMA.PLACEMENT_OPTIONS",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "A GoogleSQL schema view that lists the options set on each placement, such as instance_partition and default_leader, with each option's name, type and value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#placement-options",
    "notes": "Google's emulator v1.5.59 adds this too."
  },
  {
    "id": "spanner-schema-and-ddl-interleave-in-parent",
    "name": "INTERLEAVE IN PARENT",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Declares a child table physically stored with its parent table's rows; the child's key must start with the parent's key and a parent row must exist, with ON DELETE CASCADE or NO ACTION.",
    "docs": "https://docs.cloud.google.com/spanner/docs/schema-and-data-model",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-interleave-in",
    "name": "INTERLEAVE IN",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Co-locates a child table's rows with a parent table's rows like INTERLEAVE IN PARENT, but does not require that a parent row exist for each child row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/schema-and-data-model",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-set-on-delete",
    "name": "ALTER TABLE SET ON DELETE",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Switches the delete behavior of an interleaved child table between CASCADE, which deletes child rows with their parent, and NO ACTION, which blocks deleting a parent that still has children.",
    "docs": "https://docs.cloud.google.com/spanner/docs/schema-and-data-model",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-alter-table-set-interleave-in",
    "name": "ALTER TABLE SET INTERLEAVE IN",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Changes an interleaved child table from INTERLEAVE IN PARENT to INTERLEAVE IN, keeping the co-location but dropping the requirement that each child row has a parent row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/schema-and-data-model",
    "notes": ""
  },
  {
    "id": "spanner-schema-and-ddl-googlesql-row-deletion-policy-ddl",
    "name": "GoogleSQL ROW DELETION POLICY DDL",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Table clause ROW DELETION POLICY (OLDER_THAN(timestamp_column, INTERVAL n DAY)) that marks rows for automatic deletion once a timestamp column is older than the given number of days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/ttl",
    "notes": "Validates and stores policy."
  },
  {
    "id": "spanner-schema-and-ddl-postgresql-ttl-interval-ddl",
    "name": "PostgreSQL TTL INTERVAL DDL",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "PostgreSQL-dialect clause TTL INTERVAL 'n days' ON a TIMESTAMPTZ column, added in CREATE TABLE or ALTER TABLE, that deletes rows once the column is older than a whole number of days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/ttl",
    "notes": "Validates and stores policy."
  },
  {
    "id": "spanner-schema-and-ddl-ttl-background-deletion",
    "name": "TTL background deletion",
    "area": "Schema and DDL",
    "local": "available",
    "other": "no-effect",
    "description": "A low-priority background process finds rows past their expiration and deletes them in batches, typically within a few days, without hiding expired rows from queries first.",
    "docs": "https://docs.cloud.google.com/spanner/docs/ttl",
    "notes": "Default sweep interval 60 seconds; may contend with users."
  },
  {
    "id": "spanner-schema-and-ddl-ttl-delete-change-stream-records",
    "name": "TTL delete change-stream records",
    "area": "Schema and DDL",
    "local": "available",
    "other": "unavailable",
    "description": "Change streams record TTL deletions as DELETE data change records whose transaction tag is RowDeletionPolicy and whose is_system_transaction field is true.",
    "docs": "https://docs.cloud.google.com/spanner/docs/ttl",
    "notes": "RowDeletionPolicy tag and system-transaction flag."
  },
  {
    "id": "spanner-schema-and-ddl-exclude-ttl-deletes-stream-option-effect",
    "name": "exclude_ttl_deletes stream option effect",
    "area": "Schema and DDL",
    "local": "available",
    "other": "no-effect",
    "description": "Change stream option that, when set to true, leaves out the records of rows removed by TTL, so only deletes issued by users appear in the stream.",
    "docs": "https://docs.cloud.google.com/spanner/docs/ttl",
    "notes": "Filters sweeper deletes."
  },
  {
    "id": "spanner-schema-and-ddl-version-retention-period-enforcement",
    "name": "version_retention_period enforcement",
    "area": "Schema and DDL",
    "local": "available",
    "other": "limited",
    "description": "Database option that sets how long Spanner keeps old versions of data and schema, which bounds how far back stale reads and point-in-time recovery can go.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter-database",
    "notes": "Enforced in historical reads, pruning and backup timestamps."
  },
  {
    "id": "spanner-schema-and-ddl-default-time-zone-query-effect",
    "name": "default_time_zone query effect",
    "area": "Schema and DDL",
    "local": "available",
    "other": "no-effect",
    "description": "Database option that sets the IANA time zone Spanner uses for timestamp-to-date and civil time conversions when a query names no time zone.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter-database",
    "notes": "Applies to query/default/check/view evaluation."
  },
  {
    "id": "spanner-schema-and-ddl-default-sequence-kind-option",
    "name": "default_sequence_kind option",
    "area": "Schema and DDL",
    "local": "available",
    "other": "available",
    "description": "Database option whose only valid value is bit_reversed_positive; sequences and identity columns that name no kind use it, producing positive INT64 values that are not sequential.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#alter-database",
    "notes": "Validated default sequence kind."
  },
  {
    "id": "spanner-types-and-values-bool-type",
    "name": "BOOL type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "The Boolean type, holding TRUE or FALSE, or NULL when there is no value; used for logical conditions and flag columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#boolean_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-int64-type",
    "name": "INT64 type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "The 64-bit signed integer type, ranging from -9223372036854775808 to 9223372036854775807, and the integer type of GoogleSQL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#integer_types",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-float32-type",
    "name": "FLOAT32 type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A single-precision approximate floating-point number type that follows IEEE-754 behaviour, including NaN and positive and negative infinity.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#float_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-float64-type",
    "name": "FLOAT64 type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A double-precision approximate floating-point number type that follows IEEE-754 behaviour, including NaN and positive and negative infinity.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#double_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-numeric-type",
    "name": "GoogleSQL NUMERIC type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "An exact decimal type with 38 digits of precision and 9 digits after the decimal point, suited to financial calculations.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#numeric_type",
    "notes": "PostgreSQL NUMERIC cannot be a key column; persistence is tracked separately."
  },
  {
    "id": "spanner-types-and-values-postgresql-numeric-type",
    "name": "PostgreSQL NUMERIC type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A high-precision exact decimal type, also spelled decimal, that follows PostgreSQL semantics, such as NaN values being equal to each other and greater than every other value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-types",
    "notes": "PostgreSQL NUMERIC cannot be a key column; persistence is tracked separately."
  },
  {
    "id": "spanner-types-and-values-googlesql-json-type",
    "name": "GoogleSQL JSON type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A type for JSON documents stored in canonical form: whitespace is dropped, object members are ordered by key and array order is kept; values can be compared, grouped and sorted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#json_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-json-null-distinct-from-sql-null",
    "name": "JSON null distinct from SQL NULL",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A JSON null is an actual JSON value inside a document, while SQL NULL means no value at all; BOOL of a JSON null raises an error, but SQL NULL input gives SQL NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-bool",
    "name": "GoogleSQL BOOL()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON boolean value to a SQL BOOL, and raises an error if the JSON value is not a boolean, including JSON null.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#bool_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-bool-array",
    "name": "GoogleSQL BOOL_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON array of booleans to an ARRAY of BOOL values, and raises an error if the input is not an array or any element is not a boolean.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#bool_array_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-float64",
    "name": "GoogleSQL FLOAT64()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON number to a FLOAT64; the wide_number_mode option chooses whether values that lose precision are rounded (the default) or raise an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#double_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-float64-array",
    "name": "GoogleSQL FLOAT64_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON array of numbers to an ARRAY of FLOAT64 values using the same wide_number_mode option, and raises an error for a non-array input or a non-number element.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#double_array_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-int64",
    "name": "GoogleSQL INT64()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON number with an integer value to an INT64; a value such as 10.0 is accepted, while fractional, out-of-range or non-numeric JSON raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#int64_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-int64-array",
    "name": "GoogleSQL INT64_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON array of integer-valued numbers to an ARRAY of INT64 values, and raises an error if the input is not an array or any element is not an in-range integer.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#int64_array_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-array",
    "name": "GoogleSQL JSON_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Builds a JSON array from zero or more SQL values, turning SQL NULL into JSON null and returning an empty array when called with no arguments.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_array",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-array-append",
    "name": "GoogleSQL JSON_ARRAY_APPEND()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Appends values to the end of the JSON arrays found at given JSONPaths and returns the updated JSON; SQL arrays are appended element by element unless append_each_element is FALSE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_array_append",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-array-insert",
    "name": "GoogleSQL JSON_ARRAY_INSERT()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Inserts values into JSON arrays at the positions named by JSONPaths, padding with JSON null when the index is past the end, and returns the updated JSON.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_array_insert",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-contains",
    "name": "GoogleSQL JSON_CONTAINS()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE when the first JSON value contains the second, such as an object holding all of another object's key-value pairs or an array holding all of another array's elements.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_contains",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-keys",
    "name": "GoogleSQL JSON_KEYS()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Returns the unique keys of a JSON value as a sorted ARRAY of STRING; optional max_depth and mode arguments control how deep to look and whether keys inside arrays count.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_keys",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-object",
    "name": "GoogleSQL JSON_OBJECT()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Creates a JSON object from key-value pairs, given as alternating key and value arguments or as one array of keys and one array of values; with no arguments it returns an empty object.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_object",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-query",
    "name": "GoogleSQL JSON_QUERY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Extracts the value at a JSONPath from a JSON value or JSON-formatted string and returns it still in JSON form, so objects and arrays are kept; a missing path returns NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_query",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-query-array",
    "name": "GoogleSQL JSON_QUERY_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Extracts the JSON array at a JSONPath and returns its elements as an ARRAY of JSON values or JSON-formatted strings; returns NULL if the path is missing or does not hold an array.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_query_array",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-remove",
    "name": "GoogleSQL JSON_REMOVE()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Removes the values at one or more JSONPaths from a JSON value and returns the updated JSON; paths that do not exist are skipped.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_remove",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-set",
    "name": "GoogleSQL JSON_SET()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Inserts or replaces values at JSONPaths in a JSON value and returns the updated JSON; missing path elements are created unless create_if_missing is FALSE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_set",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-strip-nulls",
    "name": "GoogleSQL JSON_STRIP_NULLS()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Removes JSON null values from objects and, by default, from arrays, with options to keep array nulls or drop emptied containers, and returns the cleaned JSON.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_strip_nulls",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-type-2",
    "name": "GoogleSQL JSON_TYPE()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Returns the type of the outermost value of a JSON input as a STRING, one of object, array, string, number, boolean or null.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-value",
    "name": "GoogleSQL JSON_VALUE()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Extracts a scalar JSON value at a JSONPath and returns it as an unquoted STRING; objects, arrays, JSON null and missing paths return NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_value",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-json-value-array",
    "name": "GoogleSQL JSON_VALUE_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Extracts a JSON array of scalars at a JSONPath and returns it as an ARRAY of unquoted STRING values; returns NULL if the target is not an array of scalars.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#json_value_array",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-lax-bool",
    "name": "GoogleSQL LAX_BOOL()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON boolean, a true or false string, or a number (zero is FALSE, anything else TRUE) to BOOL, returning NULL instead of an error for any other value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#lax_bool",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-lax-float64",
    "name": "GoogleSQL LAX_FLOAT64()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON number, or a JSON string holding a number such as NaN or Inf, to FLOAT64, returning NULL instead of an error when the value cannot be converted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#lax_double",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-lax-int64",
    "name": "GoogleSQL LAX_INT64()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON boolean, number or numeric string to INT64, rounding fractions to the nearest integer and returning NULL instead of an error when conversion is impossible.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#lax_int64",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-lax-string",
    "name": "GoogleSQL LAX_STRING()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON string, number or boolean to a STRING, returning NULL instead of an error for JSON null, objects and arrays.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#lax_string",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-parse-json",
    "name": "GoogleSQL PARSE_JSON()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Parses a JSON-formatted STRING into a JSON value; wide_number_mode decides whether numbers that lose precision raise an error (exact, the default) or are rounded.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#parse_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-string",
    "name": "GoogleSQL STRING()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON string value to a SQL STRING, and raises an error if the JSON value is not a string.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#string_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-string-array",
    "name": "GoogleSQL STRING_ARRAY()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON array of strings to an ARRAY of STRING values, and raises an error if the input is not an array or any element is not a string.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#string_array_for_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-to-json",
    "name": "GoogleSQL TO_JSON()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a SQL value of any type to a JSON value; stringify_wide_numbers decides whether large integer and numeric values are written as JSON strings.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#to_json",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-to-json-string",
    "name": "GoogleSQL TO_JSON_STRING()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON value to a STRING holding its JSON-formatted text, the reverse of parsing a string into JSON.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#to_json_string",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-array-type",
    "name": "ARRAY type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "An ordered list of zero or more elements that share one non-array type; an empty array and a NULL array are different values, and elements may be NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#array_type",
    "notes": "No nested ARRAY columns; supported scalar element types only."
  },
  {
    "id": "spanner-types-and-values-array-parameter-binding",
    "name": "ARRAY parameter binding",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Passing a whole list of values as a single array-typed query parameter, which a statement can read as an array, for example with UNNEST or IN UNNEST.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#array_type",
    "notes": "No nested ARRAY columns; supported scalar element types only."
  },
  {
    "id": "spanner-types-and-values-array-element-validation",
    "name": "ARRAY element validation",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "The rule that every element of an array must have the array's single element type, NULL elements are allowed, and an array cannot directly contain another array.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#array_type",
    "notes": "No nested ARRAY columns; supported scalar element types only."
  },
  {
    "id": "spanner-types-and-values-struct-query-values",
    "name": "STRUCT query values",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "An ordered group of typed fields, each optionally named, created in a query with the STRUCT constructor or tuple syntax and read with dot notation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#struct_type",
    "notes": "GoogleSQL only; STRUCT is not a table-column type."
  },
  {
    "id": "spanner-types-and-values-array-struct-query-values",
    "name": "ARRAY<STRUCT> query values",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "An array whose elements are structs, giving a list of records with named fields; built from an array of STRUCT values or an ARRAY subquery and expanded with UNNEST.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#struct_type",
    "notes": "GoogleSQL only; STRUCT is not a table-column type."
  },
  {
    "id": "spanner-types-and-values-struct-query-parameters",
    "name": "STRUCT query parameters",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A STRUCT, or an array of STRUCT values, passed as a query parameter so a statement can read its fields or compare several columns against it at once.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#struct_type",
    "notes": "GoogleSQL only; STRUCT is not a table-column type."
  },
  {
    "id": "spanner-types-and-values-create-proto-bundle",
    "name": "CREATE PROTO BUNDLE",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "DDL statement that registers a list of Protocol Buffers message and enum types, taken from supplied descriptors, so columns and expressions can use them as PROTO and ENUM types.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types",
    "notes": "Query/in-memory support; persistent non-NULL PROTO/ENUM writes are unavailable."
  },
  {
    "id": "spanner-types-and-values-alter-proto-bundle",
    "name": "ALTER PROTO BUNDLE",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "DDL statement that changes the registered proto bundle by inserting new message or enum types, updating existing ones, or deleting ones that are no longer needed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types",
    "notes": "Query/in-memory support; persistent non-NULL PROTO/ENUM writes are unavailable."
  },
  {
    "id": "spanner-types-and-values-drop-proto-bundle",
    "name": "DROP PROTO BUNDLE",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "DDL statement that deletes the database's proto bundle and with it the registered Protocol Buffers message and enum types.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types",
    "notes": "Query/in-memory support; persistent non-NULL PROTO/ENUM writes are unavailable."
  },
  {
    "id": "spanner-types-and-values-proto-type",
    "name": "PROTO type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A type for values that are Protocol Buffers messages, referred to by fully qualified message name and defined through the database's proto bundle.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#protocol_buffer_type",
    "notes": "Query/in-memory support; persistent non-NULL PROTO/ENUM writes are unavailable."
  },
  {
    "id": "spanner-types-and-values-enum-type",
    "name": "ENUM type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A type for Protocol Buffers enum values, which map case-sensitive string names to integer constants and are referred to by fully qualified enum name from the proto bundle.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#enum_type",
    "notes": "Query/in-memory support; persistent non-NULL PROTO/ENUM writes are unavailable."
  },
  {
    "id": "spanner-types-and-values-interval-query-type",
    "name": "INTERVAL query type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A duration with year, month, day and time-of-day components down to nanoseconds, written as an INTERVAL expression and used in date and timestamp arithmetic.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types",
    "notes": "Queries only; INTERVAL columns are rejected."
  },
  {
    "id": "spanner-types-and-values-string-type",
    "name": "STRING type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Variable-length Unicode character data stored as UTF-8; functions such as LENGTH and SUBSTR count characters rather than bytes.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#string_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-bytes-type",
    "name": "BYTES type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Variable-length binary data that is a separate type from STRING; converting between the two needs an explicit cast, which applies UTF-8 encoding or decoding.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#bytes_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-date-type",
    "name": "DATE type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "A calendar date without time of day or time zone, from 0001-01-01 to 9999-12-31, written in the canonical YYYY-MM-DD form.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#date_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-timestamp-type",
    "name": "TIMESTAMP type",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "An absolute point in time with nanosecond precision, from 0001-01-01 to 9999-12-31 UTC; no time zone is stored with the value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#timestamp_type",
    "notes": ""
  },
  {
    "id": "spanner-types-and-values-googlesql-uuid-type",
    "name": "GoogleSQL UUID type",
    "area": "Types and values",
    "local": "available",
    "other": "limited",
    "description": "The GoogleSQL UUID type, a 128-bit universally unique identifier written as lowercase hexadecimal groups of 8-4-4-4-12 digits that can be cast to and from STRING and BYTES.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#uuid_type",
    "notes": "Native typed keys, values, casts and public-API results."
  },
  {
    "id": "spanner-types-and-values-postgresql-uuid-type",
    "name": "PostgreSQL UUID type",
    "area": "Types and values",
    "local": "available",
    "other": "limited",
    "description": "The PostgreSQL-dialect uuid type for 128-bit universally unique identifiers, usable in primary keys, indexes and column defaults such as gen_random_uuid().",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-types",
    "notes": "Native typed keys, values, defaults and public-API results."
  },
  {
    "id": "spanner-types-and-values-postgresql-gen-random-uuid",
    "name": "PostgreSQL gen_random_uuid()",
    "area": "Types and values",
    "local": "available",
    "other": "limited",
    "description": "PostgreSQL-dialect function that returns a randomly generated UUID as a uuid value, commonly used as a column DEFAULT to give each new row a unique key.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#utility",
    "notes": "Returns UUID; DEFAULT and RETURNING cases exist."
  },
  {
    "id": "spanner-types-and-values-uuid-rows-across-restart",
    "name": "UUID rows across restart",
    "area": "Types and values",
    "local": "available",
    "other": "unavailable",
    "description": "UUID values written to table columns are stored durably with their rows, and later reads return the same identifiers exactly as they were written.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-types#uuid_type",
    "notes": "Requires --data_dir."
  },
  {
    "id": "spanner-types-and-values-googlesql-new-uuid",
    "name": "GoogleSQL NEW_UUID()",
    "area": "Types and values",
    "local": "available",
    "other": "available",
    "description": "Returns a new random UUID as a value of the UUID type, with 122 random bits laid out as 8-4-4-4-12 hexadecimal digits following RFC 4122 section 4.4.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/utility-functions#new_uuid",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-select-filtering",
    "name": "SELECT filtering",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Narrows the rows a query returns with a WHERE condition, so only rows for which the boolean expression evaluates to TRUE appear in the result.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-order-by",
    "name": "ORDER BY",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Sorts the result rows by one or more expressions, ascending by default or descending with DESC; without it the order of returned rows is undefined.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-limit-clause",
    "name": "LIMIT clause",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Caps the number of rows a query returns at a non-negative integer count; LIMIT 0 returns no rows, and with a set operation the cap applies after the operation.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-offset-clause",
    "name": "OFFSET clause",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Skips a given number of rows before LIMIT starts returning rows, so paging needs an ORDER BY to give a repeatable result.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-union-all",
    "name": "UNION ALL",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Set operator that concatenates the rows of two queries and keeps duplicates, so a row found m times in one input and n times in the other appears m plus n times.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-union-distinct",
    "name": "UNION DISTINCT",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Set operator that combines the rows of two queries and removes duplicates, so each distinct row appears exactly once in the result.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-intersect",
    "name": "INTERSECT",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Set operator that returns only rows produced by both queries; DISTINCT returns each such row once, while ALL keeps the smaller of the two duplicate counts.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-except",
    "name": "EXCEPT",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Set operator that returns the rows of the first query that do not appear in the second; DISTINCT returns each row once, while ALL subtracts the duplicate counts.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-select-except",
    "name": "SELECT * EXCEPT",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Selects every column of a table or expression except the columns named in the EXCEPT list, and is distinct from the EXCEPT set operator.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-unnest-with-offset",
    "name": "UNNEST WITH OFFSET",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Expands an array into one row per element and adds a column with each element's zero-based position in the array, named offset unless given an alias.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-abs",
    "name": "GoogleSQL ABS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the absolute value of a number with the same type as the input; raises an error for the most negative INT64, which has no positive counterpart.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#abs",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-acos",
    "name": "GoogleSQL ACOS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse cosine of a value in radians, between 0 and pi; raises an error if the input is outside the range from -1 to 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#acos",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-acosh",
    "name": "GoogleSQL ACOSH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse hyperbolic cosine of a value; raises an error if the input is less than 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#acosh",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-concat",
    "name": "GoogleSQL ARRAY_CONCAT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Joins one or more arrays of the same element type into a single array in argument order; returns NULL if any input array is NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_concat",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-filter",
    "name": "GoogleSQL ARRAY_FILTER()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns an array holding only the elements for which a lambda condition is TRUE, in original order; the lambda may also receive the zero-based index, and FALSE or NULL drops the element.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_filter",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-first",
    "name": "GoogleSQL ARRAY_FIRST()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the first element of an array, and raises an error if the array is empty.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_first",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-includes",
    "name": "GoogleSQL ARRAY_INCLUDES()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if any element of an array equals a given search value, or in its lambda form satisfies a condition, and FALSE otherwise.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_includes",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-includes-all",
    "name": "GoogleSQL ARRAY_INCLUDES_ALL()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE only if every element of the second array is also found in the first array.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_includes_all",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-includes-any",
    "name": "GoogleSQL ARRAY_INCLUDES_ANY()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if at least one element of the second array is also found in the first array.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_includes_any",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-is-distinct",
    "name": "GoogleSQL ARRAY_IS_DISTINCT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if an array has no repeated elements; NULL elements count as equal to each other, and an empty array is distinct.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_is_distinct",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-last",
    "name": "GoogleSQL ARRAY_LAST()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the last element of an array, and raises an error if the array is empty.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_last",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-length",
    "name": "GoogleSQL ARRAY_LENGTH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the number of elements in an array as an INT64, counting NULL elements; an empty array gives 0 and a NULL array gives NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_length",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-max",
    "name": "GoogleSQL ARRAY_MAX()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the largest non-NULL element of an array, or NULL if the array is empty or contains only NULL elements.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_max",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-min",
    "name": "GoogleSQL ARRAY_MIN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the smallest non-NULL element of an array, or NULL if the array is empty or contains only NULL elements.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_min",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-reverse",
    "name": "GoogleSQL ARRAY_REVERSE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns an array containing the same elements as the input in reverse order.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_reverse",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-slice",
    "name": "GoogleSQL ARRAY_SLICE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the elements from a start offset through an end offset, both inclusive and zero-based; negative offsets count back from the end and out-of-range offsets are clamped.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_slice",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-to-string",
    "name": "GoogleSQL ARRAY_TO_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Joins the elements of a STRING or BYTES array into one value separated by a delimiter, leaving out NULL elements unless a replacement text is given.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_to_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-transform",
    "name": "GoogleSQL ARRAY_TRANSFORM()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns an array of the same length where each element is replaced by the result of a lambda expression applied to it, optionally using the element's zero-based index.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#array_transform",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-asin",
    "name": "GoogleSQL ASIN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse sine of a value in radians, between minus pi over 2 and pi over 2; raises an error if the input is outside the range from -1 to 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#asin",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-asinh",
    "name": "GoogleSQL ASINH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse hyperbolic sine of a value, which is defined for every real number.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#asinh",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-atan",
    "name": "GoogleSQL ATAN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse tangent of a value in radians, between minus pi over 2 and pi over 2.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#atan",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-atan2",
    "name": "GoogleSQL ATAN2()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse tangent of X divided by Y in radians, using the signs of both arguments to choose the quadrant, so the result lies between minus pi and pi.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#atan2",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-atanh",
    "name": "GoogleSQL ATANH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the inverse hyperbolic tangent of a value; raises an error if the input is below -1 or above 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#atanh",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-bit-count",
    "name": "GoogleSQL BIT_COUNT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the number of bits set to 1 in an integer or BYTES value; for a negative integer it counts the bits of its two's complement form.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/bit_functions#bit_count",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ceil",
    "name": "GoogleSQL CEIL()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the smallest whole number that is not less than the input, so 2.3 becomes 3.0 and -2.3 becomes -2.0; CEILING is a synonym.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#ceil",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-coalesce",
    "name": "GoogleSQL COALESCE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the first argument that is not NULL, or NULL if all are NULL; arguments are evaluated left to right and must share a common supertype.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/conditional_expressions#coalesce",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-cos",
    "name": "GoogleSQL COS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the cosine of an angle given in radians, as a floating-point value between -1 and 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#cos",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-cosh",
    "name": "GoogleSQL COSH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the hyperbolic cosine of a value, and raises an error if the result overflows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#cosh",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-div",
    "name": "GoogleSQL DIV()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Divides the first integer by the second and returns the whole-number quotient truncated toward zero, so DIV(20, 3) is 6 and DIV(12, -7) is -1; dividing by zero raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#div",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-error",
    "name": "GoogleSQL ERROR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Raises an error with the given message string whenever it is evaluated, which lets a conditional expression stop a query on invalid data.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/debugging_functions#error",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-exp",
    "name": "GoogleSQL EXP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns e raised to the power of the input; the result underflows to 0 for very negative inputs and raises an error on overflow.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#exp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-farm-fingerprint",
    "name": "GoogleSQL FARM_FINGERPRINT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Computes the FarmHash fingerprint of a STRING or BYTES input and returns it as an INT64 that never changes for the same input.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/hash_functions#farm_fingerprint",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-float32",
    "name": "GoogleSQL FLOAT32()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON number to a FLOAT32; the wide_number_mode option chooses whether values that lose precision are rounded or raise an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#float_for_json",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-float32-array",
    "name": "GoogleSQL FLOAT32_ARRAY()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a JSON array of numbers to an ARRAY of FLOAT32 values, and raises an error for a non-array input or an element that is not a number.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#float_array_for_json",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-floor",
    "name": "GoogleSQL FLOOR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the largest whole number that is not greater than the input, so 2.3 becomes 2.0 and -2.3 becomes -3.0.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#floor",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-generate-array",
    "name": "GoogleSQL GENERATE_ARRAY()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Creates an array of numbers from a start value to an end value, both inclusive, stepping by 1 or a given step; the array is empty when the start is already past the end, and a step of 0 is an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#generate_array",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-generate-uuid",
    "name": "GoogleSQL GENERATE_UUID()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns a random version 4 UUID as a lowercase STRING in 8-4-4-4-12 hexadecimal form, as described in RFC 4122 section 4.4.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/utility-functions#generate_uuid",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-greatest",
    "name": "GoogleSQL GREATEST()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the largest of its arguments by ordering rules; the result is NULL if any argument is NULL, and NaN if any floating-point argument is NaN.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#greatest",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ieee-divide",
    "name": "GoogleSQL IEEE_DIVIDE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Divides X by Y following IEEE 754 rules, so a zero divisor gives positive or negative infinity and 0 divided by 0 gives NaN instead of an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#ieee_divide",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-if",
    "name": "GoogleSQL IF()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the second argument when the condition is TRUE and the third when it is FALSE or NULL, evaluating only the result it returns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/conditional_expressions#if",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ifnull",
    "name": "GoogleSQL IFNULL()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the first argument unless it is NULL, in which case it returns the second; it is the two-argument form of COALESCE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/conditional_expressions#ifnull",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-is-inf",
    "name": "GoogleSQL IS_INF()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if a floating-point value is positive or negative infinity and FALSE otherwise.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#is_inf",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-is-nan",
    "name": "GoogleSQL IS_NAN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if a floating-point value is NaN, meaning not a number, and FALSE otherwise.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#is_nan",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-justify-days",
    "name": "GoogleSQL JUSTIFY_DAYS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Normalizes the day part of an INTERVAL to between -29 and 29 by carrying each 30 days into the month part, so 31 days becomes 1 month and 1 day.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/interval_functions#justify_days",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-justify-hours",
    "name": "GoogleSQL JUSTIFY_HOURS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Normalizes the time part of an INTERVAL to less than a day in either direction by carrying whole 24-hour blocks into the day part, so 47 hours becomes 1 day and 23 hours.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/interval_functions#justify_hours",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-least",
    "name": "GoogleSQL LEAST()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the smallest of its arguments by ordering rules; the result is NULL if any argument is NULL, and NaN if any floating-point argument is NaN.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#least",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ln",
    "name": "GoogleSQL LN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the natural logarithm of a number, and raises an error if the input is zero or negative.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#ln",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-log",
    "name": "GoogleSQL LOG()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the natural logarithm of X, or the logarithm of X in base Y when a second argument is given; raises an error for a non-positive X, or a base that is not positive or equals 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#log",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-log10",
    "name": "GoogleSQL LOG10()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the base-10 logarithm of a number, and raises an error if the input is zero or negative.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#log10",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-mod",
    "name": "GoogleSQL MOD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the remainder of dividing the first integer by the second; the result takes the sign of the first argument, and dividing by zero raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#mod",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-nullif",
    "name": "GoogleSQL NULLIF()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns NULL when the two arguments are equal and otherwise returns the first argument, which is handy for turning a placeholder value into NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/conditional_expressions#nullif",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-pow",
    "name": "GoogleSQL POW()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns X raised to the power Y; POWER is a synonym, and the call raises an error for zero to a negative power or a negative base with a non-integer exponent.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#pow",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-round",
    "name": "GoogleSQL ROUND()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Rounds X to the nearest whole number, or to a given number of decimal places, where a negative count rounds digits left of the decimal point; halfway values round away from zero.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#round",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-add",
    "name": "GoogleSQL SAFE_ADD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Adds two numbers like the plus operator but returns NULL instead of raising an overflow error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#safe_add",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-divide",
    "name": "GoogleSQL SAFE_DIVIDE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Divides X by Y like the division operator but returns NULL instead of raising an error, for example when Y is zero.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#safe_divide",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-multiply",
    "name": "GoogleSQL SAFE_MULTIPLY()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Multiplies two numbers like the multiplication operator but returns NULL instead of raising an overflow error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#safe_multiply",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-negate",
    "name": "GoogleSQL SAFE_NEGATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Negates a number like the unary minus operator but returns NULL instead of an overflow error, as happens for the most negative INT64.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#safe_negate",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-subtract",
    "name": "GoogleSQL SAFE_SUBTRACT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Subtracts the second number from the first like the minus operator but returns NULL instead of raising an overflow error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#safe_subtract",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-to-json",
    "name": "GoogleSQL SAFE_TO_JSON()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a SQL value to JSON like TO_JSON, but writes JSON null for any field it cannot convert instead of raising an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#safe_to_json",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sha1",
    "name": "GoogleSQL SHA1()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Computes the SHA-1 hash of a STRING or BYTES input and returns the 20-byte digest as BYTES; it has known weaknesses and is not meant for new security designs.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/hash_functions#sha1",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sha256",
    "name": "GoogleSQL SHA256()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Computes the SHA-256 hash of a STRING or BYTES input and returns the 32-byte digest as BYTES.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/hash_functions#sha256",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sha512",
    "name": "GoogleSQL SHA512()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Computes the SHA-512 hash of a STRING or BYTES input and returns the 64-byte digest as BYTES, twice the size of a SHA-256 digest.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/hash_functions#sha512",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sign",
    "name": "GoogleSQL SIGN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns -1, 0 or +1 according to whether the input is negative, zero or positive, and NaN for a NaN input.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#sign",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sin",
    "name": "GoogleSQL SIN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the sine of an angle given in radians, as a floating-point value between -1 and 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#sin",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sinh",
    "name": "GoogleSQL SINH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the hyperbolic sine of a value, and raises an error if the result overflows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#sinh",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sqrt",
    "name": "GoogleSQL SQRT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the square root of a number, and raises an error if the input is negative.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#sqrt",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-tan",
    "name": "GoogleSQL TAN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the tangent of an angle given in radians, and raises an error if the result overflows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#tan",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-tanh",
    "name": "GoogleSQL TANH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the hyperbolic tangent of a value, which always lies between -1 and 1.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#tanh",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-trunc",
    "name": "GoogleSQL TRUNC()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Rounds a number toward zero to a whole number, or to a given number of decimal places, so TRUNC(-2.8) is -2.0 and the result never exceeds the input in absolute value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#trunc",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-ip-from-string",
    "name": "GoogleSQL NET.IP_FROM_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a text IPv4 or IPv6 address to its network-byte-order BYTES form of 4 or 16 bytes; invalid text, including CIDR notation, raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netip_from_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-safe-ip-from-string",
    "name": "GoogleSQL NET.SAFE_IP_FROM_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a text IPv4 or IPv6 address to network-byte-order BYTES like NET.IP_FROM_STRING, but returns NULL instead of an error when the text is not a valid address.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netsafe_ip_from_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-ip-to-string",
    "name": "GoogleSQL NET.IP_TO_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a 4-byte or 16-byte network-byte-order BYTES value to its IPv4 or IPv6 text form; any other length raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netip_to_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-ip-net-mask",
    "name": "GoogleSQL NET.IP_NET_MASK()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Builds a network mask as BYTES of 4 or 16 bytes whose first prefix-length bits are 1 and remaining bits are 0, from a byte count and a prefix length.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netip_net_mask",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-ip-trunc",
    "name": "GoogleSQL NET.IP_TRUNC()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Keeps the first prefix-length bits of an IP address in BYTES form and sets all remaining bits to zero, returning the network address at the same byte length.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netip_trunc",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-ipv4-from-int64",
    "name": "GoogleSQL NET.IPV4_FROM_INT64()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an INT64 integer to a 4-byte network-byte-order IPv4 address in BYTES; values outside -0x80000000 through 0xFFFFFFFF raise an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netipv4_from_int64",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-ipv4-to-int64",
    "name": "GoogleSQL NET.IPV4_TO_INT64()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a 4-byte network-byte-order IPv4 address in BYTES to an INT64 between 0 and 0xFFFFFFFF; input of any other length raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netipv4_to_int64",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-host",
    "name": "GoogleSQL NET.HOST()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Extracts the host from a URL string using a best-effort RFC 3986 parse, without changing its case; returns NULL if the host cannot be parsed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#nethost",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-public-suffix",
    "name": "GoogleSQL NET.PUBLIC_SUFFIX()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the public suffix of the host in a URL or host string, such as com or co.uk, based on the ICANN list; returns NULL if no suffix can be found.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netpublic_suffix",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-net-reg-domain",
    "name": "GoogleSQL NET.REG_DOMAIN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the registered domain of a URL or host string, which is its public suffix plus the one label before it; returns NULL if the host is only a suffix or cannot be parsed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/net_functions#netreg_domain",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-inner-join",
    "name": "INNER JOIN",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Combines rows from two inputs and keeps only the pairs that satisfy the ON or USING condition; rows with no match on the other side are left out of the result.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#join_operation",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-left-join",
    "name": "LEFT JOIN",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Keeps every row from the left input and adds matching right-input rows, filling the right-side columns with NULL for left rows that have no match.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#join_operation",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-right-join",
    "name": "RIGHT JOIN",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Keeps every row from the right input and adds matching left-input rows, filling the left-side columns with NULL for right rows that have no match.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#join_operation",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-full-join",
    "name": "FULL JOIN",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Keeps every row from both inputs: matching pairs are combined, and rows without a match on either side are returned with NULL in the other side's columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#join_operation",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-cross-join",
    "name": "CROSS JOIN",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns every combination of one left-input row with one right-input row, so the result has M times N rows; it takes no ON or USING condition.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#join_operation",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-join-against-unnest",
    "name": "Join against UNNEST",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Joins each row to the elements of an array expression, where UNNEST turns the array into one row per element; an empty or NULL array contributes no rows to a cross or inner join.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#join_operation",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-scalar-subqueries",
    "name": "Scalar subqueries",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "A parenthesized query used as a single value; it must return one column and at most one row, giving NULL when it returns no rows and an error when it returns more than one row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/subqueries",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-array-subqueries",
    "name": "ARRAY subqueries",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Written as ARRAY followed by a parenthesized query that selects one column; it gathers all returned rows into one array value, and an empty result gives an empty array.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/subqueries",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-in-subqueries",
    "name": "IN subqueries",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Checks whether a value is found among the rows of a single-column subquery, written as an expression, IN, and a parenthesized query; NOT IN negates the check.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/subqueries",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-exists-subqueries",
    "name": "EXISTS subqueries",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Evaluates to TRUE when the parenthesized query returns at least one row and FALSE when it returns none; the columns and values the subquery selects do not affect the result.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/subqueries",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-correlated-subqueries",
    "name": "Correlated subqueries",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "A subquery that refers to columns of the enclosing query, so it is evaluated against each outer row, for example to look up related rows with EXISTS or a scalar lookup.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/subqueries",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-named-parameters",
    "name": "GoogleSQL named parameters",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Placeholders written as an at sign followed by a name, such as @user_id, whose values are bound separately from the SQL text when the statement runs.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/lexical#query_parameters",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-postgresql-positional-parameters",
    "name": "PostgreSQL positional parameters",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Placeholders in PostgreSQL-dialect statements written as a dollar sign and a number, such as $1 and $2, which stand for values that are supplied separately from the SQL text.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/lexical#query_parameters",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-untyped-parameter-inference",
    "name": "Untyped parameter inference",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "When a parameter's type is not given in the request's param_types, Spanner infers its SQL type from the supplied value and from how the parameter is used in the statement.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/lexical#query_parameters",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-missing-parameter-validation",
    "name": "Missing-parameter validation",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Running a statement that refers to a parameter with no supplied value is an error, so every placeholder in the SQL text needs a matching entry in the request's params.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/lexical#query_parameters",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-force-index-validation",
    "name": "FORCE_INDEX validation",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Table hint that names the index a query must read instead of letting the optimizer choose; _BASE_TABLE forces the base table, and naming an index that does not exist raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": "Checks index existence; PostgreSQL unknown indexes are ignored."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-lock-scanned-ranges-exclusive-lock-effect",
    "name": "LOCK_SCANNED_RANGES=exclusive lock effect",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "no-effect",
    "description": "Statement hint that makes a statement take exclusive instead of shared locks on the ranges it scans, reducing aborts and retries when many transactions contend for the same rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax",
    "notes": "Acquires exclusive locks."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-plan-query-plan-tree",
    "name": "PLAN query-plan tree",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Query mode that returns only the query plan, a tree of operator nodes describing how the statement would run, with no result rows and no execution statistics.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteSqlRequest.QueryMode",
    "notes": "Analyzes without executing; local tree shape."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-profile-query-plan-tree",
    "name": "PROFILE query-plan tree",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Query mode that runs the statement and returns its plan tree with execution statistics on each operator node, along with the result rows; it adds overhead compared with other modes.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteSqlRequest.QueryMode",
    "notes": "Local engine plan and timing."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-profile-table-scan-statistics",
    "name": "PROFILE table-scan statistics",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Operator-level figures that PROFILE mode attaches to the table and index scan nodes of a plan, such as how many rows each scan read, showing how much data the query touched.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteSqlRequest.QueryMode",
    "notes": "Measured local scans; DML reports root only."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-with-stats-execution-statistics",
    "name": "WITH_STATS execution statistics",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "limited",
    "description": "Query mode that returns the result rows plus overall execution statistics such as rows returned, elapsed time and CPU time, but no query plan and no per-operator statistics.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteSqlRequest.QueryMode",
    "notes": "Local rows, time and CPU counters."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-with-plan-and-stats-response",
    "name": "WITH_PLAN_AND_STATS response",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "limited",
    "description": "Query mode that returns the result rows together with the query plan and overall execution statistics, without the per-operator statistics that PROFILE adds.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteSqlRequest.QueryMode",
    "notes": "Local plan plus execution statistics."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-tablesample-bernoulli",
    "name": "GoogleSQL TABLESAMPLE BERNOULLI",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Sampling method that includes each row of a table independently with the given percent probability, so the sample holds about that share of the rows and its size varies between runs.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#tablesample_operator",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-tablesample-reservoir",
    "name": "GoogleSQL TABLESAMPLE RESERVOIR",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Sampling method that takes a sample size in rows and returns exactly that many rows, or the whole input when it has fewer, with every sample of that size equally likely.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#tablesample_operator",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-tablesample-repeatable",
    "name": "GoogleSQL TABLESAMPLE REPEATABLE",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Optional clause with an integer repeat argument so that sampling the same data with the same argument selects the same sample of rows, rather than a new random sample each run.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/query-syntax#tablesample_operator",
    "notes": "Seeded local sampling; not PostgreSQL REPEATABLE."
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-any-value",
    "name": "GoogleSQL ANY_VALUE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the expression's value from some row of the group; which row is chosen is not specified, and it returns NULL when the group has no rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#any_value",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-agg",
    "name": "GoogleSQL ARRAY_AGG()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that collects an expression's values from the rows of a group into one array; it accepts DISTINCT, IGNORE NULLS or RESPECT NULLS, ORDER BY and LIMIT inside the call.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#array_agg",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-array-concat-agg",
    "name": "GoogleSQL ARRAY_CONCAT_AGG()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that joins the array values of all rows in a group into one longer array; NULL arrays are skipped and the result is NULL when there is no non-NULL array.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#array_concat_agg",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-avg",
    "name": "GoogleSQL AVG()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the average of the non-NULL numeric values in a group, as FLOAT64 for integer and float inputs, or NULL when the group has no non-NULL values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#avg",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-bit-and",
    "name": "GoogleSQL BIT_AND()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the bitwise AND of the INT64 values in a group, keeping only the bits that are set in every value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#bit_and",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-bit-or",
    "name": "GoogleSQL BIT_OR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the bitwise OR of the INT64 values in a group, setting every bit that is set in at least one value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#bit_or",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-bit-xor",
    "name": "GoogleSQL BIT_XOR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the bitwise exclusive OR of the INT64 values in a group, setting each bit that is set in an odd number of values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#bit_xor",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-count",
    "name": "GoogleSQL COUNT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns an INT64 row count: COUNT(*) counts all rows in the group, while COUNT of an expression counts only rows where it is not NULL, optionally with DISTINCT.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#count",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-countif",
    "name": "GoogleSQL COUNTIF()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns an INT64 count of the rows in a group for which a BOOL expression is TRUE; rows where it is FALSE or NULL are not counted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#countif",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-logical-and",
    "name": "GoogleSQL LOGICAL_AND()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate over BOOL values that returns TRUE only if every non-NULL value in the group is TRUE, and NULL when the group has no non-NULL values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#logical_and",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-logical-or",
    "name": "GoogleSQL LOGICAL_OR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate over BOOL values that returns TRUE if at least one non-NULL value in the group is TRUE, and NULL when the group has no non-NULL values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#logical_or",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-max",
    "name": "GoogleSQL MAX()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the largest non-NULL value of an orderable expression in a group, or NULL for an empty or all-NULL group; the result is NaN if any input is NaN.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#max",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-min",
    "name": "GoogleSQL MIN()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that returns the smallest non-NULL value of an orderable expression in a group, or NULL for an empty or all-NULL group; the result is NaN if any input is NaN.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#min",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-stddev",
    "name": "GoogleSQL STDDEV()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the sample standard deviation of the numeric values in a group, as FLOAT64; this short name behaves exactly like STDDEV_SAMP.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/statistical_aggregate_functions#stddev",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-stddev-samp",
    "name": "GoogleSQL STDDEV_SAMP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate returning the sample (unbiased, n minus 1) standard deviation of a group's numeric values as FLOAT64; NULL inputs are ignored and fewer than two values give NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/statistical_aggregate_functions#stddev_samp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-string-agg",
    "name": "GoogleSQL STRING_AGG()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that concatenates the non-NULL STRING or BYTES values of a group into one value, with an optional delimiter, and optional DISTINCT, ORDER BY and LIMIT inside the call.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#string_agg",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-sum",
    "name": "GoogleSQL SUM()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate that adds up the non-NULL numeric values in a group and returns NULL when there are none; an integer sum that overflows INT64 raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/aggregate_functions#sum",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-var-samp",
    "name": "GoogleSQL VAR_SAMP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Aggregate returning the sample (unbiased, n minus 1) variance of a group's numeric values as FLOAT64, the square of the sample standard deviation; fewer than two non-NULL values give NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/statistical_aggregate_functions#var_samp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-variance",
    "name": "GoogleSQL VARIANCE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the sample variance of the numeric values in a group, as FLOAT64, measuring how far values spread from their mean; this short name behaves exactly like VAR_SAMP.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/statistical_aggregate_functions#variance",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-byte-length",
    "name": "GoogleSQL BYTE_LENGTH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the number of bytes in a STRING or BYTES value as INT64, so a multibyte UTF-8 character counts as more than one.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#byte_length",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-char-length",
    "name": "GoogleSQL CHAR_LENGTH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the number of characters in a STRING as INT64, counting each character once however many bytes its UTF-8 encoding takes.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#char_length",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-code-points-to-bytes",
    "name": "GoogleSQL CODE_POINTS_TO_BYTES()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an array of INT64 values from 0 to 255 into a BYTES value with one byte per element; it reverses TO_CODE_POINTS applied to BYTES.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#code_points_to_bytes",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-code-points-to-string",
    "name": "GoogleSQL CODE_POINTS_TO_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an array of INT64 Unicode code points into a STRING; it reverses TO_CODE_POINTS applied to a STRING, and a NULL element makes the result NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#code_points_to_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-concat",
    "name": "GoogleSQL CONCAT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Joins one or more STRING or BYTES values, all of the same type, into a single value; the result is NULL if any argument is NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#concat",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ends-with",
    "name": "GoogleSQL ENDS_WITH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if a STRING or BYTES value ends with the given suffix and FALSE otherwise; both arguments must have the same type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#ends_with",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-format",
    "name": "GoogleSQL FORMAT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Builds a STRING from a format string and a list of values, in the style of C printf, with specifiers such as %d for integers, %s for strings and %t for any value as text.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#format_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-from-base32",
    "name": "GoogleSQL FROM_BASE32()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Decodes a base32-encoded STRING into BYTES; it reverses TO_BASE32.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#from_base32",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-from-base64",
    "name": "GoogleSQL FROM_BASE64()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Decodes a standard base64 STRING, using the characters A-Z, a-z, 0-9, plus, slash and equals, into BYTES; it reverses TO_BASE64.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#from_base64",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-from-hex",
    "name": "GoogleSQL FROM_HEX()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Decodes a hexadecimal STRING, in upper or lower case, into BYTES; an odd number of digits is read as if it had a leading zero, and other characters raise an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#from_hex",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-length",
    "name": "GoogleSQL LENGTH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the length of a value as INT64: the number of characters for a STRING, but the number of bytes for a BYTES value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#length",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-lower",
    "name": "GoogleSQL LOWER()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a STRING to lowercase using Unicode character mappings without language-specific rules; for BYTES only the ASCII letters are lowercased.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#lower",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-lpad",
    "name": "GoogleSQL LPAD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Pads the start of a STRING or BYTES value with a repeated pattern, a space by default, until it reaches the requested length; a longer value is cut down to that length.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#lpad",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ltrim",
    "name": "GoogleSQL LTRIM()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Removes characters from the start of a STRING or BYTES value only: whitespace by default for a STRING, or any characters found in a given set.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#ltrim",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-normalize",
    "name": "GoogleSQL NORMALIZE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a STRING to a Unicode normalization form, NFC by default or NFD, NFKC or NFKD, so equivalent characters get one representation; letter case is kept.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#normalize",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-normalize-and-casefold",
    "name": "GoogleSQL NORMALIZE_AND_CASEFOLD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Normalizes a STRING to a Unicode form, as NORMALIZE does, and then case-folds it, so strings can be compared regardless of letter case or equivalent character encodings.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#normalize_and_casefold",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-regexp-contains",
    "name": "GoogleSQL REGEXP_CONTAINS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if any part of a STRING or BYTES value matches an RE2 regular expression; use anchors to require a match of the whole value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#regexp_contains",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-regexp-extract",
    "name": "GoogleSQL REGEXP_EXTRACT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the first substring that matches an RE2 regular expression, or the text captured by its single capturing group, and NULL when nothing matches.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#regexp_extract",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-regexp-extract-all",
    "name": "GoogleSQL REGEXP_EXTRACT_ALL()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns an array of every non-overlapping substring matching an RE2 regular expression, or of its capturing group's text for each match, and an empty array when nothing matches.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#regexp_extract_all",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-regexp-replace",
    "name": "GoogleSQL REGEXP_REPLACE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Replaces every non-overlapping match of an RE2 regular expression in a STRING or BYTES value with a replacement, which can refer to captured groups.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#regexp_replace",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-repeat",
    "name": "GoogleSQL REPEAT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns a STRING or BYTES value repeated a given number of times; a negative count raises an error and a NULL argument gives NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#repeat",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-replace",
    "name": "GoogleSQL REPLACE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Replaces every occurrence of a search value inside a STRING or BYTES value with another value and returns the changed copy.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#replace",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-reverse",
    "name": "GoogleSQL REVERSE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns a STRING with its characters in reverse order, or a BYTES value with its bytes in reverse order.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#reverse",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-rpad",
    "name": "GoogleSQL RPAD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Pads the end of a STRING or BYTES value with a repeated pattern, a space by default, until it reaches the requested length; a longer value is cut down to that length.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#rpad",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-rtrim",
    "name": "GoogleSQL RTRIM()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Removes characters from the end of a STRING or BYTES value only: whitespace by default for a STRING, or any characters found in a given set.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#rtrim",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-safe-convert-bytes-to-string",
    "name": "GoogleSQL SAFE_CONVERT_BYTES_TO_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a BYTES value to a STRING and replaces any invalid UTF-8 sequence with the Unicode replacement character U+FFFD instead of raising an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#safe_convert_bytes_to_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-soundex",
    "name": "GoogleSQL SOUNDEX()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the Soundex phonetic code of a STRING, a letter followed by three digits, so words that sound alike get the same code; non-Latin characters are ignored.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#soundex",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-split",
    "name": "GoogleSQL SPLIT()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Splits a STRING, on a comma by default, or a BYTES value on a required delimiter, into an array of the pieces; the delimiter is matched literally, not as a pattern.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#split",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-split-substr",
    "name": "GoogleSQL SPLIT_SUBSTR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Splits a STRING on a delimiter and returns the run of consecutive pieces from a start position for an optional count, rejoined with the delimiter; a negative start counts from the end.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#split_substr",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-starts-with",
    "name": "GoogleSQL STARTS_WITH()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE if a STRING or BYTES value begins with the given prefix and FALSE otherwise; both arguments must have the same type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#starts_with",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-strpos",
    "name": "GoogleSQL STRPOS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the 1-based position of the first occurrence of a substring within a STRING or BYTES value, or 0 when the substring is not found.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#strpos",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-substr",
    "name": "GoogleSQL SUBSTR()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns part of a STRING or BYTES value starting at a 1-based position for an optional length; a negative position counts back from the end of the value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#substr",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-to-base32",
    "name": "GoogleSQL TO_BASE32()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Encodes a BYTES value as a base32 STRING, padded with equals signs; it reverses FROM_BASE32.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#to_base32",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-to-base64",
    "name": "GoogleSQL TO_BASE64()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Encodes a BYTES value as a standard base64 STRING with padding; it reverses FROM_BASE64, and URL-safe output needs plus and slash replaced.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#to_base64",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-to-code-points",
    "name": "GoogleSQL TO_CODE_POINTS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a STRING into an array of its Unicode code points, or a BYTES value into an array of its byte values from 0 to 255, as INT64 elements.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#to_code_points",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-to-hex",
    "name": "GoogleSQL TO_HEX()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a BYTES value to a lowercase hexadecimal STRING with two digits per byte; it reverses FROM_HEX.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#to_hex",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-trim",
    "name": "GoogleSQL TRIM()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Removes characters from both ends of a STRING or BYTES value: whitespace by default for a STRING, or any characters found in a given set.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#trim",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-upper",
    "name": "GoogleSQL UPPER()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a STRING to uppercase using Unicode character mappings without language-specific rules; for BYTES only the ASCII letters are uppercased.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#upper",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-zstd-compress",
    "name": "GoogleSQL ZSTD_COMPRESS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Compresses a STRING or BYTES value into BYTES with the Zstandard algorithm; an optional level argument trades compression speed for a smaller result.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/compression-functions#zstd_compress",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-zstd-decompress-to-bytes",
    "name": "GoogleSQL ZSTD_DECOMPRESS_TO_BYTES()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Decompresses Zstandard-compressed BYTES back into BYTES; an optional size_limit caps the decompressed size, and a result larger than the limit raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/compression-functions#zstd_decompress_to_bytes",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-zstd-decompress-to-string",
    "name": "GoogleSQL ZSTD_DECOMPRESS_TO_STRING()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "Decompresses Zstandard-compressed BYTES into a STRING, for data that was compressed from text; an optional size_limit caps the output size and exceeding it raises an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/compression-functions#zstd_decompress_to_string",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-lcase",
    "name": "GoogleSQL LCASE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "A synonym of LOWER: returns a STRING in lowercase, or a BYTES value with only its ASCII letters lowercased.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#lcase",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-ucase",
    "name": "GoogleSQL UCASE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "A synonym of UPPER: returns a STRING in uppercase, or a BYTES value with only its ASCII letters uppercased.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/string_functions#ucase",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-current-date",
    "name": "GoogleSQL CURRENT_DATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns today's date as a DATE, optionally for a given time zone; every call within one statement returns the same value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#current_date",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-current-timestamp",
    "name": "GoogleSQL CURRENT_TIMESTAMP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the current date and time as a TIMESTAMP; every call within one statement returns the same value, and the parentheses may be omitted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#current_timestamp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-date",
    "name": "GoogleSQL DATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Constructs a DATE from INT64 year, month and day arguments, or extracts the date part of a TIMESTAMP as seen in an optional time zone.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#date",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-date-add",
    "name": "GoogleSQL DATE_ADD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Adds a number of DAY, WEEK, MONTH, QUARTER or YEAR units to a DATE and returns the new DATE; month arithmetic that lands past a short month's end gives its last day.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#date_add",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-date-diff",
    "name": "GoogleSQL DATE_DIFF()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns, as INT64, the number of DAY, WEEK, MONTH, QUARTER or YEAR boundaries between an end date and a start date, zero or negative when the end date is earlier.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#date_diff",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-date-from-unix-date",
    "name": "GoogleSQL DATE_FROM_UNIX_DATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an INT64 count of days since 1970-01-01 into a DATE; it reverses UNIX_DATE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#date_from_unix_date",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-date-sub",
    "name": "GoogleSQL DATE_SUB()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Subtracts a number of DAY, WEEK, MONTH, QUARTER or YEAR units from a DATE and returns the earlier DATE; month arithmetic that lands past a short month's end gives its last day.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#date_sub",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-date-trunc",
    "name": "GoogleSQL DATE_TRUNC()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Truncates a DATE down to the first day of the period containing it, at a granularity such as WEEK, MONTH, QUARTER or YEAR; WEEK starts on Sunday and ISOWEEK on Monday.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#date_trunc",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-format-date",
    "name": "GoogleSQL FORMAT_DATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Formats a DATE as a STRING using a format string made of elements such as %Y for the year, %m for the month and %d for the day.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#format_date",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-format-timestamp",
    "name": "GoogleSQL FORMAT_TIMESTAMP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Formats a TIMESTAMP as a STRING using a format string of elements such as %Y-%m-%d %H:%M:%S, shown in an optional time zone.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#format_timestamp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-generate-date-array",
    "name": "GoogleSQL GENERATE_DATE_ARRAY()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns an array of DATE values from a start date to an end date, stepping one day by default or by an INTERVAL of days, weeks, months, quarters or years.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/array_functions#generate_date_array",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-justify-interval",
    "name": "GoogleSQL JUSTIFY_INTERVAL()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Normalizes an INTERVAL by carrying every 24 hours of the time part into days and every 30 days into months, so 29 days and 49 hours becomes 1 month, 1 day and 1 hour.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/interval_functions#justify_interval",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-make-interval",
    "name": "GoogleSQL MAKE_INTERVAL()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Builds an INTERVAL from optional INT64 year, month, day, hour, minute and second arguments, each defaulting to 0 and passable by name, for example hour set to 10.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/interval_functions#make_interval",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-parse-date",
    "name": "GoogleSQL PARSE_DATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a STRING to a DATE using a format string; each element must match at the same position or an error is raised, and unspecified fields default from 1970-01-01.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#parse_date",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-parse-timestamp",
    "name": "GoogleSQL PARSE_TIMESTAMP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a STRING to a TIMESTAMP using a format string and an optional time zone; a mismatch raises an error, and unspecified fields default from 1970-01-01 00:00:00.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#parse_timestamp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp",
    "name": "GoogleSQL TIMESTAMP()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Constructs a TIMESTAMP from a STRING holding a timestamp literal or from a DATE, read in an optional time zone; a DATE becomes the start of that day.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-add",
    "name": "GoogleSQL TIMESTAMP_ADD()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Adds a whole number of units from NANOSECOND up to DAY to a TIMESTAMP and returns the later TIMESTAMP; a DAY is always 24 hours, independent of time zones.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_add",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-diff",
    "name": "GoogleSQL TIMESTAMP_DIFF()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns, as INT64, the number of units from NANOSECOND up to DAY between an end TIMESTAMP and a start TIMESTAMP, zero or negative when the end is earlier; fractions are truncated.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_diff",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-micros",
    "name": "GoogleSQL TIMESTAMP_MICROS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an INT64 count of microseconds since 1970-01-01 00:00:00 UTC into a TIMESTAMP.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_micros",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-millis",
    "name": "GoogleSQL TIMESTAMP_MILLIS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an INT64 count of milliseconds since 1970-01-01 00:00:00 UTC into a TIMESTAMP.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_millis",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-seconds",
    "name": "GoogleSQL TIMESTAMP_SECONDS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts an INT64 count of seconds since 1970-01-01 00:00:00 UTC into a TIMESTAMP.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_seconds",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-sub",
    "name": "GoogleSQL TIMESTAMP_SUB()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Subtracts a whole number of units from NANOSECOND up to DAY from a TIMESTAMP and returns the earlier TIMESTAMP; a DAY is always 24 hours, independent of time zones.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_sub",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-timestamp-trunc",
    "name": "GoogleSQL TIMESTAMP_TRUNC()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Truncates a TIMESTAMP down to the start of a granularity such as SECOND, MINUTE, HOUR, DAY, MONTH or YEAR, evaluated in an optional time zone, and returns a TIMESTAMP.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#timestamp_trunc",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-unix-date",
    "name": "GoogleSQL UNIX_DATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Returns the number of days from 1970-01-01 to a DATE as an INT64; it reverses DATE_FROM_UNIX_DATE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#unix_date",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-unix-micros",
    "name": "GoogleSQL UNIX_MICROS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a TIMESTAMP into an INT64 count of microseconds since 1970-01-01 00:00:00 UTC, keeping more precision than UNIX_MILLIS or UNIX_SECONDS.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#unix_micros",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-unix-millis",
    "name": "GoogleSQL UNIX_MILLIS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a TIMESTAMP into an INT64 count of milliseconds since 1970-01-01 00:00:00 UTC, dropping any finer precision.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#unix_millis",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-unix-seconds",
    "name": "GoogleSQL UNIX_SECONDS()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "available",
    "description": "Converts a TIMESTAMP into an INT64 count of seconds since 1970-01-01 00:00:00 UTC, dropping any finer precision.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/timestamp_functions#unix_seconds",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-adddate",
    "name": "GoogleSQL ADDDATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "A synonym of DATE_ADD: adds an INTERVAL of a whole number of date-part units to a DATE and returns the new DATE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#adddate",
    "notes": ""
  },
  {
    "id": "spanner-googlesql-query-language-and-functions-googlesql-subdate",
    "name": "GoogleSQL SUBDATE()",
    "area": "GoogleSQL query language and functions",
    "local": "available",
    "other": "unavailable",
    "description": "A synonym of DATE_SUB: subtracts an INTERVAL of a whole number of date-part units from a DATE and returns the new, earlier DATE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/date_functions#subdate",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-database-dialect",
    "name": "PostgreSQL database dialect",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Creates a Spanner database that uses the PostgreSQL dialect, so schemas, queries and clients follow PostgreSQL syntax, types and catalogs; the dialect is chosen when the database is created.",
    "docs": "https://docs.cloud.google.com/spanner/docs/postgresql-interface",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-generate-series",
    "name": "PostgreSQL generate_series()",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "unavailable",
    "description": "Set-returning function that produces a series of integer or numeric values from a start to an end value with an optional step, one row per value, and is used in the FROM clause.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#set-returning-functions",
    "notes": "Series in FROM; integer start/end/step cases."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-spanner-split-substr",
    "name": "PostgreSQL spanner.split_substr()",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "unavailable",
    "description": "Splits a text value on a literal delimiter and returns a run of consecutive parts, from a chosen starting split for an optional count of splits; a negative start counts from the end.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#string-functions",
    "notes": "Documented positional substring splitting."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-make-interval",
    "name": "PostgreSQL make_interval()",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "unavailable",
    "description": "Builds an interval value from optional years, months, weeks, days, hours, minutes and seconds fields, each of which defaults to zero when omitted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#interval",
    "notes": "Documented interval construction."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-ilike-operator",
    "name": "PostgreSQL ILIKE operator",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "Case-insensitive pattern match that returns true when a string matches a pattern with percent and underscore wildcards, ignoring letter case; an optional ESCAPE clause names the escape character.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#pattern-matching",
    "notes": "Case-insensitive matching and escape handling."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-operator",
    "name": "PostgreSQL !~~ operator",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "Operator spelling of NOT LIKE: returns true when the string does not match the pattern, using case-sensitive wildcard matching, unlike the case-insensitive !~~* form.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#pattern-matching",
    "notes": "Negated LIKE mapping."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-regexp-replace-first-match-semantics",
    "name": "PostgreSQL regexp_replace() first-match semantics",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "Replaces the part of a string matched by the first occurrence of a POSIX regular expression with the replacement text, leaving any later matches in the string unchanged.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#string-functions",
    "notes": "Corrects replacement behavior."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-sum-float8-on-empty-input",
    "name": "PostgreSQL SUM(float8) on empty input",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "Adding up a float8 column over zero rows returns NULL rather than zero, so an empty result set gives a NULL double precision sum.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#aggregate",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-sum-float8-on-all-null-input",
    "name": "PostgreSQL SUM(float8) on all-NULL input",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "SUM ignores NULL inputs, so when every float8 value is NULL there is nothing to add and the sum is NULL instead of zero.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#aggregate",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-avg-float8-on-empty-input",
    "name": "PostgreSQL AVG(float8) on empty input",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "The average of a float8 column over zero rows is NULL, because there are no values to divide a total by.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#aggregate",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-avg-float8-on-all-null-input",
    "name": "PostgreSQL AVG(float8) on all-NULL input",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "AVG skips NULL inputs, so when every float8 value is NULL there is nothing to average and the result is NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#aggregate",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-array-agg-uuid",
    "name": "PostgreSQL ARRAY_AGG(UUID)",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "Collects UUID values from the input rows into a single array of UUIDs, keeping NULLs, with an optional ORDER BY inside the call to sort the elements.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#aggregate",
    "notes": "Preserves native UUID results."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-am",
    "name": "PostgreSQL pg_am",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table listing the access methods available for tables and indexes, giving each method's name and type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_am",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-attrdef",
    "name": "PostgreSQL pg_attrdef",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table holding column default expressions, linking each table and column number to the text of its default value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_attrdef",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-attribute",
    "name": "PostgreSQL pg_attribute",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table with one row per table column, giving its name, data type, position and whether it is NOT NULL or has a default, identity or generated value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_attribute",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-class",
    "name": "PostgreSQL pg_class",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table of relations such as tables, indexes, views and sequences, giving each one's name, schema, kind and column count.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_class",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-collation",
    "name": "PostgreSQL pg_collation",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table listing the collations that can be used to order and compare text, with each collation's name, schema and encoding.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_collation",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-constraint",
    "name": "PostgreSQL pg_constraint",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table of table constraints such as primary keys, foreign keys and check constraints, showing the constrained columns and the referenced table.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_constraint",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-index",
    "name": "PostgreSQL pg_index",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table with one row per index, naming the indexed table and the number of key columns and flagging whether it is unique, primary or valid.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_index",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-indexes",
    "name": "PostgreSQL pg_indexes",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog view listing each index with its schema, table name, index name and the text of the statement that defines it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-namespace",
    "name": "PostgreSQL pg_namespace",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table of schemas, giving each schema's name and identifier, including the public schema and the system schemas.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_namespace",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-sequence",
    "name": "PostgreSQL pg_sequence",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table with the settings of each sequence, such as its data type, start value, cache size and whether it cycles.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_sequence",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-sequences",
    "name": "PostgreSQL pg_sequences",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog view that presents sequences by schema and name together with their configured properties, such as start value and cycling.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-settings",
    "name": "PostgreSQL pg_settings",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog view of configuration parameters, giving each setting's name, current value and description.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-tables",
    "name": "PostgreSQL pg_tables",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog view listing the tables of the database by schema name and table name.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-type",
    "name": "PostgreSQL pg_type",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog table of data types, giving each type's name, schema, length, category and the element or array type it relates to.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_type",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-views",
    "name": "PostgreSQL pg_views",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Catalog view listing views by schema and view name together with the query text that defines each view.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables",
    "notes": "Populated or static local catalog; not a complete PostgreSQL server catalog."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-pg-proc-named-schema-udf-metadata",
    "name": "PostgreSQL pg_proc named-schema UDF metadata",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "Catalog table of functions with their name, schema, kind, argument types, return type and SQL body; user-defined functions in a named schema report that schema.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables#pg_proc",
    "notes": "Correct function/schema metadata."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-catalog-role-filtering",
    "name": "PostgreSQL catalog role filtering",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "unavailable",
    "description": "Under fine-grained access control, queries on the catalog tables return only rows for schema objects that the querying database role has been granted privileges on.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/pg-system-catalog-tables",
    "notes": "Filters object rows by creator_role privileges."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-create-table-synonym",
    "name": "PostgreSQL CREATE TABLE SYNONYM",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "A SYNONYM clause on CREATE TABLE gives the new table one extra name that queries and DML can use as an alias; the alias cannot be used in DDL or schema changes.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-definition-language",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-alter-table-add-synonym",
    "name": "PostgreSQL ALTER TABLE ADD SYNONYM",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Adds an alternate name to an existing table so applications can read and write it under either name; a table can hold one synonym, and DDL must still use the real name.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-definition-language",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-alter-table-drop-synonym",
    "name": "PostgreSQL ALTER TABLE DROP SYNONYM",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Removes the alternate name from a table once applications no longer use it, leaving the table and its original name unchanged.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-definition-language",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-create-view",
    "name": "PostgreSQL CREATE VIEW",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Defines a named view over a SELECT query; the PostgreSQL dialect takes a SQL SECURITY clause that says whether the view runs with the caller's or the definer's privileges.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-definition-language#create_view",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-create-or-replace-view",
    "name": "PostgreSQL CREATE OR REPLACE VIEW",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Creates a view or, if it already exists, replaces its query or security type in place instead of failing the way plain CREATE VIEW does.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-definition-language#create_view",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-drop-view",
    "name": "PostgreSQL DROP VIEW",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Removes a view definition; only the view is dropped, and the tables or views it queries are left untouched.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-definition-language#create_view",
    "notes": ""
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-create-change-stream",
    "name": "PostgreSQL CREATE CHANGE STREAM",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Defines a change stream that records inserts, updates and deletes for the whole database or chosen tables and columns, with WITH options such as retention period and value capture type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": "Partition distribution is simulated; restart behavior is tracked separately."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-alter-change-stream",
    "name": "PostgreSQL ALTER CHANGE STREAM",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Changes an existing change stream: the tables and columns it watches, or its WITH options such as retention period, value capture type and the exclude filters.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": "Partition distribution is simulated; restart behavior is tracked separately."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-drop-change-stream",
    "name": "PostgreSQL DROP CHANGE STREAM",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Removes a change stream so it stops recording data changes and its read function is no longer available.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": "Partition distribution is simulated; restart behavior is tracked separately."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-spanner-read-json-stream",
    "name": "PostgreSQL spanner.read_json_<stream>()",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Read function created with each PostgreSQL-dialect change stream, named by appending the stream name; takes start and end timestamps, partition token, heartbeat interval and read options, and returns JSON change records.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": "Partition distribution is simulated; restart behavior is tracked separately."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-jsonb-type",
    "name": "PostgreSQL JSONB type",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "PostgreSQL-dialect type for JSON documents kept in a normalized form: whitespace and key order are not preserved, duplicate keys keep the last value, and JSON null differs from SQL NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#jsonb",
    "notes": "Spanner JSONB semantics, not PostgreSQL semantics."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-jsonb-concatenation-order",
    "name": "PostgreSQL JSONB concatenation order",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "The JSONB concatenation operator joins two values: two arrays give one array with all left elements followed by all right elements, and two objects give the merged keys with the right value winning.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#jsonb",
    "notes": "Preserves left operand elements before right operand."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-jsonb-negative-index",
    "name": "PostgreSQL JSONB negative-index ->",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "The JSONB single-arrow operator with an integer returns that zero-based array element as JSONB; a negative index does not count from the end and returns SQL NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#jsonb",
    "notes": "Returns NULL per Spanner behavior."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-jsonb-negative-index-2",
    "name": "PostgreSQL JSONB negative-index ->>",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "The JSONB double-arrow operator with an integer returns that array element as text rather than JSONB; a negative index does not count from the end and returns SQL NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#jsonb",
    "notes": "Returns NULL per Spanner behavior."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-jsonb-large-numbers-on-macos",
    "name": "PostgreSQL JSONB large numbers on macOS",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "limited",
    "description": "JSONB keeps number values as written, including trailing zeros, with up to 4,932 digits before the decimal point and 16,383 after it, so very large integers and precise decimals are not rounded.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#jsonb",
    "notes": "Up to 4,932 integer digits."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-tablesample-bernoulli",
    "name": "PostgreSQL TABLESAMPLE BERNOULLI",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Row-sampling clause that independently keeps each row with a probability given as a percentage from 0 to 100, so the sample is roughly that share of the table and its size varies.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/query-syntax#tablesample_operator",
    "notes": "PostgreSQL REPEATABLE remains rejected."
  },
  {
    "id": "spanner-postgresql-dialect-postgresql-tablesample-spanner-reservoir",
    "name": "PostgreSQL TABLESAMPLE SPANNER.RESERVOIR",
    "area": "PostgreSQL dialect",
    "local": "available",
    "other": "available",
    "description": "Row-sampling clause that takes a fixed row count and returns exactly that many randomly chosen rows, or the whole input when it has fewer rows than requested.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/query-syntax#tablesample_operator",
    "notes": "PostgreSQL REPEATABLE remains rejected."
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-spannerservice-executebatchdml",
    "name": "SpannerService.ExecuteBatchDml",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Runs several DML statements one after another in a single request, within the request's read-write transaction, and returns one result per statement; execution stops after the first failed statement.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.ExecuteBatchDml",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-batch-dml-sequence-number-handling",
    "name": "Batch DML sequence-number handling",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Each batch DML request carries an increasing per-transaction sequence number that makes it idempotent, so a replayed request returns the original response instead of running twice.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.ExecuteBatchDmlRequest",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-spannerservice-batchwrite",
    "name": "SpannerService.BatchWrite",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Applies groups of mutations in efficient transactions, each group committed atomically, and streams back one result per group; the groups must be independent of each other.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.BatchWrite",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-insert-mutation",
    "name": "Insert mutation",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Adds new rows to a table; if a row with the same primary key already exists, the whole write fails with ALREADY_EXISTS.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Mutation",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-insertorupdate-mutation",
    "name": "InsertOrUpdate mutation",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Writes rows by inserting those with new keys and, for keys that already exist, overwriting only the supplied columns while leaving the other columns as they were.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Mutation",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-replace-mutation",
    "name": "Replace mutation",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Writes rows by deleting any existing row with the same key and inserting the supplied values, so columns that are not supplied become NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Mutation",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-update-mutation",
    "name": "Update mutation",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Changes columns of rows that already exist and leaves the unspecified columns alone; if a named row does not exist the write fails with NOT_FOUND.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-delete-mutation-by-key",
    "name": "Delete mutation by key",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Removes rows identified by an explicit list of primary keys; the mutation succeeds whether or not the named rows exist.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Mutation.Delete",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-delete-mutation-by-key-range",
    "name": "Delete mutation by key range",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Removes every row whose primary key falls inside a start and end key range, each end open or closed, in a single mutation; a range that matches no rows is not an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Mutation.Delete",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-insert-statement",
    "name": "INSERT statement",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Adds rows to a table from a VALUES list or the result of a query; if a primary key is already present the statement fails with a duplicate-key error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-update-statement",
    "name": "UPDATE statement",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Changes column values of the rows chosen by a required WHERE clause using SET assignments, and reports how many rows were modified.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-delete-statement",
    "name": "DELETE statement",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Removes the rows chosen by a required WHERE clause from a table, also deleting interleaved child rows that cascade, and reports how many rows were deleted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-partitioned-dml-execution",
    "name": "Partitioned DML execution",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Runs one UPDATE or DELETE across a whole table by splitting the key space and executing it in separate smaller transactions; the statement must be idempotent and fully partitionable.",
    "docs": "https://docs.cloud.google.com/spanner/docs/dml-partitioned",
    "notes": "Local execution; no distributed parallelism."
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-googlesql-insert-or-ignore",
    "name": "GoogleSQL INSERT OR IGNORE",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Inserts the rows whose primary key is new and silently skips rows whose key already exists, instead of failing the statement with a duplicate-key error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-googlesql-insert-or-update",
    "name": "GoogleSQL INSERT OR UPDATE",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Inserts a row when its primary key is new, otherwise updates the existing row with the supplied values and leaves columns not named in the statement unchanged.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-postgresql-on-conflict-do-nothing",
    "name": "PostgreSQL ON CONFLICT DO NOTHING",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "PostgreSQL-style clause on INSERT that skips a row whose key conflicts with an existing primary key or unique index entry instead of raising a duplicate-key error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-postgresql-on-conflict-do-update",
    "name": "PostgreSQL ON CONFLICT DO UPDATE",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "PostgreSQL-style clause on INSERT that, when the named conflict target already exists, applies a SET list to the existing row and can read the proposed values through the EXCLUDED alias.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-googlesql-then-return",
    "name": "GoogleSQL THEN RETURN",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Clause on INSERT, UPDATE or DELETE that returns chosen columns or expressions of the affected rows, such as default or generated values, from the same statement without a separate SELECT.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-googlesql-then-return-with-action",
    "name": "GoogleSQL THEN RETURN WITH ACTION",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "Extends THEN RETURN with an extra last string column, named ACTION unless aliased, that tells for each returned row whether it was inserted, updated or deleted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-dml-mutations-and-batch-operations-postgresql-returning",
    "name": "PostgreSQL RETURNING",
    "area": "DML, mutations, and batch operations",
    "local": "available",
    "other": "available",
    "description": "PostgreSQL-dialect spelling of returning data from a write: a RETURNING list on INSERT, UPDATE or DELETE yields the affected rows' columns or expressions, such as defaults or generated values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/dml-syntax",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-spannerservice-begintransaction",
    "name": "SpannerService.BeginTransaction",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Starts a transaction on a session, read-write, read-only or partitioned DML, and returns its ID for later requests; often skipped because other calls can begin one implicitly.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.BeginTransaction",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-spannerservice-commit",
    "name": "SpannerService.Commit",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Commits a transaction by atomically applying the supplied mutations to the database and returns the commit timestamp; an ABORTED error means the transaction must be retried.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.Commit",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-spannerservice-rollback",
    "name": "SpannerService.Rollback",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Aborts a transaction and releases any locks it holds; used when a transaction that has already read or queried data decides not to commit.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.Spanner.Rollback",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-commitstats-mutation-count",
    "name": "CommitStats mutation_count",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "unavailable",
    "description": "Commit statistics returned on request that report how many mutations the transaction applied, so clients can track how large their commits are.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#google.spanner.v1.CommitResponse.CommitStats.FIELDS.int64.google.spanner.v1.CommitResponse.CommitStats.mutation_count",
    "notes": "Local documented mutation counting; index/constraint differences remain possible."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-read-write-transaction-read-query-write-buffering",
    "name": "Read-write transaction read/query/write buffering",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "A read-write transaction runs reads, queries and DML against a consistent view of the data, while mutations are held back and applied atomically together when the transaction commits.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-read-only-transactions",
    "name": "Read-only transactions",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Run several reads and queries at one consistent snapshot timestamp without taking locks or blocking writers; they cannot modify data and use a chosen timestamp bound.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-pending-commit-timestamp",
    "name": "PENDING_COMMIT_TIMESTAMP()",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Returns a placeholder that Spanner replaces with the transaction's actual commit timestamp when it commits, for writing into a TIMESTAMP column from INSERT or UPDATE statements.",
    "docs": "https://docs.cloud.google.com/spanner/docs/commit-timestamp",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-allow-commit-timestamp-columns",
    "name": "allow_commit_timestamp columns",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Column option that lets a TIMESTAMP column be filled with the transaction's commit timestamp at write time, which gives each row a reliable record of when it was last written.",
    "docs": "https://docs.cloud.google.com/spanner/docs/commit-timestamp",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-strong-reads",
    "name": "Strong reads",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "The default read mode: it sees every transaction committed before the read began, and all rows returned are consistent with each other, but two strong reads in a row can see different data.",
    "docs": "https://docs.cloud.google.com/spanner/docs/timestamp-bounds",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-exact-read-timestamp",
    "name": "Exact read timestamp",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Reads the database as it was at one explicit timestamp chosen by the caller, which makes the result repeatable; the timestamp cannot be older than the database's earliest version time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/timestamp-bounds",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-exact-staleness-reads",
    "name": "Exact staleness reads",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Reads data as of a fixed length of time before the read starts, such as a chosen number of seconds earlier, which lets a nearby replica serve the read without waiting.",
    "docs": "https://docs.cloud.google.com/spanner/docs/timestamp-bounds",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-bounded-staleness-reads",
    "name": "Bounded staleness reads",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Lets Spanner pick the newest read timestamp within a maximum staleness or after a minimum timestamp that a nearby replica can serve without blocking; allowed only for single-use read-only reads.",
    "docs": "https://docs.cloud.google.com/spanner/docs/timestamp-bounds",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-read-your-writes-in-a-read-write-transaction",
    "name": "Read-your-writes in a read-write transaction",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "Within a read-write transaction, queries and reads see the changes made earlier in that same transaction by DML statements, before the transaction commits.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-select-for-update-exclusive-locking",
    "name": "SELECT FOR UPDATE exclusive locking",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "unavailable",
    "description": "A FOR UPDATE clause on a SELECT takes exclusive locks on the cells it scans until the read-write transaction ends, so other writers wait and contention causes fewer aborts.",
    "docs": "https://docs.cloud.google.com/spanner/docs/use-select-for-update",
    "notes": "Acquires exclusive locks."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-aborted-transaction-retries",
    "name": "ABORTED transaction retries",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "When Spanner aborts a read-write transaction, for example because of lock conflicts, the call fails with ABORTED and the application should run the whole transaction again from the start.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Local error-state matrix has documented limitations."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-failed-transaction-state-validation",
    "name": "Failed-transaction state validation",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "A transaction that has been aborted, committed or rolled back is finished; further reads or writes on it return an error and the work must be run again in a new transaction.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Local error-state matrix has documented limitations."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-serializable-isolation",
    "name": "SERIALIZABLE isolation",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "available",
    "description": "The default isolation level: transactions behave as if run one at a time in commit order, giving external consistency, and conflicting transactions may be aborted and need a retry.",
    "docs": "https://docs.cloud.google.com/spanner/docs/isolation-levels",
    "notes": ""
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-repeatable-read-snapshot-isolation",
    "name": "REPEATABLE_READ snapshot isolation",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "unavailable",
    "description": "Isolation level implemented as snapshot isolation: all reads in a transaction see the snapshot from its start, concurrent writes to the same data succeed only if they do not conflict, and write skew is possible.",
    "docs": "https://docs.cloud.google.com/spanner/docs/isolation-levels",
    "notes": "Snapshot at first read; validates write conflicts at commit."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-disjoint-read-write-transactions-commit-concurrently",
    "name": "Disjoint read-write transactions commit concurrently",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "unavailable",
    "description": "Read-write transactions that touch different rows or key ranges take separate locks and do not block one another, so they can proceed and commit at the same time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Key/range locks instead of whole-database exclusive concurrency."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-wound-wait-lock-waiting",
    "name": "Wound-wait lock waiting",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "unavailable",
    "description": "Deadlock-avoidance scheme for lock conflicts: an older transaction can abort, or wound, a younger one holding a lock it needs, while a younger one waits for an older one, so the oldest always progresses.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Configurable timeout; RPC-deadline handling differs from production."
  },
  {
    "id": "spanner-transactions-timestamps-and-concurrency-deadlock-aborts-one-transaction",
    "name": "Deadlock aborts one transaction",
    "area": "Transactions, timestamps, and concurrency",
    "local": "available",
    "other": "limited",
    "description": "When two transactions each hold a lock the other needs, Spanner aborts one of them with ABORTED so the other can finish, and the aborted transaction must be retried.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Two-key deadlock regression; retries still needed."
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-create-index",
    "name": "CREATE INDEX",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "Creates a secondary index on one or more columns of a table, ordered by the index keys, so queries that filter or sort on them can avoid scanning the whole table.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-drop-index",
    "name": "DROP INDEX",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "Removes a secondary index; queries that used it fall back to other access paths, and the base table data is unaffected.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes#drop-index",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-null-filtered-indexes",
    "name": "NULL_FILTERED indexes",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "GoogleSQL index option that leaves out rows where any index key column is NULL, giving a smaller index; the PostgreSQL dialect expresses it with a WHERE column IS NOT NULL clause.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-googlesql-storing-index-columns",
    "name": "GoogleSQL STORING index columns",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "The STORING clause copies extra non-key columns into the index, so queries that filter on the index keys and select those columns can be answered from the index without reading the base table.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-postgresql-include-index-columns",
    "name": "PostgreSQL INCLUDE index columns",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "The PostgreSQL-dialect INCLUDE clause stores extra non-key columns in the index entries, the counterpart of GoogleSQL STORING, so index-only reads can return them.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-index-backfill",
    "name": "Index backfill",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "When an index is created on a table that already has rows, Spanner populates it with entries for the existing data in the background as part of a long-running schema change.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": "Synchronous local backfill; no production scheduling model."
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-unique-index-validation",
    "name": "Unique-index validation",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "A UNIQUE index requires each combination of indexed key values to appear in only one row; a write that would duplicate one fails, as does creating the index over data that already has duplicates.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-unique-index-conflict-recheck-at-commit",
    "name": "Unique-index conflict recheck at commit",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "limited",
    "description": "Uniqueness is enforced when a transaction commits, so two concurrent transactions that write the same unique index key cannot both succeed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/secondary-indexes",
    "notes": "Prevents duplicates across concurrent buffered writes."
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-foreign-key-validation",
    "name": "Foreign-key validation",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "A foreign key requires each value in the referencing columns to match an existing row of the referenced table, and writes that would leave a dangling reference are rejected.",
    "docs": "https://docs.cloud.google.com/spanner/docs/foreign-keys/overview",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-foreign-key-on-delete-cascade",
    "name": "Foreign-key ON DELETE CASCADE",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "Foreign-key action that automatically deletes the referencing rows when the row they reference is deleted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/foreign-keys/overview",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-foreign-key-on-delete-no-action",
    "name": "Foreign-key ON DELETE NO ACTION",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "The default foreign-key action: deleting a referenced row is rejected while rows still reference it, so the write fails instead of changing the referencing rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/foreign-keys/overview",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-check-constraint-validation",
    "name": "CHECK constraint validation",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "A CHECK constraint states a boolean expression over a row's columns; inserts or updates that would make it false are rejected, and existing rows are validated when the constraint is added.",
    "docs": "https://docs.cloud.google.com/spanner/docs/check-constraint/how-to",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-generated-column-evaluation",
    "name": "Generated-column evaluation",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "The value of a generated column is computed from an expression over other columns of the same row, cannot be written directly, and is recalculated when the columns it uses change.",
    "docs": "https://docs.cloud.google.com/spanner/docs/generated-column/how-to",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-identity-columns",
    "name": "IDENTITY columns",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "Column attribute GENERATED BY DEFAULT AS IDENTITY that fills the column with automatically generated, bit-reversed positive integers when no value is given; an explicit value can still be written.",
    "docs": "https://docs.cloud.google.com/spanner/docs/primary-key-default-value",
    "notes": "Persistence of allocated counters is tracked under sequences."
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-column-default-expressions",
    "name": "Column DEFAULT expressions",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "Gives a column an expression that supplies its value when an INSERT omits the column; the expression cannot reference other columns and may be nondeterministic.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create_table",
    "notes": ""
  },
  {
    "id": "spanner-indexes-generated-values-and-constraints-on-update-column-expressions",
    "name": "ON UPDATE column expressions",
    "area": "Indexes, generated values, and constraints",
    "local": "available",
    "other": "available",
    "description": "Sets a column to its expression value, typically the commit timestamp, automatically whenever a non-key column of the row is updated, giving a last-modified time without extra code.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create_table",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-googlesql-create-change-stream",
    "name": "GoogleSQL CREATE CHANGE STREAM",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Defines a change stream that records inserts, updates and deletes for the whole database or listed tables and columns, with OPTIONS such as retention_period and value_capture_type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-googlesql-alter-change-stream",
    "name": "GoogleSQL ALTER CHANGE STREAM",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Changes an existing change stream: what it watches, or its OPTIONS such as retention_period, value_capture_type and the exclude filters.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-googlesql-drop-change-stream",
    "name": "GoogleSQL DROP CHANGE STREAM",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Deletes a change stream so it stops recording data changes and its READ function disappears; the tables it watched are not affected.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-for-all",
    "name": "Change stream FOR ALL",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Change stream scope that watches every table and column in the database, including tables and columns added later, instead of a named list.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-table-column-lists",
    "name": "Change stream table/column lists",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Change stream scope naming specific tables, optionally with chosen columns: a table alone watches all its columns, while listing columns watches only those plus the primary key.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-old-and-new-values",
    "name": "Change stream OLD_AND_NEW_VALUES",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "The default value capture type: each data change record holds the old and new values of the columns that were modified, plus the primary key, but not unchanged columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-new-values",
    "name": "Change stream NEW_VALUES",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Value capture type that records only the new values of the modified non-key columns and no old values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-new-row",
    "name": "Change stream NEW_ROW",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Value capture type that records the full new row, every watched column whether modified or not, whenever any of them changes, with no old values.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-new-row-and-old-values",
    "name": "Change stream NEW_ROW_AND_OLD_VALUES",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Value capture type that records the full new row, modified and unmodified columns, together with the old values of the modified columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-googlesql-read-stream",
    "name": "GoogleSQL READ_<stream>()",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Function Spanner creates for each change stream, named READ_ followed by the stream name; it takes start_timestamp, end_timestamp, partition_token, heartbeat_milliseconds and read_options, and returns ChangeRecord rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-heartbeat-records",
    "name": "Change-stream heartbeat records",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Records returned when a partition has no data changes, carrying a timestamp that promises all changes at or before it were delivered; their rate is set by heartbeat_milliseconds.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-child-partition-records",
    "name": "Change-stream child-partition records",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Records announcing partitions created when one splits or merges, listing each child's partition token, its parent tokens and the start timestamp from which to query it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-change-stream-resume-token-continuation",
    "name": "Change-stream resume-token continuation",
    "area": "Change streams",
    "local": "available",
    "other": "no-effect",
    "description": "A reader that stops can continue by querying again from the last timestamp it processed with the partition token it was reading, instead of rereading the stream from the start.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Token records timestamp, partition and record index."
  },
  {
    "id": "spanner-change-streams-change-stream-scan-boundary-commit-capture",
    "name": "Change-stream scan-boundary commit capture",
    "area": "Change streams",
    "local": "available",
    "other": "limited",
    "description": "Every committed change matching the stream is returned exactly once in commit-timestamp order, including a change committed exactly at the start or end timestamp of a query range.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Regression covers commit exactly on a scan-window boundary."
  },
  {
    "id": "spanner-change-streams-change-stream-update-mutation-records",
    "name": "Change-stream Update mutation records",
    "area": "Change streams",
    "local": "available",
    "other": "limited",
    "description": "A change made by an Update mutation is recorded as a data change record with mod type UPDATE, whose keys, column types and new values describe the primary key and the modified columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Captures update columns with the correct column/value alignment."
  },
  {
    "id": "spanner-change-streams-change-stream-user-transaction-tags",
    "name": "Change-stream user transaction tags",
    "area": "Change streams",
    "local": "available",
    "other": "no-effect",
    "description": "Each data change record carries the transaction tag of the transaction that made the change, so consumers can tell writes apart by application or purpose, plus a flag for system transactions.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Propagates supplied transaction tags."
  },
  {
    "id": "spanner-change-streams-change-stream-child-query-starting-before-child-start",
    "name": "Change-stream child query starting before child start",
    "area": "Change streams",
    "local": "available",
    "other": "limited",
    "description": "A child partition must be queried with a start timestamp at or after the start_timestamp of the child partition record that announced it; earlier changes come from the parent partition.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Clamps to child start; avoids a stalled child query."
  },
  {
    "id": "spanner-change-streams-exclude-insert-stream-option",
    "name": "exclude_insert stream option",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Change stream option that, when true, leaves INSERT modifications out of the stream so new rows are not reported, while updates and deletes are still recorded; the default is false.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-exclude-update-stream-option",
    "name": "exclude_update stream option",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Change stream option that, when true, leaves UPDATE modifications out of the stream so changes to existing rows are not reported, while inserts and deletes are still recorded; the default is false.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-exclude-delete-stream-option",
    "name": "exclude_delete stream option",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Change stream option that, when true, leaves DELETE modifications out of the stream so removed rows are not reported, while inserts and updates are still recorded; the default is false.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-allow-txn-exclusion-stream-option",
    "name": "allow_txn_exclusion stream option",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Change stream option, false by default, that when true lets the stream honor write transactions marked with exclude_txn_from_change_streams so their changes are not recorded.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-exclude-txn-from-change-streams-request-option",
    "name": "exclude_txn_from_change_streams request option",
    "area": "Change streams",
    "local": "available",
    "other": "available",
    "description": "Boolean option on a write transaction or batch write asking change streams not to record its changes; it only applies to streams with allow_txn_exclusion enabled and is invalid for read-only transactions.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": ""
  },
  {
    "id": "spanner-change-streams-mutable-key-range-partition-start-deduplication",
    "name": "MUTABLE_KEY_RANGE partition-start deduplication",
    "area": "Change streams",
    "local": "available",
    "other": "unavailable",
    "description": "A change stream partition owns an immutable key range for a time range, and readers learn of each new partition once, through a child partition record naming its token and start timestamp.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Emits move-in start record once, not on every scan."
  },
  {
    "id": "spanner-change-streams-change-stream-partition-split",
    "name": "Change-stream partition split",
    "area": "Change streams",
    "local": "limited",
    "other": "limited",
    "description": "When load or size grows, Spanner can split a partition's key range; the old partition ends with child partition records naming the new partitions, each listing the old token as its parent.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Emits partition lifecycle records locally; churn is timer-driven, not production load-driven partition management."
  },
  {
    "id": "spanner-change-streams-change-stream-partition-merge",
    "name": "Change-stream partition merge",
    "area": "Change streams",
    "local": "limited",
    "other": "limited",
    "description": "Spanner can merge partitions covering adjacent key ranges into one new partition; its child partition record lists several parent tokens, and its changes should be processed after all parents are done.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Emits partition lifecycle records locally; churn is timer-driven, not production load-driven partition management."
  },
  {
    "id": "spanner-change-streams-change-stream-partition-move",
    "name": "Change-stream partition move",
    "area": "Change streams",
    "local": "limited",
    "other": "limited",
    "description": "When Spanner changes how a key range is served, the partition for that range is replaced by a new one announced through a child partition record, and readers continue with the new token.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Emits partition lifecycle records locally; churn is timer-driven, not production load-driven partition management."
  },
  {
    "id": "spanner-change-streams-change-stream-retention-cleanup",
    "name": "Change-stream retention cleanup",
    "area": "Change streams",
    "local": "available",
    "other": "unavailable",
    "description": "Change records older than the stream's retention_period, between one and thirty days with seven as the default, are removed, so queries cannot start before the retained window.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams",
    "notes": "Runs on churn cycles; disabled when churning is disabled."
  },
  {
    "id": "spanner-full-text-search-create-search-index",
    "name": "CREATE SEARCH INDEX",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Creates a search index over one or more TOKENLIST columns, with optional stored columns, partitioning, ordering and options such as sort_order_sharding, to speed up full-text, substring and exact-match queries.",
    "docs": "https://docs.cloud.google.com/spanner/docs/full-text-search",
    "notes": ""
  },
  {
    "id": "spanner-full-text-search-drop-search-index",
    "name": "DROP SEARCH INDEX",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Removes a search index; IF EXISTS makes the statement succeed when the index is absent, and the base table with its TOKENLIST columns stays in place.",
    "docs": "https://docs.cloud.google.com/spanner/docs/full-text-search",
    "notes": ""
  },
  {
    "id": "spanner-full-text-search-alter-search-index-add-stored-column",
    "name": "ALTER SEARCH INDEX ADD stored column",
    "area": "Full-text search",
    "local": "available",
    "other": "unavailable",
    "description": "Adds a column to the stored columns of a search index so queries can read it straight from the index; GoogleSQL writes ADD STORED COLUMN and PostgreSQL writes ADD INCLUDE COLUMN.",
    "docs": "https://docs.cloud.google.com/spanner/docs/full-text-search",
    "notes": "Both dialects; validates columns and dependencies."
  },
  {
    "id": "spanner-full-text-search-alter-search-index-drop-stored-column",
    "name": "ALTER SEARCH INDEX DROP stored column",
    "area": "Full-text search",
    "local": "available",
    "other": "unavailable",
    "description": "Removes a column from the stored columns of a search index, so the index no longer holds a copy of it; GoogleSQL writes DROP STORED COLUMN and PostgreSQL writes DROP INCLUDE COLUMN.",
    "docs": "https://docs.cloud.google.com/spanner/docs/full-text-search",
    "notes": "Both dialects; validates columns and dependencies."
  },
  {
    "id": "spanner-full-text-search-postgresql-search-index-ddl-round-trip",
    "name": "PostgreSQL search-index DDL round trip",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "In a PostgreSQL-dialect database, the DDL returned for the database includes CREATE SEARCH INDEX statements in PostgreSQL syntax that can be replayed to rebuild the same indexes.",
    "docs": "https://docs.cloud.google.com/spanner/docs/full-text-search",
    "notes": "GetDatabaseDdl emits replayable CREATE SEARCH INDEX."
  },
  {
    "id": "spanner-full-text-search-search",
    "name": "SEARCH()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE when a full-text query matches a TOKENLIST built by TOKENIZE_FULLTEXT; queries use rquery syntax by default, or the words and words_phrase dialects, and it is used in WHERE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#search_fulltext",
    "notes": ""
  },
  {
    "id": "spanner-full-text-search-search-substring",
    "name": "SEARCH_SUBSTRING()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Returns TRUE when a substring query occurs in a TOKENLIST built by TOKENIZE_SUBSTRING, ignoring case; relative_search_type can require phrase, prefix or suffix placement.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#search_substring",
    "notes": ""
  },
  {
    "id": "spanner-full-text-search-search-ngrams",
    "name": "SEARCH_NGRAMS()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Fuzzy-match predicate that returns TRUE when enough distinct n-grams of the query appear in an n-gram TOKENLIST, set by min_ngrams or min_ngrams_percent, which tolerates misspellings.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#search_ngrams",
    "notes": ""
  },
  {
    "id": "spanner-full-text-search-snippet-documented-json-shape",
    "name": "SNIPPET() documented JSON shape",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "Returns JSON holding a list of snippets, each with the snippet text, the begin and end positions of matched terms to highlight, and the source range of the original text.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#snippet",
    "notes": "begin/end highlight strings plus source bounds."
  },
  {
    "id": "spanner-full-text-search-search-over-sql-null-token-lists",
    "name": "Search over SQL NULL token lists",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "SEARCH and the related search functions return NULL when the TOKENLIST or the query is NULL, so such rows never match a search predicate in WHERE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "No crash or spurious match."
  },
  {
    "id": "spanner-full-text-search-unicode-rquery-terms",
    "name": "Unicode RQUERY terms",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "Search queries in the default rquery syntax may contain terms in any language or Unicode script, and are tokenized the same way as the indexed text.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Parses UTF-8 terms."
  },
  {
    "id": "spanner-full-text-search-tokenize-fulltext",
    "name": "TOKENIZE_FULLTEXT()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Builds a full-text TOKENLIST from a string or string array by splitting it into lowercase word tokens, with options such as language_tag, content_type, token_category and remove_diacritics.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#tokenize_fulltext",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-tokenize-substring",
    "name": "TOKENIZE_SUBSTRING()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Builds a substring TOKENLIST by lowercasing each word and generating n-grams between ngram_size_min and ngram_size_max, so SEARCH_SUBSTRING can find partial words; also offers relative_search_types.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#tokenize_substring",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-tokenize-ngrams",
    "name": "TOKENIZE_NGRAMS()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Builds an n-gram TOKENLIST from the whole input without splitting it into words, producing all n-grams of the configured sizes for fuzzy SEARCH_NGRAMS matching and regular-expression acceleration.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#tokenize_ngrams",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-tokenize-number",
    "name": "TOKENIZE_NUMBER()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Builds a numeric TOKENLIST from integer or floating-point values, using an algorithm such as logtree, prefixtree or floatingpoint, to speed up equality and range comparisons.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#tokenize_number",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-tokenize-bool",
    "name": "TOKENIZE_BOOL()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Builds a TOKENLIST from a BOOL or array of BOOL, producing the token y for TRUE and n for FALSE, to speed up boolean equality predicates.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/json_functions#bool_for_json",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-tokenize-exact-match",
    "name": "TOKENIZE_EXACT_MATCH()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Exact-match tokenization that turns a whole value into a single verbatim token, so equality lookups can use a search index; no case folding or word splitting is applied.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-token",
    "name": "TOKEN()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Constructs an exact-match TOKENLIST from a bytes or string value, or an array of them, tokenized verbatim to accelerate equality and ARRAY_INCLUDES predicates; NULL input gives NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#token",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-tokenlist-concat",
    "name": "TOKENLIST_CONCAT()",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Combines several TOKENLIST values, all produced by TOKENIZE_FULLTEXT or all by TOKENIZE_SUBSTRING, into one so a single search covers several columns; a NULL element counts as an empty list.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#tokenlist_concat",
    "notes": "Supported local tokenization; parameter-specific effects have separate rows."
  },
  {
    "id": "spanner-full-text-search-html-full-text-tokenization",
    "name": "HTML full-text tokenization",
    "area": "Full-text search",
    "local": "available",
    "other": "unavailable",
    "description": "Setting content_type to text/html in TOKENIZE_FULLTEXT removes HTML tags, decodes escaped entities, and assigns each token a category by prominence, such as title or large text.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "HTML 4 entities; excludes script/style content."
  },
  {
    "id": "spanner-full-text-search-french-language-tag-tokenization",
    "name": "French language_tag tokenization",
    "area": "Full-text search",
    "local": "available",
    "other": "no-effect",
    "description": "Passing the language tag fr to TOKENIZE_FULLTEXT applies French word-splitting rules instead of automatic language detection, which changes how some French phrases are split into tokens.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Documented French behavior; not every language independently verified."
  },
  {
    "id": "spanner-full-text-search-short-tokens-only-for-anchors-effect",
    "name": "short_tokens_only_for_anchors effect",
    "area": "Full-text search",
    "local": "available",
    "other": "no-effect",
    "description": "TOKENIZE_SUBSTRING option that, when TRUE, omits short n-grams below ngram_size_max except those needed for prefix and suffix relative searches, shrinking the index; the default is FALSE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Applies short-token anchoring behavior."
  },
  {
    "id": "spanner-full-text-search-mixed-remove-diacritics-tokenlist-concat",
    "name": "Mixed remove_diacritics TOKENLIST_CONCAT",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "TOKENLIST_CONCAT merges token lists from one tokenizer function into a single list; each source list can use remove_diacritics, which strips accents from text and queries so accented and plain forms match.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Handles mixed token-list settings."
  },
  {
    "id": "spanner-full-text-search-postgresql-spanner-tokenize-substring-relative-search-types",
    "name": "PostgreSQL spanner.tokenize_substring relative_search_types",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "Option of the PostgreSQL spanner.tokenize_substring function: an array of relative search types such as phrase, value_prefix, value_suffix, word_prefix, word_suffix or all, for which extra anchor tokens are generated.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Avoids the prior crash and applies supported relative options."
  },
  {
    "id": "spanner-full-text-search-debug-tokenlist-output-format",
    "name": "DEBUG_TOKENLIST() output format",
    "area": "Full-text search",
    "local": "available",
    "other": "limited",
    "description": "Returns a human-readable string of the tokens in a TOKENLIST, showing token text, attributes and positions; meant for debugging, and its format may change without notice.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#debug_tokenlist",
    "notes": "Matches documented examples."
  },
  {
    "id": "spanner-full-text-search-score-local-score",
    "name": "SCORE() local score",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Calculates a relevance score for a full-text TOKENLIST against a search query, higher meaning a stronger match; it returns FLOAT64, needs SEARCH in the same query, and is typically used in ORDER BY.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#score",
    "notes": "Deterministic local relevance, not production relevance."
  },
  {
    "id": "spanner-full-text-search-score-ngrams-local-score",
    "name": "SCORE_NGRAMS() local score",
    "area": "Full-text search",
    "local": "available",
    "other": "available",
    "description": "Calculates a fuzzy-match relevance score for an n-gram TOKENLIST against a query using trigram overlap, higher meaning more similar; it returns 0 when the TOKENLIST or query is NULL.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions#score_ngrams",
    "notes": "Deterministic local n-gram score."
  },
  {
    "id": "spanner-full-text-search-score-token-category-weights",
    "name": "SCORE token_category_weights",
    "area": "Full-text search",
    "local": "available",
    "other": "no-effect",
    "description": "Option in the SCORE options JSON that sets a multiplier for each HTML token category (small, medium, large and title), so matches in prominent text such as titles can count for more.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "Applies provided category weights."
  },
  {
    "id": "spanner-full-text-search-score-ngrams-array-aggregator",
    "name": "SCORE_NGRAMS array_aggregator",
    "area": "Full-text search",
    "local": "available",
    "other": "unavailable",
    "description": "SCORE_NGRAMS argument for TOKENLISTs over ARRAY columns: flatten, the default, scores the array as one joined string, while max_element scores each element separately and returns the highest.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/search_functions",
    "notes": "GoogleSQL aggregation option."
  },
  {
    "id": "spanner-vector-search-googlesql-cosine-distance",
    "name": "GoogleSQL COSINE_DISTANCE()",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "Returns the cosine distance between two equal-length vectors given as arrays of FLOAT32 or FLOAT64, one minus their cosine similarity, so smaller means more alike; zero vectors raise an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#cosine_distance",
    "notes": ""
  },
  {
    "id": "spanner-vector-search-googlesql-dot-product",
    "name": "GoogleSQL DOT_PRODUCT()",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "Returns the dot product of two equal-length vectors given as arrays of INT64, FLOAT32 or FLOAT64, the sum of the products of corresponding elements, as FLOAT64.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#dot_product",
    "notes": ""
  },
  {
    "id": "spanner-vector-search-googlesql-euclidean-distance",
    "name": "GoogleSQL EUCLIDEAN_DISTANCE()",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "Returns the straight-line (L2) distance between two equal-length vectors given as arrays of FLOAT32 or FLOAT64, as FLOAT64; zero means the vectors are identical.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#euclidean_distance",
    "notes": ""
  },
  {
    "id": "spanner-vector-search-postgresql-spanner-cosine-distance",
    "name": "PostgreSQL spanner.cosine_distance()",
    "area": "Vector search",
    "local": "available",
    "other": "limited",
    "description": "PostgreSQL-dialect function that returns the cosine distance between two float4 or float8 arrays of the same length, used to rank rows by similarity in exact nearest-neighbor queries.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-k-nearest-neighbors",
    "notes": "float4[]/float8[] signatures; DOT_PRODUCT also int8[]."
  },
  {
    "id": "spanner-vector-search-postgresql-spanner-euclidean-distance",
    "name": "PostgreSQL spanner.euclidean_distance()",
    "area": "Vector search",
    "local": "available",
    "other": "limited",
    "description": "PostgreSQL-dialect function that returns the straight-line (Euclidean) distance between two float4 or float8 arrays of the same length, used to find the closest vectors.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-k-nearest-neighbors",
    "notes": "float4[]/float8[] signatures; DOT_PRODUCT also int8[]."
  },
  {
    "id": "spanner-vector-search-postgresql-spanner-dot-product",
    "name": "PostgreSQL spanner.dot_product()",
    "area": "Vector search",
    "local": "available",
    "other": "limited",
    "description": "PostgreSQL-dialect function that returns the dot product of two equal-length numeric arrays, the sum of the products of corresponding elements, usable to rank vectors by similarity.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-k-nearest-neighbors",
    "notes": "float4[]/float8[] signatures; DOT_PRODUCT also int8[]."
  },
  {
    "id": "spanner-vector-search-googlesql-approx-cosine-distance",
    "name": "GoogleSQL APPROX_COSINE_DISTANCE()",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "Approximates the cosine distance between an embedding column and a constant query vector using a vector index; it must be the only ORDER BY key, followed by LIMIT, and an options argument tunes the search.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#approx_cosine_distance",
    "notes": "Returns exact nearest neighbors; no ANN recall/latency simulation."
  },
  {
    "id": "spanner-vector-search-googlesql-approx-dot-product",
    "name": "GoogleSQL APPROX_DOT_PRODUCT()",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "Approximates the dot product between an embedding column and a constant query vector using a vector index, for ORDER BY with LIMIT queries that find approximate nearest neighbors.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#approx_dot_product",
    "notes": "Returns exact nearest neighbors; no ANN recall/latency simulation."
  },
  {
    "id": "spanner-vector-search-googlesql-approx-euclidean-distance",
    "name": "GoogleSQL APPROX_EUCLIDEAN_DISTANCE()",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "Approximates the Euclidean distance between an embedding column and a constant query vector using a vector index, trading some recall for lower latency than the exact EUCLIDEAN_DISTANCE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/mathematical_functions#approx_euclidean_distance",
    "notes": "Returns exact nearest neighbors; no ANN recall/latency simulation."
  },
  {
    "id": "spanner-vector-search-googlesql-create-vector-index",
    "name": "GoogleSQL CREATE VECTOR INDEX",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "DDL statement that builds an approximate-nearest-neighbor index on an array embedding column; the distance_type option (COSINE, DOT_PRODUCT or EUCLIDEAN) is required and STORING adds columns for filtering.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "Validates index options; nearest-neighbor execution remains exact."
  },
  {
    "id": "spanner-vector-search-googlesql-alter-vector-index",
    "name": "GoogleSQL ALTER VECTOR INDEX",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "DDL statement that changes an existing vector index by adding or dropping a stored column, setting options such as disable_search, or rebuilding the index in place to refresh its tree.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "Local validated metadata."
  },
  {
    "id": "spanner-vector-search-googlesql-drop-vector-index",
    "name": "GoogleSQL DROP VECTOR INDEX",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "DDL statement that deletes a vector index by name, leaving the table and its embedding column and rows unchanged.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "Local validated metadata."
  },
  {
    "id": "spanner-vector-search-postgresql-create-index-using-scann",
    "name": "PostgreSQL CREATE INDEX USING ScaNN",
    "area": "Vector search",
    "local": "available",
    "other": "unavailable",
    "description": "PostgreSQL-dialect vector index: CREATE INDEX with USING scann on a float4 array column, INCLUDE for stored columns and WITH (distance_type = ...) to choose the distance metric.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "DDL accepted and printed back in replayable form."
  },
  {
    "id": "spanner-vector-search-postgresql-spanner-approx-cosine-distance",
    "name": "PostgreSQL spanner.approx_cosine_distance()",
    "area": "Vector search",
    "local": "available",
    "other": "unavailable",
    "description": "PostgreSQL-dialect function that approximates the cosine distance between an embedding column and a constant vector through a ScaNN vector index, with a jsonb options argument to tune the search.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "Exact nearest neighbors; not a ScaNN ANN engine."
  },
  {
    "id": "spanner-vector-search-postgresql-spanner-approx-euclidean-distance",
    "name": "PostgreSQL spanner.approx_euclidean_distance()",
    "area": "Vector search",
    "local": "available",
    "other": "unavailable",
    "description": "PostgreSQL-dialect function that approximates the Euclidean distance between an embedding column and a constant vector through a vector index, used as the sole ORDER BY key with LIMIT.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "Exact nearest neighbors; not a ScaNN ANN engine."
  },
  {
    "id": "spanner-vector-search-postgresql-spanner-approx-dot-product",
    "name": "PostgreSQL spanner.approx_dot_product()",
    "area": "Vector search",
    "local": "available",
    "other": "unavailable",
    "description": "PostgreSQL-dialect function that approximates the dot product between an embedding column and a constant vector through a vector index, for approximate nearest-neighbor queries with LIMIT.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-approximate-nearest-neighbors",
    "notes": "Exact nearest neighbors; not a ScaNN ANN engine."
  },
  {
    "id": "spanner-vector-search-array-float32-vector-length-annotation",
    "name": "ARRAY<FLOAT32> vector_length annotation",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "The vector_length annotation fixes the number of dimensions of a FLOAT32 array column used for embeddings; PostgreSQL writes it as a float4 array with VECTOR LENGTH after the type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-k-nearest-neighbors",
    "notes": "Local validation; no dedicated vector storage engine."
  },
  {
    "id": "spanner-vector-search-array-float64-vector-length-annotation",
    "name": "ARRAY<FLOAT64> vector_length annotation",
    "area": "Vector search",
    "local": "available",
    "other": "available",
    "description": "The vector_length annotation fixes the number of dimensions of a FLOAT64 array column used for double-precision embeddings, at twice the storage per element of FLOAT32; PostgreSQL uses VECTOR LENGTH.",
    "docs": "https://docs.cloud.google.com/spanner/docs/find-k-nearest-neighbors",
    "notes": "Local validation; no dedicated vector storage engine."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-match-queries",
    "name": "GRAPH MATCH queries",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "GQL query that starts with GRAPH and a property graph name, uses MATCH to find nodes and edges fitting a pattern, and ends with RETURN, which produces the result rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-query-statements",
    "notes": "Shared reference evaluation; production limitations remain."
  },
  {
    "id": "spanner-spanner-graph-and-gql-gql-path-queries",
    "name": "GQL path queries",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "GQL MATCH patterns that bind a whole path to a variable, often with variable-length hops, so path functions such as PATH_LENGTH, NODES and EDGES can inspect the matched paths.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-query-statements",
    "notes": "Shared reference evaluation; production limitations remain."
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-destination-node-id",
    "name": "GoogleSQL DESTINATION_NODE_ID()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph edge and returns, as a STRING, the unique identifier of the node the edge points to; the identifier is only meaningful within the query that produced it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#destination_node_id",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-edges",
    "name": "GoogleSQL EDGES()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns its edges as an array of graph elements, in the order they appear along the path.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#edges",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-element-definition-name",
    "name": "GoogleSQL ELEMENT_DEFINITION_NAME()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "unavailable",
    "description": "Returns, as a STRING, the name of the node table or edge table in the property graph definition that a given node or edge comes from.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#element_definition_name",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-element-id",
    "name": "GoogleSQL ELEMENT_ID()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Returns a STRING that uniquely identifies a graph node or edge; the identifier is valid only within the query that produced it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#element_id",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-is-acyclic",
    "name": "GoogleSQL IS_ACYCLIC()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns TRUE if no node appears in it more than once, and FALSE if any node repeats.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#is_acyclic",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-is-simple",
    "name": "GoogleSQL IS_SIMPLE()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns TRUE if no node repeats, except that the first and last node may be the same, so a closed loop still counts as simple.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#is_simple",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-is-trail",
    "name": "GoogleSQL IS_TRAIL()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns TRUE if no edge appears in it more than once, even if nodes repeat, and FALSE if any edge is traversed twice.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#is_trail",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-labels",
    "name": "GoogleSQL LABELS()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Returns the labels of a graph node or edge as an array of STRING, keeping the original capitalization of each label.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#labels",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-nodes",
    "name": "GoogleSQL NODES()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns its nodes as an array of graph elements, in the order they appear along the path.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#nodes",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-path-first",
    "name": "GoogleSQL PATH_FIRST()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns its first node, the node where the path starts.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#path_first",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-path-last",
    "name": "GoogleSQL PATH_LAST()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns its last node, the node where the path ends.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#path_last",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-path-length",
    "name": "GoogleSQL PATH_LENGTH()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph path and returns the number of edges in it as INT64, counting edges rather than nodes.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#path_length",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-property-names",
    "name": "GoogleSQL PROPERTY_NAMES()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Returns the names of the properties of a graph node or edge as an array of STRING, keeping the original capitalization of each name.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#property_names",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-googlesql-source-node-id",
    "name": "GoogleSQL SOURCE_NODE_ID()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Takes a graph edge and returns, as a STRING, the unique identifier of the node the edge starts from; the identifier is only meaningful within the query that produced it.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-sql-functions#source_node_id",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-create-property-graph",
    "name": "CREATE PROPERTY GRAPH",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Defines a property graph over existing tables, declaring node tables, edge tables with source and destination keys, and the labels and properties that graph queries can match.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-schema-statements",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-create-or-replace-property-graph",
    "name": "CREATE OR REPLACE PROPERTY GRAPH",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Creates a property graph, or replaces the definition of an existing graph with the same name in one statement; it cannot be combined with IF NOT EXISTS.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-schema-statements",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-drop-property-graph",
    "name": "DROP PROPERTY GRAPH",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Removes a property graph definition from the schema; with IF EXISTS, naming a graph that does not exist is not an error.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/graph-schema-statements",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-node-table-metadata",
    "name": "Graph node-table metadata",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Schema metadata listing each node table of a property graph with its base table, key columns, labels and properties, read from the JSON column of INFORMATION_SCHEMA.PROPERTY_GRAPHS.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-edge-table-metadata",
    "name": "Graph edge-table metadata",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Schema metadata listing each edge table of a property graph with its base table, key columns, labels, properties and the source and destination node tables it connects.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-label-property-metadata",
    "name": "Graph label/property metadata",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "available",
    "description": "Schema metadata naming each label of a property graph with the properties it exposes, plus every property declaration with its name and value type.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema",
    "notes": ""
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-pagerank",
    "name": "Graph algorithm PageRank",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores each node by importance, treating a node as more important when many important nodes link to it; takes a damping factor and iteration limit and returns a node and score per row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#pagerank",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-betweennesscentrality",
    "name": "Graph algorithm BetweennessCentrality",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores how often a node lies on shortest paths between other nodes, so bridge nodes score high; an optional num_source_nodes samples sources instead of using every node.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#betweenness-centrality",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-closenesscentrality",
    "name": "Graph algorithm ClosenessCentrality",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores how close a node is to all other nodes; has an EXACT mode, a sampled HYBRID mode, and an optional Wasserman-Faust normalization for graphs that are not fully connected.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#closeness-centrality",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-weaklyconnectedcomponents",
    "name": "Graph algorithm WeaklyConnectedComponents",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Partitions nodes into disjoint sets in which every node can reach every other node when edge direction is ignored, returning each node with its component number as cluster.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#weakly-connected-components",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-modularityclustering",
    "name": "Graph algorithm ModularityClustering",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Partitions the graph into clusters by optimizing modularity, a measure of how dense connections are inside clusters; a resolution parameter tunes granularity and each node gets a cluster number.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#modularity-clustering",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-correlationclustering",
    "name": "Graph algorithm CorrelationClustering",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Groups nodes by pairwise similarity, keeping similar nodes together and dissimilar nodes apart; it requires a resolution parameter and returns each node with its cluster number.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#correlation-clustering",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-labelpropagation",
    "name": "Graph algorithm LabelPropagation",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Assigns clusters by repeatedly letting each node adopt the label held by most of its neighbors, optionally starting from labels stored in a node property, for a limited number of iterations.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#label-propagation",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-cliquefinding",
    "name": "Graph algorithm CliqueFinding",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Finds possibly overlapping dense communities so that every clique, a group of nodes all connected to each other, lies in at least one cluster; a node can appear in several rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#clique-finding",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-jaccardsimilarity",
    "name": "Graph algorithm JaccardSimilarity",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores pairs of source and target nodes by the ratio of the neighbors they share to all neighbors either has, returning source node, target node and a similarity value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#similarity",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-cosinesimilarity",
    "name": "Graph algorithm CosineSimilarity",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores pairs of source and target nodes from the edge weights toward their common neighbors, returning source node, target node and a similarity value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#similarity",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-commonneighborssimilarity",
    "name": "Graph algorithm CommonNeighborsSimilarity",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores pairs of source and target nodes by the number of neighbors the two nodes have in common, returning source node, target node and a similarity value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#similarity",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-totalneighborssimilarity",
    "name": "Graph algorithm TotalNeighborsSimilarity",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Scores pairs of source and target nodes by the number of neighbors that at least one of the two nodes has, returning source node, target node and a similarity value.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#similarity",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-shortestpath",
    "name": "Graph algorithm ShortestPath",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Finds shortest paths from a set of source nodes to a set of target nodes, returning each pair with the path as a GRAPH_PATH value and its cost.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#shortest-path",
    "notes": "Computes local results; methods may be emulator-defined; Google's emulator returns empty results."
  },
  {
    "id": "spanner-spanner-graph-and-gql-personalized-pagerank",
    "name": "Personalized PageRank",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "PageRank run with source_nodes given, so scores measure importance relative to those starting nodes rather than the whole graph; each row holds a node and its score.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/algorithms#pagerank",
    "notes": "Uses supplied personalization inputs."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-algorithm-call-per",
    "name": "Graph algorithm CALL PER ()",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Runs a graph algorithm on the logical subgraph made of the nodes and edges selected by the preceding MATCH rows, unlike a plain CALL, which runs on the whole graph.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/run-algorithms",
    "notes": "Consumes preceding query rows."
  },
  {
    "id": "spanner-spanner-graph-and-gql-graph-export-data-to-cloud-spanner-tables",
    "name": "Graph EXPORT DATA to CLOUD_SPANNER tables",
    "area": "Spanner Graph and GQL",
    "local": "available",
    "other": "no-effect",
    "description": "Writes algorithm results into an existing table of the same instance, using write_mode update_ignore_all or upsert_ignore_all; rows that violate constraints are skipped.",
    "docs": "https://docs.cloud.google.com/spanner/docs/graph/run-algorithms",
    "notes": "Writes computed rows; violating rows may be skipped."
  },
  {
    "id": "spanner-ml-and-external-integrations-create-model-remote",
    "name": "CREATE MODEL REMOTE",
    "area": "ML and external integrations",
    "local": "available",
    "other": "available",
    "description": "Registers a reference to a model endpoint on Vertex AI as a schema object, with optional INPUT and OUTPUT column lists and an endpoint option; the model itself is not copied into the database.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create-model",
    "notes": ""
  },
  {
    "id": "spanner-ml-and-external-integrations-create-or-replace-model",
    "name": "CREATE OR REPLACE MODEL",
    "area": "ML and external integrations",
    "local": "available",
    "other": "available",
    "description": "Creates a remote model definition, or replaces an existing one with the same name, for example to point it at a different endpoint or change its input and output columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create-model",
    "notes": ""
  },
  {
    "id": "spanner-ml-and-external-integrations-alter-model-set-options",
    "name": "ALTER MODEL SET OPTIONS",
    "area": "ML and external integrations",
    "local": "available",
    "other": "available",
    "description": "Changes options of an existing model definition, such as endpoint, endpoints for failover, and default_batch_size; setting an option to null restores its default.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create-model",
    "notes": ""
  },
  {
    "id": "spanner-ml-and-external-integrations-drop-model",
    "name": "DROP MODEL",
    "area": "ML and external integrations",
    "local": "available",
    "other": "available",
    "description": "Removes a model definition from the database; queries that reference it then fail, while the Vertex AI endpoint itself is unaffected.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#create-model",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-tables",
    "name": "INFORMATION_SCHEMA.TABLES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the tables, views and synonyms of the database with schema, name and type, and for interleaved tables the parent table and ON DELETE action.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#tables",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-columns",
    "name": "INFORMATION_SCHEMA.COLUMNS",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the columns of every table and view with name, ordinal position, Spanner type, nullability and default, plus flags for generated, hidden and stored columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#columns",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-indexes",
    "name": "INFORMATION_SCHEMA.INDEXES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the indexes of the database, including primary keys, with table, name, type, uniqueness, whether NULL entries are filtered, parent table when interleaved, and index state.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#indexes",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-views",
    "name": "INFORMATION_SCHEMA.VIEWS",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the views of the database with their defining SQL text and whether each view runs with invoker rights or definer rights.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#views",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-schemata",
    "name": "INFORMATION_SCHEMA.SCHEMATA",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the schemas of the database, including INFORMATION_SCHEMA and any named schemas, with a PROTO_BUNDLE column that is NULL when the database has no proto bundle.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#schemata",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-sequences",
    "name": "INFORMATION_SCHEMA.SEQUENCES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the sequences defined in the database with their catalog, schema, name and value type, which is INT64.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#sequences",
    "notes": ""
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-role-based-object-filtering",
    "name": "INFORMATION_SCHEMA role-based object filtering",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Limits INFORMATION_SCHEMA rows to objects the current database role holds privileges on; principals with database-level IAM permissions or the spanner_info_reader role see all rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema",
    "notes": "Filters metadata by creator_role."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-query-stats-top-minute",
    "name": "SPANNER_SYS.QUERY_STATS_TOP_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-query statistics for the highest-CPU queries in each one-minute interval, grouped by query text or request tag, with execution count, latency, CPU time and rows scanned.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/query-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-query-stats-top-10minute",
    "name": "SPANNER_SYS.QUERY_STATS_TOP_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-query statistics for the highest-CPU queries in each ten-minute interval, with the same columns as the minute table but kept for days rather than hours.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/query-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-query-stats-top-hour",
    "name": "SPANNER_SYS.QUERY_STATS_TOP_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-query statistics for the highest-CPU queries in each one-hour interval, retained longest of the three TOP tables, for spotting expensive query patterns over weeks.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/query-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-query-stats-total-minute",
    "name": "SPANNER_SYS.QUERY_STATS_TOTAL_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-minute interval combining all queries run on the database, including failed and canceled ones, with total counts, latency and CPU but no query text.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/query-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-query-stats-total-10minute",
    "name": "SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per ten-minute interval combining every query on the database, including those missing from the TOP table, with execution counts, failures, latency and CPU; kept for about four days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/query-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-query-stats-total-hour",
    "name": "SPANNER_SYS.QUERY_STATS_TOTAL_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-hour interval combining every query on the database, with execution count, failures, latency and CPU; the longest-retained database-wide query summary.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/query-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-read-stats-top-minute",
    "name": "SPANNER_SYS.READ_STATS_TOP_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics for the highest-CPU read shapes, meaning sets of columns read, in each one-minute interval, with execution count, average rows, bytes, CPU and locking delay.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/read-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-read-stats-top-10minute",
    "name": "SPANNER_SYS.READ_STATS_TOP_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics for the highest-CPU read shapes in each ten-minute interval, grouped by columns read or request tag, with READ_TYPE telling plain reads from partitioned reads.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/read-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-read-stats-top-hour",
    "name": "SPANNER_SYS.READ_STATS_TOP_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics for the highest-CPU read shapes in each one-hour interval, kept for about a month, for finding read patterns that drive CPU use over a long period.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/read-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-read-stats-total-minute",
    "name": "SPANNER_SYS.READ_STATS_TOTAL_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-minute interval aggregating all reads on the database, including ones the TOP table dropped, with execution count, rows, bytes, CPU, locking delay and client wait.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/read-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-read-stats-total-10minute",
    "name": "SPANNER_SYS.READ_STATS_TOTAL_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per ten-minute interval aggregating every read on the database, with no per-shape columns such as READ_COLUMNS, REQUEST_TAG or READ_TYPE.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/read-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-read-stats-total-hour",
    "name": "SPANNER_SYS.READ_STATS_TOTAL_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-hour interval aggregating every read on the database, retained longest of the TOTAL read tables, for long-range trends in read volume and CPU.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/read-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-txn-stats-top-minute",
    "name": "SPANNER_SYS.TXN_STATS_TOP_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics for the most resource-consuming transaction shapes in each one-minute interval, identified by FPRINT, with columns read and written, aborts, participants and latencies.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/transaction-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-txn-stats-top-10minute",
    "name": "SPANNER_SYS.TXN_STATS_TOP_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics for the most resource-consuming transaction shapes in each ten-minute interval, one row per shape, with retry and abort counts, average latencies and bytes written.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/transaction-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-txn-stats-top-hour",
    "name": "SPANNER_SYS.TXN_STATS_TOP_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics for the most resource-consuming transaction shapes in each one-hour interval, kept for about a month, for spotting slow or abort-prone transaction patterns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/transaction-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-txn-stats-total-minute",
    "name": "SPANNER_SYS.TXN_STATS_TOTAL_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-minute interval aggregating every transaction on the database, with attempt, abort and retry counts, participants, latencies and bytes written, but no per-shape columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/transaction-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-txn-stats-total-10minute",
    "name": "SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per ten-minute interval aggregating every transaction on the database, including transactions absent from the TOP table, with attempt, abort and latency figures; kept for about four days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/transaction-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-txn-stats-total-hour",
    "name": "SPANNER_SYS.TXN_STATS_TOTAL_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-hour interval aggregating every transaction on the database, the longest-retained database-wide summary of transaction attempts, aborts and latencies.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/transaction-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-lock-stats-top-minute",
    "name": "SPANNER_SYS.LOCK_STATS_TOP_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Row key ranges with the highest cumulative lock wait time in each one-minute interval, with the wait in seconds and sampled lock requests naming column, lock mode and transaction tag.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/lock-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-lock-stats-top-10minute",
    "name": "SPANNER_SYS.LOCK_STATS_TOP_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Row key ranges with the highest cumulative lock wait time in each ten-minute interval, showing where lock conflicts occurred, with sampled lock requests; kept for days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/lock-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-lock-stats-top-hour",
    "name": "SPANNER_SYS.LOCK_STATS_TOP_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Row key ranges with the highest cumulative lock wait time in each one-hour interval, kept for about a month, for tracing recurring hotspots and lock contention.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/lock-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-lock-stats-total-minute",
    "name": "SPANNER_SYS.LOCK_STATS_TOTAL_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-minute interval with TOTAL_LOCK_WAIT_SECONDS, the lock wait time of the whole database, including waits that the TOP table does not list.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/lock-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-lock-stats-total-10minute",
    "name": "SPANNER_SYS.LOCK_STATS_TOTAL_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per ten-minute interval with the total lock wait time of the whole database in seconds, which can be compared with the waits listed in the TOP rows; kept for several days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/lock-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-lock-stats-total-hour",
    "name": "SPANNER_SYS.LOCK_STATS_TOTAL_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "One row per one-hour interval with the total lock wait time of the whole database in seconds, kept for about a month to show long-range contention trends.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/lock-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-table-operations-stats-hour",
    "name": "SPANNER_SYS.TABLE_OPERATIONS_STATS_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-table and per-index counts of read queries, writes and deletes in each one-hour interval, counting each operation once whatever the row count; kept for about a month.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/table-operations-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-column-operations-stats-hour",
    "name": "SPANNER_SYS.COLUMN_OPERATIONS_STATS_HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-column counts of reads, queries reading the column and writes in each one-hour interval, plus a flag showing when collection was capped by memory pressure.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/column-operations-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-table-sizes-stats-1hour",
    "name": "SPANNER_SYS.TABLE_SIZES_STATS_1HOUR",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Size in bytes of each table and index, averaged per clock hour, with total, SSD and HDD bytes; meant for size trends over time, not real-time monitoring.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/table-sizes-statistics",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-oldest-active-queries",
    "name": "SPANNER_SYS.OLDEST_ACTIVE_QUERIES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Currently running queries sorted from the oldest start time, with query text, session ID and a query ID that CALL cancel_query can use to cancel it; change stream queries are left out.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/oldest-active-queries",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-active-queries-summary",
    "name": "SPANNER_SYS.ACTIVE_QUERIES_SUMMARY",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Summary of running queries: the total active count, an upper bound on the oldest start time, and counts of queries older than one, ten and one hundred seconds.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/oldest-active-queries#active-queries-summary",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-active-partitioned-dmls",
    "name": "SPANNER_SYS.ACTIVE_PARTITIONED_DMLS",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Partitioned DML statements currently running, with statement text, session, partitions completed out of total, a progress fraction, rows processed and last update time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/active-partitioned-dmls#active_partitioned_dmls",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-row-deletion-policies",
    "name": "SPANNER_SYS.ROW_DELETION_POLICIES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "TTL status per table with a row deletion policy: a processed watermark, the count of rows the policy could not delete, and the oldest timestamp among those rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/ttl",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-user-split-points",
    "name": "SPANNER_SYS.USER_SPLIT_POINTS",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the user-created split points of a database, which pre-split tables or indexes ahead of expected traffic, with table, index, split key, initiator and expiration time.",
    "docs": "https://docs.cloud.google.com/spanner/docs/create-manage-split-points",
    "notes": "Measured local values or stored metadata; physical fields may be zero."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-table-operations-stats-minute",
    "name": "SPANNER_SYS.TABLE_OPERATIONS_STATS_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-table and per-index counts of read queries, writes and deletes in each one-minute interval, counting each operation once whatever the row count; kept for about six hours.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/table-operations-statistics",
    "notes": "Measured local operation counts for the named interval."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-table-operations-stats-10minute",
    "name": "SPANNER_SYS.TABLE_OPERATIONS_STATS_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-table and per-index counts of read queries, writes and deletes in each ten-minute interval, counting each operation once whatever the row count; kept for about four days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/table-operations-statistics",
    "notes": "Measured local operation counts for the named interval."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-column-operations-stats-minute",
    "name": "SPANNER_SYS.COLUMN_OPERATIONS_STATS_MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-column counts of reads, queries reading the column and writes in each one-minute interval, the finest-grained column usage view, kept for about six hours.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/column-operations-statistics",
    "notes": "Measured local operation counts for the named interval."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-column-operations-stats-10minute",
    "name": "SPANNER_SYS.COLUMN_OPERATIONS_STATS_10MINUTE",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Per-column counts of reads, queries reading the column and writes in each ten-minute interval, kept for about four days.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection/column-operations-statistics",
    "notes": "Measured local operation counts for the named interval."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-spanner-sys-supported-optimizer-versions",
    "name": "SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "Lists the query optimizer versions a database can select, with each version's release date and whether it is the current default version.",
    "docs": "https://docs.cloud.google.com/spanner/docs/query-optimizer/version-statistics",
    "notes": "Static supported-version catalog."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-roles",
    "name": "INFORMATION_SCHEMA.ROLES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the database roles of the database, including system roles, and flags which of them are system roles.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#roles",
    "notes": "Reports persisted role/grant metadata in the supported local scope."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-role-grantees",
    "name": "INFORMATION_SCHEMA.ROLE_GRANTEES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Lists explicit role memberships, showing which role each grantee belongs to; implicit membership in the public role is left out.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#role-grantees",
    "notes": "Reports persisted role/grant metadata in the supported local scope."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-table-privileges",
    "name": "INFORMATION_SCHEMA.TABLE_PRIVILEGES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Lists table-level SELECT, INSERT, UPDATE and DELETE privileges granted to database roles, including public, with table name and grantee.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#table-privileges",
    "notes": "Reports persisted role/grant metadata in the supported local scope."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-column-privileges",
    "name": "INFORMATION_SCHEMA.COLUMN_PRIVILEGES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Lists column-level SELECT, INSERT and UPDATE privileges granted to database roles, including public, with table, column, privilege type and grantee.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#column-privileges",
    "notes": "Reports persisted role/grant metadata in the supported local scope."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-information-schema-routine-privileges",
    "name": "INFORMATION_SCHEMA.ROUTINE_PRIVILEGES",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "unavailable",
    "description": "Lists EXECUTE privileges granted on change stream read functions, with the routine name and the grantee.",
    "docs": "https://docs.cloud.google.com/spanner/docs/information-schema#routine_privileges",
    "notes": "Reports persisted role/grant metadata in the supported local scope."
  },
  {
    "id": "spanner-metadata-information-schema-and-spanner-sys-typed-long-running-operation-metadata",
    "name": "Typed long-running operation metadata",
    "area": "Metadata, information schema, and SPANNER_SYS",
    "local": "available",
    "other": "available",
    "description": "A long-running operation's metadata field holds a message specific to the operation, such as UpdateDatabaseDdlMetadata for schema changes, so clients can read progress details while it runs.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.longrunning",
    "notes": "Operations normally complete before the request returns."
  },
  {
    "id": "spanner-security-and-governance-databaseadminservice-listdatabaseroles",
    "name": "DatabaseAdminService.ListDatabaseRoles",
    "area": "Security and governance",
    "local": "available",
    "other": "unavailable",
    "description": "Lists the database roles defined in a database, the named privilege collections used for fine-grained access control.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.ListDatabaseRoles",
    "notes": ""
  },
  {
    "id": "spanner-security-and-governance-create-role",
    "name": "CREATE ROLE",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Defines a new database role, a named collection of fine-grained access control privileges that can be granted to principals and to other roles.",
    "docs": "https://docs.cloud.google.com/spanner/docs/fgac-about",
    "notes": "Role metadata and restricted sessions; no IAM check to select a role."
  },
  {
    "id": "spanner-security-and-governance-drop-role",
    "name": "DROP ROLE",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Removes a database role once all privileges granted to it are revoked; dropping a role also removes its membership in other roles.",
    "docs": "https://docs.cloud.google.com/spanner/docs/fgac-about",
    "notes": "Role metadata and restricted sessions; no IAM check to select a role."
  },
  {
    "id": "spanner-security-and-governance-creator-role-session-validation",
    "name": "creator_role session validation",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "The database role named when a session is created, which limits that session's reads, queries and writes to the privileges granted to the role under fine-grained access control.",
    "docs": "https://docs.cloud.google.com/spanner/docs/fgac-about",
    "notes": "Role metadata and restricted sessions; no IAM check to select a role."
  },
  {
    "id": "spanner-security-and-governance-databaseadminservice-setiampolicy",
    "name": "DatabaseAdminService.SetIamPolicy",
    "area": "Security and governance",
    "local": "available",
    "other": "unavailable",
    "description": "Sets the access control policy on a database or backup, replacing any policy that was already there.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.SetIamPolicy",
    "notes": "Stores/returns policies; no authenticated IAM enforcement."
  },
  {
    "id": "spanner-security-and-governance-databaseadminservice-getiampolicy",
    "name": "DatabaseAdminService.GetIamPolicy",
    "area": "Security and governance",
    "local": "available",
    "other": "unavailable",
    "description": "Returns the access control policy of a database or backup, or an empty policy when none has been set.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.database.v1#google.spanner.admin.database.v1.DatabaseAdmin.GetIamPolicy",
    "notes": "Stores/returns policies; no authenticated IAM enforcement."
  },
  {
    "id": "spanner-security-and-governance-instanceadminservice-setiampolicy",
    "name": "InstanceAdminService.SetIamPolicy",
    "area": "Security and governance",
    "local": "available",
    "other": "unavailable",
    "description": "Sets the access control policy on an instance, replacing any policy that was already there.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.SetIamPolicy",
    "notes": "Stores/returns policies; no authenticated IAM enforcement."
  },
  {
    "id": "spanner-security-and-governance-instanceadminservice-getiampolicy",
    "name": "InstanceAdminService.GetIamPolicy",
    "area": "Security and governance",
    "local": "available",
    "other": "unavailable",
    "description": "Returns the access control policy of an instance, or an empty policy when none has been set.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.admin.instance.v1#google.spanner.admin.instance.v1.InstanceAdmin.GetIamPolicy",
    "notes": "Stores/returns policies; no authenticated IAM enforcement."
  },
  {
    "id": "spanner-security-and-governance-grant-select-privilege",
    "name": "GRANT SELECT privilege",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Gives a database role permission to read a table, a view or chosen columns; GoogleSQL ends the statement with TO ROLE name, PostgreSQL with TO name.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-grant-insert-privilege",
    "name": "GRANT INSERT privilege",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Gives a database role permission to add rows to a table, optionally limited to listed columns, so inserts through DML or mutations are allowed for that role.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-grant-update-privilege",
    "name": "GRANT UPDATE privilege",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Gives a database role permission to change existing rows of a table, optionally limited to listed columns, so updates through DML or mutations are allowed for that role.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-grant-delete-privilege",
    "name": "GRANT DELETE privilege",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Gives a database role permission to delete rows from a table; unlike SELECT, INSERT and UPDATE, this privilege cannot be limited to columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-grant-execute-privilege",
    "name": "GRANT EXECUTE privilege",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Gives a database role permission to run a change stream's read function or to call an ML model, for example through ML.PREDICT.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-grant-usage-on-schema",
    "name": "GRANT USAGE ON SCHEMA",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Gives a database role access to a named, non-default schema; the role needs it in addition to table privileges before it can use objects inside that schema.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-grant-role-membership",
    "name": "GRANT role membership",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Makes one database role a member of another so that it inherits the parent role's privileges; GoogleSQL uses GRANT ROLE parent TO ROLE child, PostgreSQL uses GRANT parent TO child.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-revoke-object-privilege",
    "name": "REVOKE object privilege",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Removes privileges such as SELECT, INSERT, UPDATE, DELETE or EXECUTE that were granted on an object, or on chosen columns, from a database role.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-revoke-role-membership",
    "name": "REVOKE role membership",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Removes a role's membership in another role so it no longer inherits that role's privileges; GoogleSQL uses REVOKE ROLE parent FROM ROLE child, PostgreSQL uses REVOKE parent FROM child.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-security-and-governance-column-level-privilege-enforcement",
    "name": "Column-level privilege enforcement",
    "area": "Security and governance",
    "local": "available",
    "other": "no-effect",
    "description": "Lets SELECT, INSERT and UPDATE privileges be granted on chosen columns, so a role can read or change only those columns; DELETE cannot be limited to columns.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/standard-sql/data-definition-language#grant_statement",
    "notes": "Both dialects; sessions without creator_role retain full access."
  },
  {
    "id": "spanner-operations-replication-availability-and-observability-table-count-limit-validation",
    "name": "Table-count limit validation",
    "area": "Operations, replication, availability, and observability",
    "local": "available",
    "other": "available",
    "description": "Enforces the maximum number of tables allowed in one database, rejecting a schema change that would create more tables than the limit.",
    "docs": "https://docs.cloud.google.com/spanner/quotas",
    "notes": "Selected API/schema limits only, not all cloud quotas."
  },
  {
    "id": "spanner-operations-replication-availability-and-observability-index-count-limit-validation",
    "name": "Index-count limit validation",
    "area": "Operations, replication, availability, and observability",
    "local": "available",
    "other": "available",
    "description": "Enforces the maximum number of indexes allowed per database and per table, rejecting a schema change that would go over either limit.",
    "docs": "https://docs.cloud.google.com/spanner/quotas",
    "notes": "Selected API/schema limits only, not all cloud quotas."
  },
  {
    "id": "spanner-operations-replication-availability-and-observability-mutation-count-validation",
    "name": "Mutation-count validation",
    "area": "Operations, replication, availability, and observability",
    "local": "available",
    "other": "available",
    "description": "Caps the number of mutations one transaction may send, counted per modified column and per affected index entry, and rejects a transaction that goes over the cap.",
    "docs": "https://docs.cloud.google.com/spanner/quotas",
    "notes": "Selected API/schema limits only, not all cloud quotas."
  },
  {
    "id": "spanner-operations-replication-availability-and-observability-value-size-validation",
    "name": "Value-size validation",
    "area": "Operations, replication, availability, and observability",
    "local": "available",
    "other": "available",
    "description": "Caps the size of a single cell value, such as a STRING or BYTES value, and rejects a write whose value is larger than the cap.",
    "docs": "https://docs.cloud.google.com/spanner/quotas",
    "notes": "Selected API/schema limits only, not all cloud quotas."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-spanner-grpc-endpoint",
    "name": "Spanner gRPC endpoint",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "The data API endpoint where clients call the Spanner service over gRPC to create sessions and run reads, queries and transactions against a database.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1",
    "notes": ""
  },
  {
    "id": "spanner-clients-drivers-and-tooling-spanner-rest-gateway",
    "name": "Spanner REST gateway",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "An HTTP and JSON interface to the same data API, exposing session, query, read and transaction methods as resource-style REST calls.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases.sessions",
    "notes": ""
  },
  {
    "id": "spanner-clients-drivers-and-tooling-google-json-rest-error-envelope",
    "name": "Google JSON REST error envelope",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "limited",
    "description": "The format of REST error responses: a JSON error object with an HTTP code, a message, a canonical status name such as NOT_FOUND, and a details array of typed information.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases.sessions",
    "notes": "Preserves HTTP status, canonical name and standard details."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-python-spanner-client",
    "name": "Python Spanner client",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Google Cloud client library for Python, with Client, Instance and Database objects, snapshots for reads and run_in_transaction for read-write work.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/libraries",
    "notes": "Connects through SPANNER_EMULATOR_HOST."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-go-spanner-client",
    "name": "Go Spanner client",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Google Cloud client library for Go, built around a Client that offers single reads, read-only transactions and ReadWriteTransaction, which retries aborted transactions.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/libraries",
    "notes": "Connects through SPANNER_EMULATOR_HOST."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-node-js-spanner-client",
    "name": "Node.js Spanner client",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Google Cloud client library for Node.js, with Spanner, Instance, Database and Table classes whose methods return promises, for reads, queries and transactions.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/libraries",
    "notes": "Connects through SPANNER_EMULATOR_HOST."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-java-spanner-client",
    "name": "Java Spanner client",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Google Cloud client library for Java, built around a DatabaseClient that offers reads, queries, mutations and transaction runners, with synchronous and asynchronous APIs.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/libraries",
    "notes": "Connects through SPANNER_EMULATOR_HOST."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-c-spanner-client",
    "name": "C++ Spanner client",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Google Cloud client library for C++, built around a Client class whose operations return StatusOr results, with typed Value objects for parameters and rows.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/libraries",
    "notes": "Connects through SPANNER_EMULATOR_HOST."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-spanner-jdbc-driver",
    "name": "Spanner JDBC driver",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Java driver that lets applications use Spanner through standard JDBC Connection, Statement and ResultSet interfaces, for GoogleSQL databases and PostgreSQL-dialect databases.",
    "docs": "https://docs.cloud.google.com/spanner/docs/drivers-overview",
    "notes": "PostgreSQL wire clients require PGAdapter."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-pgadapter-with-pgjdbc",
    "name": "PGAdapter with pgJDBC",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Lets the standard PostgreSQL JDBC driver, pgJDBC, reach a PostgreSQL-dialect database through PGAdapter, which translates PostgreSQL wire protocol messages into Spanner gRPC calls.",
    "docs": "https://docs.cloud.google.com/spanner/docs/drivers-overview",
    "notes": "PostgreSQL wire clients require PGAdapter."
  },
  {
    "id": "spanner-clients-drivers-and-tooling-pgadapter-with-psql",
    "name": "PGAdapter with psql",
    "area": "Clients, drivers, and tooling",
    "local": "available",
    "other": "available",
    "description": "Lets the standard PostgreSQL command-line client, psql, connect to PGAdapter's PostgreSQL wire protocol endpoint and run interactive SQL against a PostgreSQL-dialect database.",
    "docs": "https://docs.cloud.google.com/spanner/docs/drivers-overview",
    "notes": "PostgreSQL wire clients require PGAdapter."
  },
  {
    "id": "spanner-emulator-specific-capabilities-committed-row-persistence",
    "name": "Committed row persistence",
    "area": "Emulator-specific capabilities",
    "local": "limited",
    "other": "unavailable",
    "description": "Rows written by a finished read-write transaction are stored durably on multiple replicas, so later strong reads return them even after server failures or maintenance.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Requires --data_dir; local LevelDB row writes are not synced against host power loss, unlike the production durability contract."
  },
  {
    "id": "spanner-emulator-specific-capabilities-schema-ddl-persistence",
    "name": "Schema DDL persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "Schema changes such as new tables, columns and indexes are stored durably as part of the database, so the schema remains the same across failures and maintenance.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-instance-metadata-persistence",
    "name": "Instance metadata persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "An instance's configuration, display name, labels and compute capacity are stored durably by the Spanner control plane and stay readable until the instance is deleted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/instances",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-database-metadata-persistence",
    "name": "Database metadata persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "A database's name, state, dialect, options and encryption settings are stored durably and stay readable through the admin API until the database is dropped.",
    "docs": "https://docs.cloud.google.com/spanner/docs/transactions",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-instance-partition-persistence",
    "name": "Instance partition persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "Instance partitions, the regional compute and storage units that hold the geo-partitioned data of an instance, are stored durably and stay listable until deleted.",
    "docs": "https://docs.cloud.google.com/spanner/docs/geo-partitioning",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-iam-policy-persistence",
    "name": "IAM policy persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "IAM policies set on instances and databases are stored durably, so the same roles keep granting access to the same principals until the policy is changed.",
    "docs": "https://docs.cloud.google.com/spanner/docs/iam",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-long-running-operation-persistence",
    "name": "Long-running operation persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "Long-running operations such as database creation are recorded durably, so a client can fetch their status and result by operation name even after the work has finished.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/rpc/google.longrunning",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-backup-metadata-persistence",
    "name": "Backup metadata persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "A backup's name, source database, creation time, expiry time and state are stored durably and stay readable until the backup is deleted or expires.",
    "docs": "https://docs.cloud.google.com/spanner/docs/backup",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-backup-schedule-persistence",
    "name": "Backup schedule persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "A backup schedule's settings, such as its frequency, retention duration and encryption configuration, are stored durably, so scheduled backups keep being created.",
    "docs": "https://docs.cloud.google.com/spanner/docs/backup/create-manage-backup-schedules",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-change-stream-record-persistence",
    "name": "Change-stream record persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "Data change records produced by a change stream are stored durably for the stream's retention period, so readers can read them again from any point within that period.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-change-stream-partition-history-persistence",
    "name": "Change-stream partition-history persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "Partition metadata of a change stream, recording how partitions split and merge over time, is stored durably so readers can follow child partitions without losing records.",
    "docs": "https://docs.cloud.google.com/spanner/docs/change-streams/details",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-spanner-sys-interval-persistence",
    "name": "SPANNER_SYS interval persistence",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "Statistics gathered into SPANNER_SYS tables stay queryable for a minimum period after each interval ends, so past minute, ten-minute and hour windows can still be read.",
    "docs": "https://docs.cloud.google.com/spanner/docs/introspection",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-persistent-tokenlist-values",
    "name": "Persistent TOKENLIST values",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "TOKENLIST values, the tokenized form of text that full-text search indexes use, are generated from their source column and stored durably with the row.",
    "docs": "https://docs.cloud.google.com/spanner/docs/full-text-search/tokenization",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-persistent-postgresql-numeric-values",
    "name": "Persistent PostgreSQL NUMERIC values",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "PostgreSQL-dialect NUMERIC values keep their exact decimal digits, including NaN, when they are stored durably and are read back unchanged.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/data-types#supported",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  },
  {
    "id": "spanner-emulator-specific-capabilities-persistent-postgresql-jsonb-values",
    "name": "Persistent PostgreSQL JSONB values",
    "area": "Emulator-specific capabilities",
    "local": "available",
    "other": "unavailable",
    "description": "PostgreSQL-dialect JSONB values are stored durably in their normalized form, and reading them back returns the same JSON content.",
    "docs": "https://docs.cloud.google.com/spanner/docs/reference/postgresql/functions#jsonb",
    "notes": "Requires --data_dir; power-loss durability and type limitations remain documented."
  }
]
