ClickHouse/docs/ru/operations/system-tables/information_schema.md
2022-08-26 13:37:11 -04:00

14 KiB
Raw Blame History

slug
/ru/operations/system-tables/information_schema

INFORMATION_SCHEMA

INFORMATION_SCHEMA (information_schema) — это системная база данных, содержащая представления. Используя эти представления, вы можете получить информацию о метаданных объектов базы данных. Эти представления считывают данные из столбцов системных таблиц system.columns, system.databases и system.tables.

Структура и состав системных таблиц могут меняться в разных версиях СУБД ClickHouse, но поддержка information_schema позволяет изменять структуру системных таблиц без изменения способа доступа к метаданным. Запросы метаданных не зависят от используемой СУБД.

SHOW TABLES FROM INFORMATION_SCHEMA;
┌─name─────┐
│ COLUMNS  │
│ SCHEMATA │
│ TABLES   │
│ VIEWS    │
└──────────┘

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

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, не поддерживается.

Пример

Запрос:

SELECT * 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 * 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 (Enum8) — тип таблицы. Возможные значения:
    • BASE TABLE
    • VIEW
    • FOREIGN TABLE
    • LOCAL TEMPORARY
    • SYSTEM VIEW

Пример

Запрос:

SELECT * 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

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 * 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