情報スキーマ

情報スキーマはすべての 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 に対するクエリでは、タイムスタンプ バウンド(強力、バウンド ステイルネス、正確なステイルネスの 3 種類)を使用できます。

スキーマ内のテーブル

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 インターリーブされたテーブルの場合は CASCADE または NO ACTION に、それ以外の場合は NULL に設定されます。詳細については、テーブル ステートメントをご覧ください。
SPANNER_STATE STRING 大量のオペレーションが含まれる場合、テーブルの作成中に複数の状態を遷移します。たとえば、インデックスのバックフィルを必要とする外部キーでテーブルが作成された場合です。考えられる状態は次のとおりです。
  • ADDING_FOREIGN_KEY: テーブルの外部キーを追加しています。
  • WAITING_FOR_COMMIT: スキーマの変更を確定しています。
  • COMMITTED: テーブルを作成するためのスキーマの変更が commit されました。変更が commit されるまで、テーブルに書き込むことはできません。

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 列が Nullable であるかどうかを示す文字列。SQL 標準に従い、この文字列はブール型ではなく、YESNO になります。
SPANNER_TYPE STRING 列のデータ型

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

このテーブルには、データベース内のテーブルに定義された制約ごとに 1 つの行が表示されます。

列名 説明
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 制約ごとに 1 つの行が表示されます。

列名 説明
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: スキーマの変更が commit されました。

INFORMATION_SCHEMA.KEY_COLUMN_USAGE

このテーブルには、PRIMARY KEYFOREIGN KEY、または UNIQUE の制約によってキーとして制約される TABLE_CONSTRAINTS のテーブルの列ごとに 1 行が表示されます。これらは制約を定義するテーブルの列です。

列名 説明
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

このテーブルには、制約で使用される列ごとに 1 つの行が表示されます。これらの行には、PRIMARY KEY 列と UNIQUE 列の他に、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。外部キーの 2 番目のバックアップ インデックスは、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 の値で始まるインデックス(またはプライマリキー)の列の順序位置。この値は、キーのない列では NULL となります(たとえば、インデックスの STORINGで指定された列など)。
COLUMN_ORDERING STRING 列の順序。 この値はキー列では ASCDESC となり、キーのない列では NULL となります(たとえば、インデックスの STORING 句で指定された列など)。
IS_NULLABLE STRING 列が Nullable であるかどうかを示す文字列。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'

次のステップ