The Information Schema is a special schema that contains virtual tables which are read-only and can be queried to get information about the state of the cluster.
Note
The information schema tables currently only support a limited subset of the otherwise supported DML statements.
Currently unsupported are:
- select count(*)
- group by
The information schema contains a table called tables.
This table can be queried to get a list of all available tables and their settings like the number of shards or number of replicas:
cr> select * from information_schema.tables
... where table_name not like 'my_table%' order by table_name asc
+------------+------------------+--------------------+
| table_name | number_of_shards | number_of_replicas |
+------------+------------------+--------------------+
| documents | 5 | 1 |
| locations | 2 | 0 |
| myblobs | 3 | 1 |
| quotes | 5 | 1 |
+------------+------------------+--------------------+
SELECT 4 rows in set (... sec)
This table can be queried to get a list of all available columns of all tables and their definition like data type and ordinal position inside the table:
cr> select * from information_schema.columns
... where table_name not like 'my_table%' order by table_name asc, column_name asc
+------------+-------------+------------------+-----------+
| table_name | column_name | ordinal_position | data_type |
+------------+-------------+------------------+-----------+
| documents | body | 1 | string |
| documents | title | 2 | string |
| locations | date | 1 | timestamp |
| locations | description | 2 | string |
| locations | kind | 3 | string |
| locations | name | 4 | string |
| locations | position | 5 | integer |
| locations | race | 6 | craty |
| quotes | author | 1 | string |
| quotes | content | 2 | string |
+------------+-------------+------------------+-----------+
SELECT 10 rows in set (... sec)
Note
Columns at Crate are always sorted alphabetically in ascending order despite in which order they were defined on table creation. Thus the ordinal_position reflects the alphabetical position.
This table can be queries to get a list of all defined table constraints, their type, name and which table they are defined in.
Note
Currently only PRIMARY_KEY constraints are supported.
cr> select * from information_schema.table_constraints order by table_name desc limit 10
+------------+-----------------+-----------------+
| table_name | constraint_name | constraint_type |
+------------+-----------------+-----------------+
| my_table9 | first_column | PRIMARY_KEY |
| my_table8 | first_column | PRIMARY_KEY |
| my_table7 | first_column | PRIMARY_KEY |
| my_table6 | first_column | PRIMARY_KEY |
| my_table1 | first_column | PRIMARY_KEY |
+------------+-----------------+-----------------+
SELECT 5 rows in set (... sec)
This table can be queried to get a list of all defined indices of all columns and their definition like index method, expression list and property list. Using a plain index for every column is the default behaviour at Crate, so almost all columns are listed as an index as well:
cr> select * from information_schema.indices
... where table_name not like 'my_table%' order by table_name asc, index_name asc
+------------+---------------------+----------+-------------------+------------------+
| table_name | index_name | method | expressions | properties |
+------------+---------------------+----------+-------------------+------------------+
| documents | body | plain | body | |
| documents | title | plain | title | |
| documents | title_body_ft | fulltext | body, title | analyzer=english |
| locations | date | plain | date | |
| locations | description | plain | description | |
| locations | kind | plain | kind | |
| locations | name | plain | name | |
| locations | name_description_ft | fulltext | description, name | analyzer=english |
| locations | position | plain | position | |
| locations | race | plain | race | |
| quotes | author | plain | author | |
| quotes | content | plain | content | |
+------------+---------------------+----------+-------------------+------------------+
SELECT 12 rows in set (... sec)