Перейти к основному содержимому
Перейти к основному содержимому

INFORMATION_SCHEMA

INFORMATION_SCHEMA (или: information_schema) — это системная база данных, которая предоставляет (в некотором смысле) стандартизованный, независимый от СУБД взгляд на метаданные объектов базы данных. Представления в INFORMATION_SCHEMA обычно уступают обычным системным таблицам, но инструменты могут использовать их для получения основной информации в кросс-СУБД формате. Структура и содержание представлений в INFORMATION_SCHEMA должны развиваться обратно совместимым образом, то есть добавляется лишь новая функциональность, но существующая не изменяется и не удаляется. Что касается внутренней реализации, представления в INFORMATION_SCHEMA обычно сопоставляются с обычными системными таблицами, такими как system.columns, system.databases и system.tables.

SHOW TABLES FROM INFORMATION_SCHEMA;

-- or:
SHOW TABLES FROM information_schema;
┌─name────────────────────┐
│ COLUMNS                 │
│ KEY_COLUMN_USAGE        │
│ REFERENTIAL_CONSTRAINTS │
│ SCHEMATA                │
| STATISTICS              |
│ TABLES                  │
│ VIEWS                   │
│ columns                 │
│ key_column_usage        │
│ referential_constraints │
│ schemata                │
| statistics              |
│ tables                  │
│ views                   │
└─────────────────────────┘

INFORMATION_SCHEMA содержит следующие представления:

Представлены эквивалентные представления без учёта регистра, например, INFORMATION_SCHEMA.columns, по причинам совместимости с другими базами данных. То же самое касается всех колонок в этих представлениях — доступны как строчные (например, table_name), так и заглавные (TABLE_NAME) варианты.

COLUMNS

Содержит колонки, считанные из системной таблицы system.columns, и колонки, которые не поддерживаются в ClickHouse или не имеют смысла (всегда NULL), но должны быть по стандарту.

Колонки:

  • table_catalog (String) — Имя базы данных, в которой находится таблица.
  • table_schema (String) — Имя базы данных, в которой находится таблица.
  • table_name (String) — Имя таблицы.
  • column_name (String) — Имя колонки.
  • ordinal_position (UInt64) — Позиция колонки в таблице, начиная с 1.
  • column_default (String) — Выражение для значения по умолчанию, или пустая строка, если она не определена.
  • is_nullable (UInt8) — Флаг, указывающий, является ли тип колонки Nullable.
  • data_type (String) — Тип колонки.
  • character_maximum_length (Nullable(UInt64)) — Максимальная длина в байтах для бинарных данных, символьных данных или текстовых данных и изображений. В ClickHouse имеет смысл только для типа данных FixedString. В противном случае возвращается значение NULL.
  • character_octet_length (Nullable(UInt64)) — Максимальная длина в байтах для бинарных данных, символьных данных или текстовых данных и изображений. В ClickHouse имеет смысл только для типа данных FixedString. В противном случае возвращается значение NULL.
  • numeric_precision (Nullable(UInt64)) — Точность приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse это битовая ширина для целочисленных типов и десятичная точность для типов Decimal. В противном случае возвращается значение NULL.
  • numeric_precision_radix (Nullable(UInt64)) — Основание числовой системы — это точность приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse это 2 для целочисленных типов и 10 для типов Decimal. В противном случае возвращается значение NULL.
  • numeric_scale (Nullable(UInt64)) — Масштаб приблизительных числовых данных, точных числовых данных, целочисленных данных или денежных данных. В ClickHouse имеет смысл только для типов Decimal. В противном случае возвращается значение NULL.
  • datetime_precision (Nullable(UInt64)) — Десятичная точность типа данных DateTime64. Для других типов данных возвращается значение NULL.
  • character_set_catalog (Nullable(String)) — NULL, не поддерживается.
  • character_set_schema (Nullable(String)) — NULL, не поддерживается.
  • character_set_name (Nullable(String)) — NULL, не поддерживается.
  • collation_catalog (Nullable(String)) — NULL, не поддерживается.
  • collation_schema (Nullable(String)) — NULL, не поддерживается.
  • collation_name (Nullable(String)) — NULL, не поддерживается.
  • domain_catalog (Nullable(String)) — NULL, не поддерживается.
  • domain_schema (Nullable(String)) — NULL, не поддерживается.
  • domain_name (Nullable(String)) — NULL, не поддерживается.
  • extra (Nullable(String)) — STORED GENERATED для колонок типа MATERIALIZED, VIRTUAL GENERATED для колонок типа ALIAS, DEFAULT_GENERATED для колонок типа DEFAULT, или NULL.

Пример

Запрос:

SELECT table_catalog,
       table_schema,
       table_name,
       column_name,
       ordinal_position,
       column_default,
       is_nullable,
       data_type,
       character_maximum_length,
       character_octet_length,
       numeric_precision,
       numeric_precision_radix,
       numeric_scale,
       datetime_precision,
       character_set_catalog,
       character_set_schema,
       character_set_name,
       collation_catalog,
       collation_schema,
       collation_name,
       domain_catalog,
       domain_schema,
       domain_name,
       column_comment,
       column_type
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (table_schema = currentDatabase() OR table_schema = '')
  AND table_name NOT LIKE '%inner%' 
LIMIT 1 
FORMAT Vertical;

Результат:

Row 1:
──────
table_catalog:            default
table_schema:             default
table_name:               describe_example
column_name:              id
ordinal_position:         1
column_default:
is_nullable:              0
data_type:                UInt64
character_maximum_length: ᴺᵁᴸᴸ
character_octet_length:   ᴺᵁᴸᴸ
numeric_precision:        64
numeric_precision_radix:  2
numeric_scale:            0
datetime_precision:       ᴺᵁᴸᴸ
character_set_catalog:    ᴺᵁᴸᴸ
character_set_schema:     ᴺᵁᴸᴸ
character_set_name:       ᴺᵁᴸᴸ
collation_catalog:        ᴺᵁᴸᴸ
collation_schema:         ᴺᵁᴸᴸ
collation_name:           ᴺᵁᴸᴸ
domain_catalog:           ᴺᵁᴸᴸ
domain_schema:            ᴺᵁᴸᴸ
domain_name:              ᴺᵁᴸᴸ

SCHEMATA

Содержит колонки, считанные из системной таблицы system.databases, и колонки, которые не поддерживаются в ClickHouse или не имеют смысла (всегда NULL), но должны быть по стандарту.

Колонки:

  • catalog_name (String) — Имя базы данных.
  • schema_name (String) — Имя базы данных.
  • schema_owner (String) — Имя владельца схемы, всегда 'default'.
  • default_character_set_catalog (Nullable(String)) — NULL, не поддерживается.
  • default_character_set_schema (Nullable(String)) — NULL, не поддерживается.
  • default_character_set_name (Nullable(String)) — NULL, не поддерживается.
  • sql_path (Nullable(String)) — NULL, не поддерживается.

Пример

Запрос:

SELECT catalog_name,
       schema_name,
       schema_owner,
       default_character_set_catalog,
       default_character_set_schema,
       default_character_set_name,
       sql_path
FROM information_schema.schemata
WHERE schema_name ILIKE 'information_schema' 
LIMIT 1 
FORMAT Vertical;

Результат:

Row 1:
──────
catalog_name:                  INFORMATION_SCHEMA
schema_name:                   INFORMATION_SCHEMA
schema_owner:                  default
default_character_set_catalog: ᴺᵁᴸᴸ
default_character_set_schema:  ᴺᵁᴸᴸ
default_character_set_name:    ᴺᵁᴸᴸ
sql_path:                      ᴺᵁᴸᴸ

TABLES

Содержит колонки, считанные из системной таблицы system.tables.

Колонки:

  • table_catalog (String) — Имя базы данных, в которой находится таблица.
  • table_schema (String) — Имя базы данных, в которой находится таблица.
  • table_name (String) — Имя таблицы.
  • table_type (String) — Тип таблицы. Возможные значения:
    • BASE TABLE
    • VIEW
    • FOREIGN TABLE
    • LOCAL TEMPORARY
    • SYSTEM VIEW
  • table_rows (Nullable(UInt64)) — Общее количество строк. NULL, если не удалось определить.
  • data_length (Nullable(UInt64)) — Размер данных на диске. NULL, если не удалось определить.
  • index_length (Nullable(UInt64)) — Общий размер первичного ключа, вторичных индексов и всех меток.
  • table_collation (Nullable(String)) — Значение по умолчанию коллации таблицы. Всегда utf8mb4_0900_ai_ci.
  • table_comment (Nullable(String)) — Комментарий, использованный при создании таблицы.

Пример

Запрос:

SELECT table_catalog, 
       table_schema, 
       table_name, 
       table_type, 
       table_collation, 
       table_comment
FROM INFORMATION_SCHEMA.TABLES
WHERE (table_schema = currentDatabase() OR table_schema = '')
  AND table_name NOT LIKE '%inner%'
LIMIT 1 
FORMAT Vertical;

Результат:

Row 1:
──────
table_catalog:   default
table_schema:    default
table_name:      describe_example
table_type:      BASE TABLE
table_collation: utf8mb4_0900_ai_ci
table_comment:   

VIEWS

Содержит колонки, считанные из системной таблицы system.tables, когда используется движок таблицы View.

Колонки:

  • table_catalog (String) — Имя базы данных, в которой находится таблица.
  • table_schema (String) — Имя базы данных, в которой находится таблица.
  • table_name (String) — Имя таблицы.
  • view_definition (String) — Запрос SELECT для представления.
  • check_option (String) — NONE, без проверки.
  • is_updatable (Enum8) — NO, представление не обновляется.
  • is_insertable_into (Enum8) — Указывает, является ли созданное представление материализованным. Возможные значения:
    • NO — Созданное представление не является материализованным.
    • YES — Созданное представление является материализованным.
  • is_trigger_updatable (Enum8) — NO, триггер не обновляется.
  • is_trigger_deletable (Enum8) — NO, триггер не удаляется.
  • is_trigger_insertable_into (Enum8) — NO, данные не вставляются в триггер.

Пример

Запрос:

CREATE VIEW v (n Nullable(Int32), f Float64) AS SELECT n, f FROM t;
CREATE MATERIALIZED VIEW mv ENGINE = Null AS SELECT * FROM system.one;
SELECT table_catalog,
       table_schema,
       table_name,
       view_definition,
       check_option,
       is_updatable,
       is_insertable_into,
       is_trigger_updatable,
       is_trigger_deletable,
       is_trigger_insertable_into
FROM information_schema.views
WHERE table_schema = currentDatabase() 
LIMIT 1
FORMAT Vertical;

Результат:

Row 1:
──────
table_catalog:              default
table_schema:               default
table_name:                 mv
view_definition:            SELECT * FROM system.one
check_option:               NONE
is_updatable:               NO
is_insertable_into:         YES
is_trigger_updatable:       NO
is_trigger_deletable:       NO
is_trigger_insertable_into: NO

KEY_COLUMN_USAGE

Содержит колонки из системной таблицы system.tables, которые ограничены ограничениями.

Колонки:

  • constraint_catalog (String) — В настоящее время не используется. Всегда def.
  • constraint_schema (String) — Имя схемы (базы данных), к которой принадлежит ограничение.
  • constraint_name (Nullable(String)) — Имя ограничения.
  • table_catalog (String) — В настоящее время не используется. Всегда def.
  • table_schema (String) — Имя схемы (базы данных), к которой принадлежит таблица.
  • table_name (String) — Имя таблицы, имеющей ограничение.
  • column_name (Nullable(String)) — Имя колонки, имеющей ограничение.
  • ordinal_position (UInt32) — В настоящее время не используется. Всегда 1.
  • position_in_unique_constraint (Nullable(UInt32)) — В настоящее время не используется. Всегда NULL.
  • referenced_table_schema (Nullable(String)) — В настоящее время не используется. Всегда NULL.
  • referenced_table_name (Nullable(String)) — В настоящее время не используется. Всегда NULL.
  • referenced_column_name (Nullable(String)) — В настоящее время не используется. Всегда NULL.

Пример

CREATE TABLE test (i UInt32, s String) ENGINE MergeTree ORDER BY i;
SELECT constraint_catalog,
       constraint_schema,
       constraint_name,
       table_catalog,
       table_schema,
       table_name,
       column_name,
       ordinal_position,
       position_in_unique_constraint,
       referenced_table_schema,
       referenced_table_name,
       referenced_column_name
FROM information_schema.key_column_usage 
WHERE table_name = 'test' 
FORMAT Vertical;

Результат:

Row 1:
──────
constraint_catalog:            def
constraint_schema:             default
constraint_name:               PRIMARY
table_catalog:                 def
table_schema:                  default
table_name:                    test
column_name:                   i
ordinal_position:              1
position_in_unique_constraint: ᴺᵁᴸᴸ
referenced_table_schema:       ᴺᵁᴸᴸ
referenced_table_name:         ᴺᵁᴸᴸ
referenced_column_name:        ᴺᵁᴸᴸ

REFERENTIAL_CONSTRAINTS

Содержит информацию о внешних ключах. В настоящее время возвращает пустой результат (нет строк), что достаточно для обеспечения совместимости с инструментами третьих сторон, такими как Tableau Online.

Колонки:

  • constraint_catalog (String) — В настоящее время не используется.
  • constraint_schema (String) — В настоящее время не используется.
  • constraint_name (Nullable(String)) — В настоящее время не используется.
  • unique_constraint_catalog (String) — В настоящее время не используется.
  • unique_constraint_schema (String) — В настоящее время не используется.
  • unique_constraint_name (Nullable(String)) — В настоящее время не используется.
  • match_option (String) — В настоящее время не используется.
  • update_rule (String) — В настоящее время не используется.
  • delete_rule (String) — В настоящее время не используется.
  • table_name (String) — В настоящее время не используется.
  • referenced_table_name (String) — В настоящее время не используется.

STATISTICS

Предоставляет информацию об индексах таблицы. В настоящее время возвращает пустой результат (нет строк), что достаточно для обеспечения совместимости с инструментами третьих сторон, такими как Tableau Online.

Колонки:

  • table_catalog (String) — В настоящее время не используется.
  • table_schema (String) — В настоящее время не используется.
  • table_name (String) — В настоящее время не используется.
  • non_unique (Int32) — В настоящее время не используется.
  • index_schema (String) — В настоящее время не используется.
  • index_name (Nullable(String)) — В настоящее время не используется.
  • seq_in_index (UInt32) — В настоящее время не используется.
  • column_name (Nullable(String)) — В настоящее время не используется.
  • collation (Nullable(String)) — В настоящее время не используется.
  • cardinality (Nullable(Int64)) — В настоящее время не используется.
  • sub_part (Nullable(Int64)) — В настоящее время не используется.
  • packed (Nullable(String)) — В настоящее время не используется.
  • nullable (String) — В настоящее время не используется.
  • index_type (String) — В настоящее время не используется.
  • comment (String) — В настоящее время не используется.
  • index_comment (String) — В настоящее время не используется.
  • is_visible (String) — В настоящее время не используется.
  • expression (Nullable(String)) — В настоящее время не используется.