信息架构

信息架构是每个 Cloud Spanner 数据库通用的内置架构。您可以对 INFORMATION_SCHEMA 中的表运行 SQL 查询来提取数据库的架构元数据。

例如,以下查询可提取数据库中所有用户定义的表的名称:

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

用量

  • INFORMATION_SCHEMA 数据只能通过 SQL 接口获得(例如 executeQuerygcloud spanner databases execute-sql 接口);Cloud Spanner 提供的其他单一读取方法不支持 INFORMATION_SCHEMA
  • 针对 INFORMATION_SCHEMA 的查询可以用于只读事务,但不能用于读写事务
  • 针对 INFORMATION_SCHEMA 的查询可以使用强、有界限过时或精确过时时间戳边界

架构中的表

SCHEMATA

INFORMATION_SCHEMA.SCHEMATA 表列出了数据库中的架构。这些架构包括信息架构和一个未命名架构(以下称为“默认架构”),后者包含您定义的表。

列名 类型 说明
CATALOG_NAME STRING 目录的名称。此列是为了与 SQL 标准信息架构表保持兼容而存在的。此列始终是一个空字符串。
SCHEMA_NAME STRING 架构的名称。这对于默认架构为空,对于命名架构不为空。

INFORMATION_SCHEMA.DATABASE_OPTIONS

此表列出了在数据库上设置的选项。

列名 类型 说明
CATALOG_NAME STRING 目录的名称。始终为空字符串。
SCHEMA_NAME STRING 架构的名称。如果未命名,则为空字符串。
OPTION_NAME STRING 数据库选项的名称。
OPTION_TYPE STRING 数据库选项的数据类型。
OPTION_VALUE STRING 数据库选项值。

INFORMATION_SCHEMA.TABLES

此表列出了架构中的表。

列名 类型 说明
TABLE_CATALOG STRING 目录的名称。始终为空字符串。
TABLE_SCHEMA STRING 架构的名称。如果未命名,则为空字符串。
TABLE_NAME STRING 表的名称。
PARENT_TABLE_NAME STRING 如果此表是交错表,则为父表的名称,否则为 NULL
ON_DELETE_ACTION STRING 对于交错表,此名称设置为 CASCADENO ACTION,否则设置为 NULL。如需了解详情,请参阅表语句
SPANNER_STATE STRING 如果涉及批量操作,则表在创建期间可能会经历多个状态。例如,在使用需要回填其索引的外键创建表时。可能的状态包括:
  • ADDING_FOREIGN_KEY:添加表的外键。
  • WAITING_FOR_COMMIT:完成架构更改。
  • COMMITTED:创建表的架构更改已提交。在更改提交之前,您无法向表写入数据。

INFORMATION_SCHEMA.COLUMNS

此表列出了表中的列。

列名 类型 说明
TABLE_CATALOG STRING 目录的名称。始终为空字符串。
TABLE_SCHEMA STRING 架构的名称。如果未命名,则为空字符串。
TABLE_NAME STRING 表的名称。
COLUMN_NAME STRING 列的名称。
ORDINAL_POSITION INT64 表中列的序号位置,从 1 开始。
COLUMN_DEFAULT BYTES 包含在内,用于满足 SQL 标准。始终为 NULL
DATA_TYPE STRING 包含在内,用于满足 SQL 标准。始终为 NULL
IS_NULLABLE STRING 指明列是否可以为 Null 的字符串。根据 SQL 标准,字符串可以是 YESNO,但不能是布尔值。
SPANNER_TYPE STRING 列的数据类型

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

此表为数据库中的表定义的每个限制条件都包含了一行。

列名 类型 说明
CONSTRAINT_CATALOG STRING 始终为空字符串。
CONSTRAINT_SCHEMA STRING 限制条件的架构名称。如果未命名,则为空字符串。
CONSTRAINT_NAME STRING 限制条件的名称。
TABLE_CATALOG STRING 受限表的目录名称。始终为空字符串。
TABLE_SCHEMA STRING 受限表的架构名称。如果未命名,则为空字符串。
TABLE_NAME STRING 受限表的名称。
CONSTRAINT_TYPE STRING 限制条件的类型。可能的
    值如下:
  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
IS_DEFERRABLE STRING 始终为 NO
INITIALLY_DEFERRED STRING 始终为 NO
ENFORCED STRING 始终为 YES

INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE

此表列出了定义限制条件或限制条件使用的表。包括用于定义 PRIMARY KEYUNIQUE 限制条件的表。此外,还包括引用的 FOREIGN KEY 定义的表。

列名 类型 说明
TABLE_CATALOG STRING 受限表的目录名称。始终为空字符串。
TABLE_SCHEMA STRING 受限表的架构名称。如果未命名,则为空字符串。
TABLE_NAME STRING 受限表的名称。
CONSTRAINT_CATALOG STRING 限制条件的目录名称。始终为空字符串。
CONSTRAINT_SCHEMA STRING 限制条件的架构名称。如果未命名,则为空字符串。
CONSTRAINT_NAME STRING 限制条件的名称。

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

此表包含一行有关每个 FOREIGN KEY 限制条件的信息。

列名 类型 说明
CONSTRAINT_CATALOG STRING 外键的目录名称。始终为空字符串。
CONSTRAINT_SCHEMA STRING 外键的架构名称。如果未命名,则为空字符串。
CONSTRAINT_NAME STRING 外键的名称。
UNIQUE_CONSTRAINT_CATALOG STRING 外键引用的主键或唯一限制条件的目录名称。始终为空字符串。
UNIQUE_CONSTRAINT_SCHEMA STRING 外键引用的主键或唯一限制条件的架构名称。如果未命名,则为空字符串。
UNIQUE_CONSTRAINT_NAME STRING 外键引用的主键或唯一限制条件的名称。
MATCH_OPTION STRING 始终为 SIMPLE
UPDATE_RULE STRING 始终为 NO ACTION
DELETE_RULE STRING 始终为 NO ACTION
SPANNER_STATE STRING 外键的当前状态。在创建和回填外键的支持性索引之前,Spanner 不会开始强制执行限制条件。索引准备就绪后,Spanner 会在验证现有数据时开始对新事务强制执行限制条件。可能的值和它们所代表的状态如下:
  • BACKFILLING_INDEXES:正在回填的索引。
  • VALIDATING_DATA:正在验证现有数据和新写入。
  • WAITING_FOR_COMMIT:外键批量操作已成功完成,或者不需要任何操作,但外键仍处于待处理状态。
  • COMMITTED:已提交架构更改。

INFORMATION_SCHEMA.KEY_COLUMN_USAGE

此表包含一行与 TABLE_CONSTRAINTS 中的表的每一列相关,这些表作为键受到 PRIMARY KEYFOREIGN KEYUNIQUE 限制条件制约。这些列具有定义限制条件的表。

列名 类型 说明
CONSTRAINT_CATALOG STRING 限制条件的目录名称。始终为空字符串。
CONSTRAINT_SCHEMA STRING 限制条件的架构名称。此列从来不会为 null。如果未命名,则为空字符串。
CONSTRAINT_NAME STRING 限制条件的名称。
TABLE_CATALOG STRING 受限列的目录名称。始终为空字符串。
TABLE_SCHEMA STRING 受限列的架构名称。此列从来不会为 null。如果未命名,则为空字符串。
TABLE_NAME STRING 受限列的表的名称。
COLUMN_NAME STRING 列的名称。
ORDINAL_POSITION INT64 限制条件的键内的列的序号位置,从值 1 开始。
POSITION_IN_UNIQUE_CONSTRAINT INT64 对于 FOREIGN KEY,该唯一限制条件中的列的序号位置,从值 1 开始。对于其他限制条件类型,此列为 null。

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

此表包含一行有关限制条件使用的每一列的信息。包括 PRIMARY KEYUNIQUE 列,以及 FOREIGN KEY 限制条件的引用列。

列名 类型 说明
TABLE_CATALOG STRING 列表的目录名称。始终为空字符串。
TABLE_SCHEMA STRING 列表的架构名称。此列从来不会为 null。如果未命名,则为空字符串。
TABLE_NAME STRING 列的表名称。
COLUMN_NAME STRING 限制条件使用的列的名称。
CONSTRAINT_CATALOG STRING 限制条件的目录名称。始终为空字符串。
CONSTRAINT_SCHEMA STRING 限制条件的架构名称。如果未命名,则为空字符串。
CONSTRAINT_NAME STRING 限制条件的名称。

INFORMATION_SCHEMA.INDEXES

此表列出了架构中的索引。

列名 类型 说明
TABLE_CATALOG STRING 目录的名称。始终为空字符串。
TABLE_SCHEMA STRING 架构的名称。如果未命名,则为空字符串。
TABLE_NAME STRING 表的名称。
INDEX_NAME STRING 索引的名称。具有 PRIMARY KEY 规范的表具有使用名称 PRIMARY_KEY 生成的伪索引条目,这可以确定主键的字段。
INDEX_TYPE STRING 索引的类型。类型是 INDEXPRIMARY_KEY
PARENT_TABLE_NAME STRING 二级索引可以在父表中交错,如创建二级索引中所述。此列保存该父表的名称,如果索引未交错,则保留值 NULL
IS_UNIQUE BOOL 索引键是否必须是唯一的。
IS_NULL_FILTERED BOOL 索引是否包含值为 NULL 的条目。
INDEX_STATE STRING 索引的当前状态。可能的值和它们所代表的状态如下:
  • PREPARE:为新索引创建空表。
  • WRITE_ONLY:回填新索引的数据。
  • WRITE_ONLY_CLEANUP:清理新索引。
  • WRITE_ONLY_VALIDATE_UNIQUE:检查新索引中数据的唯一性。
  • READ_WRITE:正常索引操作。
SPANNER_IS_MANAGED BOOL 如果索引由 Cloud Spanner 管理,则为 True;否则为 False。外键的二级支持性索引由 Cloud Spanner 管理。

INFORMATION_SCHEMA.INDEX_COLUMNS

此表列出了索引中的列。

列名 类型 说明
TABLE_CATALOG STRING 目录的名称。始终为空字符串。
TABLE_SCHEMA STRING 架构的名称。如果未命名,则为空字符串。
TABLE_NAME STRING 表的名称。
INDEX_NAME STRING 索引的名称。
COLUMN_NAME STRING 列的名称。
ORDINAL_POSITION INT64 索引(或主键)中列的序号位置,从值 1 开始。对于非键列(例如,索引的 STORING 子句中指定的列),此值为 NULL
COLUMN_ORDERING STRING 列的排序。对于键列,值为 ASCDESC;对于非键列(例如,索引的 STORING 子句中指定的列),值为 NULL
IS_NULLABLE STRING 指明列是否可以为 Null 的字符串。根据 SQL 标准,字符串可以是 YESNO,但不能是布尔值。
SPANNER_TYPE STRING 列的数据类型

INFORMATION_SCHEMA.COLUMN_OPTIONS

此表列出了表中的列选项。

列名 类型 说明
TABLE_CATALOG STRING 目录的名称。始终为空字符串。
TABLE_SCHEMA STRING 架构的名称。默认架构的名称为空,其他架构(例如,INFORMATION_SCHEMA 本身)的名称为非空。 此列从来不会为 null。
TABLE_NAME STRING 表的名称。
COLUMN_NAME STRING 列的名称。
OPTION_NAME STRING 唯一标识选项的 SQL 标识符。此标识符是 DDL 中 OPTIONS 子句的键。
OPTION_TYPE STRING 表示此选项值的类型的数据类型名称。
OPTION_VALUE STRING 描述此选项值的 SQL 字面量。此列的值必须作为查询的一部分进行分析。解析该值所得到的表达式必须可强制转换为 OPTION_TYPE。此列从来不会为 null。

示例

返回有关用户架构中每个表的信息:

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

返回有关用户表 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

返回有关用户架构中每个索引的信息:

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

返回使用默认值以外的选项的所有列:

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

返回数据库当前使用的查询优化器版本:

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

后续步骤

  • 了解可用的内省工具以帮助您调查数据库问题。