Esquema de informações

O esquema de informações é um esquema integrado comum a todos os bancos de dados do Cloud Spanner. É possível executar consultas SQL em tabelas no INFORMATION_SCHEMA para buscar metadados de esquema para um banco de dados.

Por exemplo, a consulta a seguir busca os nomes de todas as tabelas definidas pelo usuário em um banco de dados:

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

Uso

  • Os dados de INFORMATION_SCHEMA estão disponíveis apenas nas interfaces SQL (por exemplo, executeQuery e gcloud spanner databases execute-sql). Os outros métodos de leitura única do Cloud Spanner não são compatíveis com INFORMATION_SCHEMA.
  • É possível usar as consultas do INFORMATION_SCHEMA em uma transação somente leitura, mas não em uma transação de leitura e gravação.
  • É possível usar as consultas do INFORMATION_SCHEMA com inatividades fortes e limitadas ou com limites de carimbo de data/hora de inatividade exata.

Tabelas no esquema

SCHEMATA

A tabela INFORMATION_SCHEMA.SCHEMATA lista os esquemas no banco de dados. Eles incluem o esquema de informações e um esquema sem nome (a partir de agora chamado de "esquema padrão"), que contém as tabelas que você define.

Nome da coluna Tipo Descrição
CATALOG_NAME STRING O nome do catálogo. Esta coluna existe para compatibilidade com tabelas de esquema de informações padrão do SQL. Essa coluna é sempre uma string vazia.
SCHEMA_NAME STRING O nome do esquema. Está vazio para o esquema padrão e não está vazio para esquemas com nome.

INFORMATION_SCHEMA.DATABASE_OPTIONS

Esta tabela lista as opções definidas no banco de dados.

Nome da coluna Tipo Descrição
CATALOG_NAME STRING O nome do catálogo. É sempre uma string vazia.
SCHEMA_NAME STRING O nome do esquema. É uma string vazia se não tiver nome.
OPTION_NAME STRING O nome da opção de banco de dados.
OPTION_TYPE STRING O tipo de dados da opção de banco de dados.
OPTION_VALUE STRING O valor da opção do banco de dados.

INFORMATION_SCHEMA.TABLES

Esta tabela lista as tabelas em um esquema.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome do catálogo. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome do esquema. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela.
PARENT_TABLE_NAME STRING O nome da tabela pai, se essa tabela estiver entrelaçada ou NULL.
ON_DELETE_ACTION STRING Isso é definido como CASCADE ou NO ACTION para tabelas intercaladas e NULL caso contrário. Consulte as instruções TABLE para mais informações.
SPANNER_STATE STRING Uma tabela pode passar por vários estados durante a criação, se houver operações em massa. Por exemplo, quando a tabela é criada com uma chave externa que requer preenchimento dos índices. Os estados possíveis são:
  • ADDING_FOREIGN_KEY: adiciona as chaves estrangeiras da tabela.
  • WAITING_FOR_COMMIT: finalização da alteração de esquema.
  • COMMITTED: a alteração de esquema para criar a tabela foi confirmada. Não é possível gravar na tabela até que a alteração seja confirmada.

INFORMATION_SCHEMA.COLUMNS

Esta tabela lista as colunas de uma tabela.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome do catálogo. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome do esquema. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela.
COLUMN_NAME STRING O nome da coluna.
ORDINAL_POSITION INT64 A posição ordinal da coluna na tabela, começando com um valor de 1.
COLUMN_DEFAULT BYTES Incluído para atender ao padrão SQL. Sempre NULL.
DATA_TYPE STRING Incluído para atender ao padrão SQL. Sempre NULL.
IS_NULLABLE STRING Uma string que indica se a coluna é anulável. De acordo com o padrão SQL, a string é YES ou NO, em vez de um valor booleano.
SPANNER_TYPE STRING O tipo de dados da coluna.

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

Essa tabela contém uma linha para cada restrição definida para as tabelas no banco de dados.

Nome da coluna Tipo Descrição
CONSTRAINT_CATALOG STRING É sempre uma string de tentativa.
CONSTRAINT_SCHEMA STRING O nome de esquema da restrição. É uma string vazia se não tiver nome.
CONSTRAINT_NAME STRING O nome da restrição.
TABLE_CATALOG STRING O nome de catálogo da tabela restrita. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome do esquema da tabela restrita. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela restrita.
CONSTRAINT_TYPE STRING O tipo da restrição. Os valores possíveis são:
  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
IS_DEFERRABLE STRING Sempre NO.
INITIALLY_DEFERRED STRING Sempre NO.
ENFORCED STRING Sempre YES.

INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE

Esta tabela lista tabelas que definem ou são usadas por restrições. Inclui tabelas que definem restrições PRIMARY KEY e UNIQUE. Também inclui as tabelas referenciadas de definições de FOREIGN KEY.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome do catálogo da tabela restrita. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome de esquema da tabela restrita. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela restrita.
CONSTRAINT_CATALOG STRING O nome de catálogo da restrição. É sempre uma string vazia.
CONSTRAINT_SCHEMA STRING O nome de esquema da restrição. É uma string vazia se não tiver nome.
CONSTRAINT_NAME STRING O nome da restrição.

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

Esta tabela contém uma linha sobre cada restrição FOREIGN KEY.

Nome da coluna Tipo Descrição
CONSTRAINT_CATALOG STRING O nome do catálogo da FOREIGN KEY. É sempre uma string vazia.
CONSTRAINT_SCHEMA STRING O nome de esquema da FOREIGN KEY. É uma string vazia se não tiver nome.
CONSTRAINT_NAME STRING O nome da FOREIGN KEY.
UNIQUE_CONSTRAINT_CATALOG STRING O nome de catálogo da restrição PRIMARY KEY ou UNIQUE que a FOREIGN KEY faz referência. É sempre uma string vazia.
UNIQUE_CONSTRAINT_SCHEMA STRING O nome de esquema da restrição PRIMARY KEY ou UNIQUE que a FOREIGN KEY faz referência. É uma string vazia se não tiver nome.
UNIQUE_CONSTRAINT_NAME STRING O nome da restrição PRIMARY KEY ou UNIQUE que a FOREIGN KEY faz referência.
MATCH_OPTION STRING Sempre SIMPLE.
UPDATE_RULE STRING Sempre NO ACTION.
DELETE_RULE STRING Sempre NO ACTION.
SPANNER_STATE STRING O estado atual da chave externa. O Spanner não começa a aplicar a restrição até que os índices de backup da chave externa sejam criados e preenchidos. Quando os índices estiverem prontos, o Spanner começará a aplicar a restrição para novas transações enquanto valida os dados existentes. Os valores possíveis e os estados que eles representam são:
  • BACKFILLING_INDEXES: os índices estão sendo preenchidos.
  • VALIDATING_DATA: os dados existentes e as novas gravações estão sendo validados.
  • WAITING_FOR_COMMIT: as operações em massa de chave externa foram concluídas com sucesso ou nenhuma foi necessária, mas a chave externa ainda está pendente.
  • COMMITTED: a alteração do esquema foi confirmada.

INFORMATION_SCHEMA.KEY_COLUMN_USAGE

Essa tabela contém uma linha sobre cada coluna das tabelas de TABLE_CONSTRAINTS que são restritas como chaves por uma restrição PRIMARY KEY, FOREIGN KEY ou UNIQUE. Estas são as colunas das tabelas que definem as restrições.

Nome da coluna Tipo Descrição
CONSTRAINT_CATALOG STRING O nome de catálogo da restrição. É sempre uma string vazia.
CONSTRAINT_SCHEMA STRING O nome de esquema da restrição. Essa coluna jamais é nula. É uma string vazia se não tiver nome.
CONSTRAINT_NAME STRING O nome da restrição.
TABLE_CATALOG STRING O nome de catálogo da coluna restrita. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome de esquema da coluna restrita. Essa coluna jamais é nula. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela da coluna restrita.
COLUMN_NAME STRING O nome da coluna.
ORDINAL_POSITION INT64 A posição ordinal da coluna na chave da restrição, começando com um valor de 1.
POSITION_IN_UNIQUE_CONSTRAINT INT64 Para FOREIGN KEYs, a posição ordinal da coluna na restrição exclusiva, começando com um valor de 1. Essa coluna é nula para outros tipos de restrição.

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

Essa tabela contém uma linha sobre cada coluna usada por uma restrição. Inclui as colunas PRIMARY KEY e UNIQUE, além das colunas referenciadas das restrições FOREIGN KEY.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome de catálogo da tabela de colunas. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome de esquema da tabela de colunas. Essa coluna jamais é nula. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela da coluna.
COLUMN_NAME STRING O nome da coluna que é usada pela restrição.
CONSTRAINT_CATALOG STRING O nome de catálogo da restrição. É sempre uma string vazia.
CONSTRAINT_SCHEMA STRING O nome de esquema da restrição. É uma string vazia se não tiver nome.
CONSTRAINT_NAME STRING O nome da restrição.

INFORMATION_SCHEMA.INDEXES

Essa tabela lista os índices em um esquema.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome do catálogo. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome do esquema. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela.
INDEX_NAME STRING O nome do índice. Tabelas com uma especificação PRIMARY KEY têm uma entrada de pseudo-índice gerada com o nome PRIMARY_KEY, que permite que os campos da chave primária sejam determinados.
INDEX_TYPE STRING O tipo do índice. O tipo é INDEX ou PRIMARY_KEY.
PARENT_TABLE_NAME STRING Os índices secundários podem ser intercalados em uma tabela pai, conforme discutido em Como criar um índice secundário. Essa coluna contém o nome dessa tabela pai ou NULL se o índice não for intercalado.
IS_UNIQUE BOOL Se as chaves do índice precisarem ser exclusivas.
IS_NULL_FILTERED BOOL Se o índice incluir entradas com valores NULL.
INDEX_STATE STRING O estado atual do índice. Os valores possíveis e os estados que eles representam são:
  • PREPARE: criar tabelas vazias para um novo índice.
  • WRITE_ONLY: preencher dados para um novo índice.
  • WRITE_ONLY_CLEANUP: limpar um novo índice.
  • WRITE_ONLY_VALIDATE_UNIQUE: verificar a singularidade dos dados em um novo índice.
  • READ_WRITE: operação de índice normal.
SPANNER_IS_MANAGED BOOL Verdadeiro se o índice for gerenciado pelo Cloud Spanner. Caso contrário, falso. Os índices secundários de backup de chaves externas são gerenciados pelo Cloud Spanner.

INFORMATION_SCHEMA.INDEX_COLUMNS

Essa tabela lista as colunas em um índice.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome do catálogo. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome do esquema. É uma string vazia se não tiver nome.
TABLE_NAME STRING O nome da tabela.
INDEX_NAME STRING O nome do índice.
COLUMN_NAME STRING O nome da coluna.
ORDINAL_POSITION INT64 A posição ordinal da coluna no índice (ou chave primária), começando com um valor de 1. Esse valor é NULL para colunas sem chave (por exemplo, colunas especificadas na cláusula STORING de um índice).
COLUMN_ORDERING STRING O pedido da coluna. O valor é ASC ou DESC para colunas de chave e NULL para colunas não chave (por exemplo, colunas especificadas na cláusula STORING de um índice).
IS_NULLABLE STRING Uma string que indica se a coluna é anulável. De acordo com o padrão SQL, a string é YES ou NO, em vez de um valor booleano.
SPANNER_TYPE STRING O tipo de dados da coluna.

INFORMATION_SCHEMA.COLUMN_OPTIONS

Essa tabela lista as opções de coluna em uma tabela.

Nome da coluna Tipo Descrição
TABLE_CATALOG STRING O nome do catálogo. É sempre uma string vazia.
TABLE_SCHEMA STRING O nome do esquema. O nome está vazio para o esquema padrão e não vazio para outros esquemas (por exemplo, o próprio INFORMATION_SCHEMA). Essa coluna jamais é nula.
TABLE_NAME STRING O nome da tabela.
COLUMN_NAME STRING O nome da coluna.
OPTION_NAME STRING Um identificador SQL que identifica com exclusividade a opção. Esse identificador é a chave da cláusula OPTIONS em DDL.
OPTION_TYPE STRING Um nome do tipo de dados que é o tipo desse valor de opção.
OPTION_VALUE STRING Um literal SQL que descreve o valor dessa opção. O valor dessa coluna precisa ser analisável como parte de uma consulta. A expressão resultante da análise do valor precisa ser convertida em OPTION_TYPE. Essa coluna jamais é nula.

Exemplos

Retorne informações sobre cada tabela no esquema do usuário:

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

Retorna informações sobre as colunas na tabela do usuário 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

Retorne informações sobre cada índice no esquema do usuário:

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

Retorna todas as colunas que usam opções diferentes do padrão:

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 = ''

Retorna a versão do otimizador de consultas que o banco de dados está usando no momento:

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

A seguir