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────────────────────┐
│ COLLATIONS │
│ 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) — Сейчас не используется.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)) — Сейчас не используется.
Пример
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 TABLEVIEWFOREIGN TABLELOCAL TEMPORARYSYSTEM VIEW
table_rows(Nullable(UInt64)) — Общее количество строк. NULL, если его не удалось определить.data_length(Nullable(UInt64)) — Размер данных на диске. NULL, если его не удалось определить.index_length(Nullable(UInt64)) — Общий размер первичного ключа, вторичных индексов и всех marks.table_collation(Nullable(String)) — collation таблицы по умолчанию. Всегда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: NOKEY_COLUMN_USAGE
Содержит столбцы из системной таблицы system.tables, для которых заданы ограничения.
Столбцы:
constraint_catalog(String) — В настоящее время не используется. Всегдаdef.constraint_schema(String) — Имя схемы (database), к которой относится ограничение.constraint_name(Nullable(String)) — Имя ограничения.table_catalog(String) — В настоящее время не используется. Всегдаdef.table_schema(String) — Имя схемы (database), к которой относится таблица.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.
COLLATIONS
Содержит сведения о доступных collation. Включает collation из system.collations, а также две строки для совместимости с MySQL: utf8mb4_0900_ai_ci — collation, которую протокол MySQL объявляет при рукопожатии, в SCHEMATA.DEFAULT_COLLATION_NAME и TABLES.TABLE_COLLATION, — и binary — псевдо-collation, которую протокол MySQL указывает для числовых и других нестроковых столбцов в метаданных набора результатов. Это позволяет клиенту с поддержкой MySQL, который использует объявленные collation для поиска в этом представлении, находить их.
Столбцы:
collation_name(String) — Имя collation.character_set_name(Nullable(String)) — Связанная кодировка (utf8mb4дляutf8mb4_0900_ai_ci,binaryдляbinary, в остальных случаяхNULL). Предоставляется для совместимости с MySQL.id(Nullable(UInt64)) — Идентификатор collation MySQL (255дляutf8mb4_0900_ai_ci,63дляbinary, в остальных случаяхNULL). Предоставляется для совместимости с MySQL.is_default(Nullable(String)) — Является ли collation значением по умолчанию для своей кодировки (Yesдля обеих строк совместимости с MySQL, в остальных случаяхNULL). Предоставляется для совместимости с MySQL.is_compiled(Nullable(String)) — Встроена ли collation в сервер (Yesдля обеих строк совместимости с MySQL, в остальных случаяхNULL). Предоставляется для совместимости с MySQL.sortlen(Nullable(UInt64)) — Минимальная длина сортировки (0дляutf8mb4_0900_ai_ci,1дляbinary, в остальных случаяхNULL). Предоставляется для совместимости с MySQL.pad_attribute(Nullable(String)) — Атрибут заполнения:NO PADилиPAD SPACE(NO PADдля обеих строк совместимости с MySQL, в остальных случаяхNULL). Предоставляется для совместимости с MySQL.