情報スキーマ

情報スキーマはすべての 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 テーブルまたはビューの名前。
TABLE_TYPE STRING テーブルのタイプ。テーブルの場合、値は BASE TABLE になります。ビューの場合、値は VIEW になります。
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 列のデータ型
IS_GENERATED STRING 列が生成されるかどうかを示す文字列。文字列は、生成された列の場合は ALWAYS、生成されていない列の場合は NEVER になります。
GENERATION_EXPRESSION STRING 生成された列の SQL 式を表す文字列。列が生成された列でない場合は NULL になります。
IS_STORED STRING 生成された列が格納されているかどうかを示す文字列。生成された列の場合、文字列は常に YES で、生成されていない列の場合は NULL になります。
SPANNER_STATE STRING 列の現在の状態。既存のテーブルに追加された、新しく保存されて生成された列は、完全に使用可能になる前に、ユーザーが観察できる複数の状態を経る場合があります。有効な値は次のとおりです。
  • WRITE_ONLY: 列はバックフィル中です。読み取りは許可されません。
  • COMMITTED: この列はすべて使用できます。

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
  • CHECK
  • 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.CHECK_CONSTRAINTS

INFORMATION_SCHEMA.CHECK_CONSTRAINTS テーブルには、CHECK または NOT NULL キーワードのいずれかによって定義された各 CHECK 制約に関する行が 1 つ含まれています。

列名 説明
CONSTRAINT_CATALOG STRING 制約のカタログの名前。この列は null にできませんが、常に空の文字列となります。
CONSTRAINT_SCHEMA STRING 制約のスキーマ名。名前が付いていない場合は空の文字列。
CONSTRAINT_NAME STRING 制約の名前。この列は null にできません。スキーマ定義で明示的に指定されていない場合、システム定義の名前が割り当てられます。
CHECK_CLAUSE STRING CHECK 制約の式。この列は null にできません。
SPANNER_STATE STRING CHECK 制約の現在の状態。この列は null にできません。 可能な状態は次のとおりです。
  • VALIDATING: Cloud Spanner が既存のデータを検証します。
  • COMMITTED: この制約にアクティブなスキーマの変更はありません。

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 にできません。

INFORMATION_SCHEMA.SPANNER_STATISTICS

次の表に、使用可能なクエリ オプティマイザーの統計情報パッケージを示します。

列名 説明
CATALOG_NAME STRING カタログ名。常に空の文字列。
SCHEMA_NAME STRING スキーマ名。この名前は、デフォルトのスキーマでは空となり、他のスキーマでは空になりません(たとえば、INFORMATION_SCHEMA 自体)。 この列は null にできません。
PACKAGE_NAME STRING 統計情報パッケージの名前。
ALLOW_GC BOOL 統計情報パッケージがガベージ コレクションから除外されている場合は False。それ以外の場合は True。
ヒントまたはクライアント API で統計パッケージを参照するには、この属性を False に設定する必要があります。

INFORMATION_SCHEMA.VIEWS

このテーブルには、スキーマ内のビューに関する情報が一覧表示されます。

列名 説明
TABLE_CATALOG STRING カタログ名。常に空の文字列。
TABLE_SCHEMA STRING スキーマ名。名前が付いていない場合は空の文字列。
TABLE_NAME STRING ビューの名前。
VIEW_DEFINITION STRING ビューを定義するクエリの SQL テキスト。

ユーザーのスキーマの各テーブルに関する情報を返します。

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
  s.OPTION_NAME,
  s.OPTION_VALUE
FROM
  INFORMATION_SCHEMA.DATABASE_OPTIONS s
WHERE
  s.OPTION_NAME = 'default_leader'

ユーザーのスキーマにある各インデックスの情報を返します。

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 IN ('optimizer_version',
    'optimizer_statistics_package')

使用可能なすべての統計情報パッケージを返します。

SELECT
  *
FROM
  INFORMATION_SCHEMA.SPANNER_STATISTICS;

次のステップ