7.3.53. schema

7.3.53.1. 概要

バージョン 5.0.9 で追加.

schema コマンドはデータベース内のスキーマを返します。

このコマンドはデータベースの詳細を知りたいときに便利です。たとえば、データベースを視覚化したり、データベースのGUIを作ったりするときに便利です。

7.3.53.2. 構文

このコマンドに引数はありません:

schema

7.3.53.3. 使い方

以下は出力例を示すためのサンプルスキーマです。

実行例:

table_create Memos TABLE_HASH_KEY ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Memos content COLUMN_SCALAR Text
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Terms TABLE_PAT_KEY ShortText \
  --default_tokenizer TokenBigram \
  --normalizer NormalizerAuto
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Terms memos_content_index \
  COLUMN_INDEX|WITH_POSITION \
  Memos content
# [[0, 1337566253.89858, 0.000355720520019531], true]

このサンプルスキーマに対する schema コマンドの出力は次の通りです。

実行例:

schema
# [
#   [
#     0,
#     1337566253.89858,
#     0.000355720520019531
#   ],
#   {
#     "tables": {
#       "Terms": {
#         "normalizer": {
#           "id": 78,
#           "name": "NormalizerAuto"
#         },
#         "name": "Terms",
#         "tokenizer": {
#           "id": 67,
#           "name": "TokenBigram"
#         },
#         "command": {
#           "command_line": "table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto",
#           "name": "table_create",
#           "arguments": {
#             "key_type": "ShortText",
#             "default_tokenizer": "TokenBigram",
#             "normalizer": "NormalizerAuto",
#             "flags": "TABLE_PAT_KEY",
#             "name": "Terms"
#           }
#         },
#         "indexes": [],
#         "key_type": {
#           "type": "type",
#           "id": 14,
#           "name": "ShortText"
#         },
#         "value_type": null,
#         "token_filters": [],
#         "type": "patricia trie",
#         "id": 258,
#         "columns": {
#           "memos_content_index": {
#             "name": "memos_content_index",
#             "weight": false,
#             "section": false,
#             "compress": null,
#             "command": {
#               "command_line": "column_create --table Terms --name memos_content_index --flags COLUMN_INDEX|WITH_POSITION --type Memos --source content",
#               "name": "column_create",
#               "arguments": {
#                 "source": "content",
#                 "table": "Terms",
#                 "flags": "COLUMN_INDEX|WITH_POSITION",
#                 "name": "memos_content_index",
#                 "type": "Memos"
#               }
#             },
#             "indexes": [],
#             "sources": [
#               {
#                 "table": "Memos",
#                 "id": 257,
#                 "full_name": "Memos.content",
#                 "name": "content"
#               }
#             ],
#             "value_type": {
#               "type": "reference",
#               "id": 256,
#               "name": "Memos"
#             },
#             "full_name": "Terms.memos_content_index",
#             "position": true,
#             "table": "Terms",
#             "type": "index",
#             "id": 259
#           }
#         }
#       },
#       "Memos": {
#         "normalizer": null,
#         "name": "Memos",
#         "tokenizer": null,
#         "command": {
#           "command_line": "table_create --name Memos --flags TABLE_HASH_KEY --key_type ShortText",
#           "name": "table_create",
#           "arguments": {
#             "key_type": "ShortText",
#             "flags": "TABLE_HASH_KEY",
#             "name": "Memos"
#           }
#         },
#         "indexes": [],
#         "key_type": {
#           "type": "type",
#           "id": 14,
#           "name": "ShortText"
#         },
#         "value_type": null,
#         "token_filters": [],
#         "type": "hash table",
#         "id": 256,
#         "columns": {
#           "content": {
#             "name": "content",
#             "weight": false,
#             "section": false,
#             "compress": null,
#             "command": {
#               "command_line": "column_create --table Memos --name content --flags COLUMN_SCALAR --type Text",
#               "name": "column_create",
#               "arguments": {
#                 "table": "Memos",
#                 "flags": "COLUMN_SCALAR",
#                 "name": "content",
#                 "type": "Text"
#               }
#             },
#             "indexes": [
#               {
#                 "table": "Terms",
#                 "section": 0,
#                 "id": 259,
#                 "full_name": "Terms.memos_content_index",
#                 "name": "memos_content_index"
#               }
#             ],
#             "sources": [],
#             "value_type": {
#               "type": "type",
#               "id": 15,
#               "name": "Text"
#             },
#             "full_name": "Memos.content",
#             "position": false,
#             "table": "Memos",
#             "type": "scalar",
#             "id": 257
#           }
#         }
#       }
#     },
#     "normalizers": {
#       "NormalizerNFKC51": {
#         "id": 79,
#         "name": "NormalizerNFKC51"
#       },
#       "NormalizerAuto": {
#         "id": 78,
#         "name": "NormalizerAuto"
#       }
#     },
#     "token_filters": {},
#     "tokenizers": {
#       "TokenBigramSplitSymbolAlphaDigit": {
#         "id": 71,
#         "name": "TokenBigramSplitSymbolAlphaDigit"
#       },
#       "TokenRegexp": {
#         "id": 77,
#         "name": "TokenRegexp"
#       },
#       "TokenBigramIgnoreBlankSplitSymbolAlphaDigit": {
#         "id": 75,
#         "name": "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
#       },
#       "TokenBigram": {
#         "id": 67,
#         "name": "TokenBigram"
#       },
#       "TokenDelimit": {
#         "id": 65,
#         "name": "TokenDelimit"
#       },
#       "TokenUnigram": {
#         "id": 66,
#         "name": "TokenUnigram"
#       },
#       "TokenBigramSplitSymbol": {
#         "id": 69,
#         "name": "TokenBigramSplitSymbol"
#       },
#       "TokenDelimitNull": {
#         "id": 76,
#         "name": "TokenDelimitNull"
#       },
#       "TokenBigramIgnoreBlankSplitSymbolAlpha": {
#         "id": 74,
#         "name": "TokenBigramIgnoreBlankSplitSymbolAlpha"
#       },
#       "TokenBigramSplitSymbolAlpha": {
#         "id": 70,
#         "name": "TokenBigramSplitSymbolAlpha"
#       },
#       "TokenTrigram": {
#         "id": 68,
#         "name": "TokenTrigram"
#       },
#       "TokenBigramIgnoreBlankSplitSymbol": {
#         "id": 73,
#         "name": "TokenBigramIgnoreBlankSplitSymbol"
#       },
#       "TokenBigramIgnoreBlank": {
#         "id": 72,
#         "name": "TokenBigramIgnoreBlank"
#       }
#     },
#     "plugins": {},
#     "types": {
#       "UInt64": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 11,
#         "can_be_value_type": true,
#         "name": "UInt64"
#       },
#       "Int32": {
#         "can_be_key_type": true,
#         "size": 4,
#         "id": 8,
#         "can_be_value_type": true,
#         "name": "Int32"
#       },
#       "Int16": {
#         "can_be_key_type": true,
#         "size": 2,
#         "id": 6,
#         "can_be_value_type": true,
#         "name": "Int16"
#       },
#       "LongText": {
#         "can_be_key_type": false,
#         "size": 2147483648,
#         "id": 16,
#         "can_be_value_type": false,
#         "name": "LongText"
#       },
#       "TokyoGeoPoint": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 17,
#         "can_be_value_type": true,
#         "name": "TokyoGeoPoint"
#       },
#       "Text": {
#         "can_be_key_type": false,
#         "size": 65536,
#         "id": 15,
#         "can_be_value_type": false,
#         "name": "Text"
#       },
#       "ShortText": {
#         "can_be_key_type": true,
#         "size": 4096,
#         "id": 14,
#         "can_be_value_type": false,
#         "name": "ShortText"
#       },
#       "Float": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 12,
#         "can_be_value_type": true,
#         "name": "Float"
#       },
#       "UInt8": {
#         "can_be_key_type": true,
#         "size": 1,
#         "id": 5,
#         "can_be_value_type": true,
#         "name": "UInt8"
#       },
#       "UInt32": {
#         "can_be_key_type": true,
#         "size": 4,
#         "id": 9,
#         "can_be_value_type": true,
#         "name": "UInt32"
#       },
#       "Object": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 2,
#         "can_be_value_type": true,
#         "name": "Object"
#       },
#       "UInt16": {
#         "can_be_key_type": true,
#         "size": 2,
#         "id": 7,
#         "can_be_value_type": true,
#         "name": "UInt16"
#       },
#       "Int64": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 10,
#         "can_be_value_type": true,
#         "name": "Int64"
#       },
#       "Time": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 13,
#         "can_be_value_type": true,
#         "name": "Time"
#       },
#       "Bool": {
#         "can_be_key_type": true,
#         "size": 1,
#         "id": 3,
#         "can_be_value_type": true,
#         "name": "Bool"
#       },
#       "WGS84GeoPoint": {
#         "can_be_key_type": true,
#         "size": 8,
#         "id": 18,
#         "can_be_value_type": true,
#         "name": "WGS84GeoPoint"
#       },
#       "Int8": {
#         "can_be_key_type": true,
#         "size": 1,
#         "id": 4,
#         "can_be_value_type": true,
#         "name": "Int8"
#       }
#     }
#   }
# ]

7.3.53.4. 引数

このセクションではすべての引数について説明します。

7.3.53.4.1. 必須引数

必須の引数はありません。

7.3.53.4.2. 省略可能引数

省略可能な引数はありません。

7.3.53.5. 戻り値

schema はこのデータベースのスキーマを返します。:

[HEADER, SCHEMA]

7.3.53.5.2. SCHEMA

SCHEMA は以下の情報を含んだオブジェクトです。:

{
  "plugins":       PLUGINS,
  "types":         TYPES,
  "tokenizers":    TOKENIZERS,
  "normalizers":   NORMALIZERS,
  "token_filters": TOKEN_FITLERS,
  "tables":        TABLES
}

7.3.53.5.3. PLUGINS

PLUGINS はオブジェクトです。キーはプラグイン名で値はプラグインの詳細です。:

{
  "PLUGIN_NAME_1": PLUGIN_1,
  "PLUGIN_NAME_2": PLUGIN_2,
  ...
  "PLUGIN_NAME_n": PLUGIN_n
}

7.3.53.5.4. PLUGIN

PLUGIN はプラグインの詳細を示すオブジェクトです。

{
  "name": PLUGIN_NAME
}

以下は PLUGIN のプロパティです。

名前 説明
name プラグイン名。 plugin_register で使います。

7.3.53.5.5. TYPES

TYPES はオブジェクトです。キーは型名で、値は型の詳細です。:

{
  "TYPE_NAME_1": TYPE_1,
  "TYPE_NAME_2": TYPE_2,
  ...
  "TYPE_NAME_n": TYPE_n
}

7.3.53.5.6. TYPE

TYPE は型の詳細を示すオブジェクトです。:

{
  "name": TYPE_NAME,
  "size": SIZE_OF_ONE_VALUE_IN_BYTE,
  "can_be_key_type": BOOLEAN,
  "can_be_value_type": BOOLEAN
}

以下は TYPE のプロパティです。

名前 説明
name 型名。
size 1つの値のバイト数です。
can_be_key_type この型をテーブルのキーの型に使えるなら true 、そうでないなら false
can_be_value_type この型をテーブルの値の型に使えるなら true 、そうでないなら false

7.3.53.5.7. TOKENIZERS

TOKENIZERS はオブジェクトです。キーはトークナイザー名で値はトークナイザーの詳細です。:

{
  "TOKENIZER_NAME_1": TOKENIZER_1,
  "TOKENIZER_NAME_2": TOKENIZER_2,
  ...
  "TOKENIZER_NAME_n": TOKENIZER_n
}

7.3.53.5.8. TOKENIZER

TOKENIZER はトークナイザーの詳細を示すオブジェクトです。:

{
  "name": TOKENIZER_NAME
}

以下は TOKENIZER のプロパティです。

名前 説明
name トークナイザー名。 default_tokenizer で使います。

7.3.53.5.9. NORMALIZERS

NORMALIZERS はオブジェクトです。キーはノーマライザー名で値はノーマライザーの詳細です。:

{
  "NORMALIZER_NAME_1": NORMALIZER_1,
  "NORMALIZER_NAME_2": NORMALIZER_2,
  ...
  "NORMALIZER_NAME_n": NORMALIZER_n
}

7.3.53.5.10. NORMALIZER

NORMALIZER はノーマライザーの詳細を示すオブジェクトです。:

{
  "name": NORMALIZER_NAME
}

以下は NORMALIZER のプロパティです。

名前 説明
name ノーマライザー名。 normalizer で使います。

7.3.53.5.11. TOKEN_FILTERS

TOKEN_FILTERS はオブジェクトです。キーはトークンフィルター名で値はトークンフィルターの詳細です。:

{
  "TOKEN_FILTER_NAME_1": TOKEN_FILTER_1,
  "TOKEN_FILTER_NAME_2": TOKEN_FILTER_2,
  ...
  "TOKEN_FILTER_NAME_n": TOKEN_FILTER_n
}

7.3.53.5.12. TOKEN_FILTER

TOKEN_FILTER はトークンフィルターの詳細を示すオブジェクトです。:

{
  "name": TOKEN_FILTER_NAME
}

以下は TOKEN_FILTER のプロパティです。

名前 説明
name トークンフィルター名。 token_filters で使います。

7.3.53.5.13. TABLES

TABLES はオブジェクトです。キーはテーブル名で値はテーブルの詳細です。:

{
  "TABLE_NAME_1": TABLE_1,
  "TABLE_NAME_2": TABLE_2,
  ...
  "TABLE_NAME_n": TABLE_n
}

7.3.53.5.14. TABLE

TABLE はテーブルの詳細を示すオブジェクトです。

{
  "name": TABLE_NAME
  "type": TYPE,
  "key_type": KEY_TYPE,
  "value_type": VALUE_TYPE,
  "tokenizer": TOKENIZER,
  "normalizer": NORMALIZER,
  "token_filters": [
    TOKEN_FILTER_1,
    TOKEN_FILTER_2,
    ...,
    TOKEN_FILTER_n,
  ],
  "indexes": [
    INDEX_1,
    INDEX_2,
    ...,
    INDEX_n
  ],
  "command": COMMAND,
  "columns": {
    "COLUMN_NAME_1": COLUMN_1,
    "COLUMN_NAME_2": COLUMN_2,
    ...,
    "COLUMN_NAME_3": COLUMN_3,
  }
}

以下は TABLE のプロパティです。

名前 説明
name テーブル名。
type

テーブルの種類。

以下のどれかです。

key_type

テーブルのキーの型。

テーブルの種類が array なら null になります。

テーブルの種類が array でなければオブジェクトになります。オブジェクトは次のプロパティを持ちます。

  • name :型名。
  • type :もし型がテーブルなら reference 、そうでないなら type
value_type

テーブルの値の型。

テーブルが「値」を使っていない場合は null になります。

テーブルが「値」を使っている場合はオブジェクトになります。オブジェクトは次のプロパティを持ちます。

  • name :型名。
  • type :もし型がテーブルなら reference 、そうでないなら type
tokenizer

テーブルのトークナイザー。 default_tokenizer で指定されたものです。

テーブルがトークナイザーを使っていない場合は null になります。

テーブルがトークナイザーを使っている場合はオブジェクトになります。オブジェクトは次のプロパティを持ちます。

  • name :トークナイザー名。
normalizer

テーブルのノーマライザー。 normalizer で指定されたものです。

テーブルがノーマライザーを使っていない場合は null になります。

テーブルがノーマライザーを使っている場合はオブジェクトになります。オブジェクトは次のプロパティを持ちます。

  • name :ノーマライザー名。
token_filters

テーブルのトークンフィルターです。 token_filters で指定されたものです。

オブジェクトの配列です。オブジェクトは次のプロパティを持ちます。

  • name :トークンフィルター名。
indexes

テーブルのキーに対するインデックス。

INDEX の配列です。

command

このテーブルを作るためのGroongaコマンドに関する情報。

COMMAND になります。

columns

テーブルのカラム。

オブジェクトです。キーはカラム名で値は COLUMN です。

7.3.53.5.15. INDEX

INDEX はインデックスの詳細を示すオブジェクトです。:

{
  "full_name": INDEX_COLUMN_NAME_WITH_TABLE_NAME,
  "table":     TABLE_NAME,
  "name":      INDEX_COLUMN_NAME,
  "section":   SECTION
}

以下は INDEX のプロパティです。

名前 説明
full_name

テーブル名を含むインデックスカラム名。

例: Terms.index

table

インデックスカラムのテーブル名。

例: Terms

name

インデックスカラム名。

例: index

section

テーブルのキーに対するインデックスカラムのセクション番号。

インデックスカラムがマルチカラムインデックスでない場合は 0 になります。

7.3.53.5.16. COMMAND

COMMAND はこのテーブル・カラムを作る方法を示したオブジェクトです。:

{
  "name": COMMAND_NAME,
  "arguments": {
    "KEY_1": "VALUE_1",
    "KEY_2": "VALUE_2",
    ...,
    "KEY_n": "VALUE_n"
  },
  "command_line": COMMAND_LINE
}

以下は COMMAND のプロパティです。

名前 説明
name このテーブル・カラムを作るGroongaコマンドの名前。
arguments

このテーブル・カラムを作るためのGroongaコマンドの引数。

オブジェクトになります。キーは引数名で値は引数の値です。

command_line

このテーブル・カラムを作るGroongaコマンドのコマンドラインです。

この文字列はGroongaが評価できます。

7.3.53.5.17. COLUMN

COLUMN はカラムの詳細を示したオブジェクトです。:

{
  "name": COLUMN_NAME,
  "table": TABLE_NAME,
  "full_name": COLUMN_NAME_WITH_TABLE,
  "type": TYPE,
  "value_type": VALUE_TYPE,
  "compress": COMPRESS,
  "section": SECTION,
  "weight": WEIGHT,
  "compress": COMPRESS,
  "section": BOOLEAN,
  "weight": BOOLEAN,
  "position": BOOLEAN,
  "sources": [
    SOURCE_1,
    SOURCE_2,
    ...,
    SOURCE_n
  ],
  "indexes": [
    INDEX_1,
    INDEX_2,
    ...,
    INDEX_n
  ],
  "command": COMMAND
}

以下は COLUMN のプロパティです。

名前 説明
name

カラム名。

例: age

table

カラムのテーブル名。

例: Users

full_name

テーブル名を含むカラム名。

例: Users.age

type

カラムの種類。

以下のどれかです。

value_type

カラムの値の型。

オブジェクトです。このオブジェクトは次のプロパティを持ちます。

  • name :型名。
  • type :もし型がテーブルなら reference 、そうでないなら type
compress

カラムの圧縮方法です。

カラムがどの圧縮方法も使っていない場合は null になります。

カラムが圧縮方法を使っている場合は次のどれかになります。

  • zlib :カラムの値を圧縮するためにzlibを使います。
  • lz4 :カラムの値を圧縮するためにLZ4を使います。
section

カラムがセクション情報を保存できるかどうか。

WITH_SECTION フラグ付きでカラムを作ったときは true 、そうでないときは false になります。

通常、インデックスカラムでない場合は false になります。

weight

カラムが重み情報を保存できるかどうか。

WITH_WEIGHT フラグ付きでカラムを作ったときは true 、そうでないときは false になります。

position

カラムが位置情報を保存できるかどうか。

WITH_POSITION フラグ付きでカラムを作ったときは true 、そうでないときは false になります。

通常、インデックスカラムでない場合は false になります。

sources

インデックスカラムのソースカラム。

SOURCE の配列になります。

通常、カラムがインデックスカラムでない場合は空配列になります。

indexes

カラムのインデックス。

INDEX の配列です。

command

このカラムを作るためのGroongaコマンド情報。

COMMAND になります。

7.3.53.5.18. SOURCE

SOURCE はソースの詳細を示すオブジェクトです。:

{
  "name":      COLUMN_NAME,
  "table":     TABLE_NAME,
  "full_name": COLUMN_NAME_WITH_TABLE_NAME
}

以下は SOURCE のプロパティです。

名前 説明
name

ソースカラム名。

例: content

_key 擬似カラムになるかもしれません。

table

ソースカラムのテーブル名。

例: Memos

full_name

テーブル名を含むソースカラム名。

例: Memos.content

7.3.53.6. 参考