Esquema de información

El esquema de información es un esquema integrado que es común a todas las bases de datos de Cloud Spanner. Puedes ejecutar consultas de SQL en tablas en el INFORMATION_SCHEMA a fin de recuperar metadatos de esquema para una base de datos.

Por ejemplo, la siguiente consulta recupera los nombres de todas las tablas definidas por el usuario en una base de datos:

SELECT
  table_name
FROM
  information_schema.tables
WHERE
  table_catalog = '' and table_schema = ''

Uso

  • Los datos del INFORMATION_SCHEMA solo están disponibles a través de interfaces de SQL (por ejemplo, executeQuery y gcloud spanner databases execute-sql); los otros métodos de lectura única de Cloud Spanner no son compatibles con el INFORMATION_SCHEMA.
  • Las consultas en el INFORMATION_SCHEMA se pueden usar en una transacción de solo lectura, pero no en una transacción de lectura y escritura.
  • Las consultas en el INFORMATION_SCHEMA pueden usar límites de marcas de tiempo sólidos de inactividad limitada o de inactividad exacta.

Tablas en el esquema

SCHEMATA

La tabla INFORMATION_SCHEMA.SCHEMATA enumera los esquemas en la base de datos. En estos se incluyen el esquema de información y un esquema sin nombre (que denominaremos “esquema predeterminado”), que contiene las tablas que definas.

Nombre de la columna Tipo Descripción
CATALOG_NAME STRING Es el nombre del catálogo. Esta columna existe para la compatibilidad con las tablas de esquema de información estándar de SQL. Esta columna es siempre una string vacía.
SCHEMA_NAME STRING Es el nombre del esquema. Esta opción está vacía cuando se trata del esquema predeterminado y no lo está para los esquemas con nombre.

INFORMATION_SCHEMA.DATABASE_OPTIONS

En esta tabla, se enumeran las opciones que se configuran en la base de datos.

Nombre de la columna Tipo Descripción
CATALOG_NAME STRING Es el nombre del catálogo. Siempre es una string vacía.
SCHEMA_NAME STRING Es el nombre del esquema. Es una string vacía si no tiene nombre.
OPTION_NAME STRING El nombre de la opción de base de datos.
OPTION_TYPE STRING El tipo de datos de la opción de base de datos.
OPTION_VALUE STRING El valor de la opción de base de datos.

INFORMATION_SCHEMA.TABLES

En esta tabla, se enumeran las tablas de un esquema.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING Es el nombre del catálogo. Siempre es una string vacía.
TABLE_SCHEMA STRING Es el nombre del esquema. Es una string vacía si no tiene nombre.
TABLE_NAME STRING Es el nombre de la tabla.
PARENT_TABLE_NAME STRING Es el nombre de la tabla superior si esta tabla está intercalada o es NULL.
ON_DELETE_ACTION STRING Esta opción está configurada en CASCADE o en NO ACTION para las tablas intercaladas, y en NULL en el caso contrario. Consulta Instrucciones de TABLE para obtener más información.
SPANNER_STATE STRING Una tabla puede pasar por varios estados durante la creación, si se involucran operaciones masivas. Por ejemplo, cuando la tabla se crea con una clave externa que requiere reabastecimiento de sus índices. Los estados posibles son los siguientes:
  • ADDING_FOREIGN_KEY: Agrega las claves externas de la tabla.
  • WAITING_FOR_COMMIT: Finaliza el cambio de esquema.
  • COMMITTED: el cambio de esquema para crear la tabla se confirmó. No puedes escribir en la tabla hasta que el cambio se confirme.

INFORMATION_SCHEMA.COLUMNS

En esta tabla, se enumeran las columnas de una tabla.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING Es el nombre del catálogo. Siempre es una string vacía.
TABLE_SCHEMA STRING Es el nombre del esquema. Es una string vacía si no tiene nombre.
TABLE_NAME STRING Es el nombre de la tabla.
COLUMN_NAME STRING Es el nombre de la columna
ORDINAL_POSITION INT64 Es la posición ordinal de la columna en la tabla, que comienza con un valor de 1.
COLUMN_DEFAULT BYTES Se incluye para satisfacer el estándar de SQL. Siempre NULL.
DATA_TYPE STRING Se incluye para satisfacer el estándar de SQL. Siempre NULL.
IS_NULLABLE STRING Es una string que indica si la columna acepta el valor NULL. De acuerdo con el estándar de SQL, la string es YES o NO, en lugar de un valor booleano.
SPANNER_TYPE STRING Es el tipo de datos de la columna.
IS_GENERATED STRING Es una string que indica si se generó la columna. La string es ALWAYS para una columna generada o NEVER para una columna no generada.
GENERATION_EXPRESSION STRING Una string que representa la expresión SQL de una columna generada. NULL si la columna no es una columna generada.
IS_STORED STRING Es una string que indica si la columna generada se almacena. La string siempre es YES para las columnas generadas y NULL para las columnas no generadas.
SPANNER_STATE STRING Es el estado actual de la columna. Una nueva columna generada almacenada que se agrega a una tabla existente puede pasar por varios estados visibles para el usuario antes de que pueda usarse por completo. Los valores posibles son los siguientes:
  • WRITE_ONLY: La columna se está rellenando. No se permite la lectura.
  • COMMITTED: la columna es completamente utilizable.

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

Esta tabla contiene una fila para cada restricción definida para las tablas en la base de datos.

Nombre de la columna Tipo Descripción
CONSTRAINT_CATALOG STRING Siempre hay una string vacía.
CONSTRAINT_SCHEMA STRING El nombre del esquema de la restricción. Es una string vacía si no tiene nombre.
CONSTRAINT_NAME STRING El nombre de la restricción.
TABLE_CATALOG STRING Es el nombre del catálogo de la tabla restringida. Siempre es una string vacía.
TABLE_SCHEMA STRING El nombre del esquema de la tabla restringida. Es una string vacía si no tiene nombre.
TABLE_NAME STRING El nombre de la tabla restringida.
CONSTRAINT_TYPE STRING El tipo de restricción. Los valores posibles son los siguientes:
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • UNIQUE
IS_DEFERRABLE STRING Siempre NO.
INITIALLY_DEFERRED STRING Siempre NO.
ENFORCED STRING Siempre YES.

INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE

En esta tabla, se enumeran las tablas que definen o usan restricciones. Incluye tablas que definen restricciones PRIMARY KEY y UNIQUE. También incluye las tablas de referencia de las definiciones FOREIGN KEY.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING Es el nombre del catálogo de la tabla restringida. Siempre es una string vacía.
TABLE_SCHEMA STRING El nombre del esquema de la tabla restringida. Es una string vacía si no tiene nombre.
TABLE_NAME STRING El nombre de la tabla restringida.
CONSTRAINT_CATALOG STRING El nombre del catálogo de la restricción. Siempre es una string vacía.
CONSTRAINT_SCHEMA STRING El nombre del esquema de la restricción. Es una string vacía si no tiene nombre.
CONSTRAINT_NAME STRING El nombre de la restricción.

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

Esta tabla contiene una fila sobre cada restricción FOREIGN KEY.

Nombre de la columna Tipo Descripción
CONSTRAINT_CATALOG STRING El nombre del catálogo de CLAVE EXTERNA. Siempre es una string vacía.
CONSTRAINT_SCHEMA STRING El nombre del esquema de CLAVE EXTERNA. Es una string vacía si no tiene nombre.
CONSTRAINT_NAME STRING El nombre de la CLAVE EXTERNA.
UNIQUE_CONSTRAINT_CATALOG STRING Es el nombre del catálogo de la CLAVE PRIMARIA o la ÚNICA restricción de las referencias de CLAVE EXTERNA. Siempre es una string vacía.
UNIQUE_CONSTRAINT_SCHEMA STRING Es el nombre del esquema de la CLAVE PRIMARIA o la ÚNICA restricción de las referencias de CLAVE EXTERNA. Es una string vacía si no tiene nombre.
UNIQUE_CONSTRAINT_NAME STRING Es el nombre de la CLAVE PRIMARIA o la ÚNICA restricción de las referencias de CLAVE EXTERNA.
MATCH_OPTION STRING Siempre SIMPLE.
UPDATE_RULE STRING Siempre NO ACTION.
DELETE_RULE STRING Siempre NO ACTION.
SPANNER_STATE STRING El estado actual de la clave externa. Spanner no comienza a aplicar la restricción hasta que se creen y se reabastezcan los índices de respaldo de la clave externa. Una vez que los índices están listos, Spanner comienza a aplicar la restricción para las transacciones nuevas mientras valida los datos existentes. Los valores posibles y los estados que representan son los siguientes:
  • BACKFILLING_INDEXES: Los índices se están reabasteciendo.
  • VALIDATING_DATA: Se están validando los datos existentes y las escrituras nuevas.
  • WAITING_FOR_COMMIT: Las operaciones masivas de claves externas se completaron correctamente o no fueron necesarias, pero la clave externa aún está pendiente.
  • COMMITTED: Se confirmó el cambio de esquema.

INFORMATION_SCHEMA.CHECK_CONSTRAINTS

La tabla INFORMATION_SCHEMA.CHECK_CONSTRAINTS contiene una fila sobre cada restricción CHECK definida por la palabra clave CHECK o NOT NULL.

Nombre de la columna Tipo Descripción
CONSTRAINT_CATALOG STRING El nombre del catálogo de la restricción. Esta columna nunca es nula, pero siempre es una string vacía.
CONSTRAINT_SCHEMA STRING El nombre del esquema de la restricción. Es una string vacía si no tiene nombre.
CONSTRAINT_NAME STRING El nombre de la restricción. Esta columna nunca es NULL. Si no se especifica de forma explícita en la definición del esquema, se asigna un nombre definido por el sistema.
CHECK_CLAUSE STRING Las expresiones de la restricción CHECK. Esta columna nunca es NULL.
SPANNER_STATE STRING El estado actual de la restricción CHECK. Esta columna nunca es NULL. Los estados posibles son los siguientes:
  • VALIDATING: Cloud Spanner está validando los datos existentes.
  • COMMITTED: No hay cambios de esquema activos para esta restricción.

INFORMATION_SCHEMA.KEY_COLUMN_USAGE

Esta tabla contiene una fila sobre cada columna de las tablas de TABLE_CONSTRAINTS que están restringidas como claves por una restricción PRIMARY KEY, FOREIGN KEY o UNIQUE. Estas son las columnas de las tablas que definen las restricciones.

Nombre de la columna Tipo Descripción
CONSTRAINT_CATALOG STRING El nombre del catálogo de la restricción. Siempre es una string vacía.
CONSTRAINT_SCHEMA STRING El nombre del esquema de la restricción. Esta columna nunca es NULL. Es una string vacía si no tiene nombre.
CONSTRAINT_NAME STRING El nombre de la restricción.
TABLE_CATALOG STRING El nombre del catálogo de la columna restringida. Siempre es una string vacía.
TABLE_SCHEMA STRING El nombre del esquema de la columna restringida. Esta columna nunca es NULL. Es una string vacía si no tiene nombre.
TABLE_NAME STRING El nombre de la tabla de la columna restringida.
COLUMN_NAME STRING Es el nombre de la columna
ORDINAL_POSITION INT64 La posición habitual de la columna dentro de la clave de la restricción, que comienza con un valor de 1.
POSITION_IN_UNIQUE_CONSTRAINT INT64 En el caso de FOREIGN KEY, la posición ordinal de la columna dentro de la restricción única, que comienza con un valor de 1 Esta columna es nula para otros tipos de restricciones.

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

Esta tabla contiene una fila para cada columna que usa una restricción. Incluye las columnas PRIMARY KEY y UNIQUE, más las columnas a las que se hace referencia en las restricciones FOREIGN KEY.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING El nombre del catálogo de la tabla de la columna. Siempre es una string vacía.
TABLE_SCHEMA STRING El nombre del esquema de la tabla de columnas. Esta columna nunca es NULL. Es una string vacía si no tiene nombre.
TABLE_NAME STRING El nombre de la tabla de la columna.
COLUMN_NAME STRING El nombre de la columna que se usa en la restricción.
CONSTRAINT_CATALOG STRING El nombre del catálogo de la restricción. Siempre es una string vacía.
CONSTRAINT_SCHEMA STRING El nombre del esquema de la restricción. Es una string vacía si no tiene nombre.
CONSTRAINT_NAME STRING El nombre de la restricción.

INFORMATION_SCHEMA.INDEXES

En esta tabla, se enumeran los índices de un esquema.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING Es el nombre del catálogo. Siempre es una string vacía.
TABLE_SCHEMA STRING Es el nombre del esquema. Es una string vacía si no tiene nombre.
TABLE_NAME STRING Es el nombre de la tabla.
INDEX_NAME STRING Es el nombre del índice. Las tablas con una especificación PRIMARY KEY tienen una entrada de seudoíndice generada con el nombre PRIMARY_KEY, que permite determinar los campos de la clave primaria.
INDEX_TYPE STRING Es el tipo de índice. El tipo es INDEX o PRIMARY_KEY.
PARENT_TABLE_NAME STRING Los índices secundarios se pueden intercalar en una tabla superior, como se explica en la sección sobre cómo crear un índice secundario. Esta columna contiene el nombre de esa tabla superior, o NULL si el índice no está intercalado.
IS_UNIQUE BOOL Se indica si las claves de índice deben ser únicas.
IS_NULL_FILTERED BOOL Se indica si el índice incluye entradas con valores NULL.
INDEX_STATE STRING Es el estado actual del índice. Los valores posibles y los estados que representan son los siguientes:
  • PREPARE: Crea tablas vacías para un índice nuevo.
  • WRITE_ONLY: Reabastece los datos para un índice nuevo.
  • WRITE_ONLY_CLEANUP: Limpia un índice nuevo.
  • WRITE_ONLY_VALIDATE_UNIQUE: Comprueba la unicidad de los datos en un índice nuevo.
  • READ_WRITE: Operación de índice normal.
SPANNER_IS_MANAGED BOOL Es verdadero si Cloud Spanner administra el índice; de lo contrario, es falso. Cloud Spanner administra los índices de respaldo secundarios para las claves externas.

INFORMATION_SCHEMA.INDEX_COLUMNS

En esta tabla, se enumeran las columnas de un índice.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING Es el nombre del catálogo. Siempre es una string vacía.
TABLE_SCHEMA STRING Es el nombre del esquema. Es una string vacía si no tiene nombre.
TABLE_NAME STRING Es el nombre de la tabla.
INDEX_NAME STRING Es el nombre del índice.
COLUMN_NAME STRING Es el nombre de la columna
ORDINAL_POSITION INT64 Es la posición ordinal de la columna en el índice (o clave primaria), que comienza con un valor de 1. Este valor es NULL para las columnas sin clave (por ejemplo, las columnas especificadas en la cláusula STORING de un índice).
COLUMN_ORDERING STRING Es el orden de la columna. El valor es ASC o DESC para las columnas de clave, y NULL para las columnas sin clave (por ejemplo, las columnas especificadas en la cláusula STORING de un índice).
IS_NULLABLE STRING Es una string que indica si la columna acepta el valor NULL. De acuerdo con el estándar de SQL, la string es YES o NO, en lugar de un valor booleano.
SPANNER_TYPE STRING Es el tipo de datos de la columna.

INFORMATION_SCHEMA.COLUMN_OPTIONS

En esta tabla, se enumeran las opciones de columnas de una tabla.

Nombre de la columna Tipo Descripción
TABLE_CATALOG STRING Es el nombre del catálogo. Siempre es una string vacía.
TABLE_SCHEMA STRING Es el nombre del esquema. El nombre está vacío en el esquema predeterminado y no está vacío en otros esquemas (por ejemplo, en el INFORMATION_SCHEMA). Esta columna nunca es NULL.
TABLE_NAME STRING Es el nombre de la tabla.
COLUMN_NAME STRING Es el nombre de la columna
OPTION_NAME STRING Un identificador de SQL que identifica la opción de forma única. Este identificador es la clave de la cláusula OPTIONS en DDL.
OPTION_TYPE STRING Es un nombre de tipo de datos que es el tipo de este valor de opción.
OPTION_VALUE STRING Un literal de SQL que describe el valor de esta opción. El valor de esta columna debe poder analizarse como parte de una consulta. La expresión resultante de este análisis del valor debe poder convertirse en OPTION_TYPE. Esta columna nunca es NULL.

Ejemplos

Muestra información sobre cada tabla en el esquema del usuario:

SELECT
  t.table_name,
  t.parent_table_name
FROM
  information_schema.tables AS t
WHERE
  t.table_catalog = ''
  AND
  t.table_schema = ''
ORDER BY
  t.table_catalog,
  t.table_schema,
  t.table_name

Muestra información sobre las columnas de la tabla de usuarios MyTable:

SELECT
  t.column_name,
  t.spanner_type,
  t.is_nullable
FROM
  information_schema.columns AS t
WHERE
  t.table_catalog = ''
  AND
  t.table_schema = ''
  AND
  t.table_name = 'MyTable'
ORDER BY
  t.table_catalog,
  t.table_schema,
  t.table_name,
  t.ordinal_position

Muestra información sobre cada índice en el esquema del usuario:

SELECT
  t.table_name,
  t.index_name,
  t.parent_table_name
FROM
  information_schema.indexes AS t
WHERE
  t.table_catalog = ''
  AND
  t.table_schema = ''
  AND
  t.index_type != 'PRIMARY_KEY'
ORDER BY
  t.table_catalog,
  t.table_schema,
  t.table_name,
  t.index_name

Muestra todas las columnas que usan opciones distintas de la predeterminada:

SELECT
  t.table_name,
  t.column_name,
  t.option_type,
  t.option_value,
  t.option_name
FROM
  information_schema.column_options AS t
WHERE
  t.table_catalog = ''
AND
  t.table_schema = ''

Muestra la versión del optimizador de consultas que la base de datos usa actualmente:

SELECT
  s.OPTION_NAME,
  s.OPTION_VALUE
FROM
  INFORMATION_SCHEMA.DATABASE_OPTIONS s
WHERE
  s.SCHEMA_NAME=''
  AND s.OPTION_NAME = 'optimizer_version'

¿Qué sigue?