INFORMATION_SCHEMA (o information_schema) es una base de datos del sistema que proporciona una vista independiente del SGBD de los metadatos de los objetos de la base de datos, de forma casi estandarizada. Por lo general, las vistas de INFORMATION_SCHEMA son menos completas que las tablas del sistema normales, pero las herramientas pueden usarlas para obtener información básica de forma transversal entre distintos SGBD. Se espera que la estructura y el contenido de las vistas de INFORMATION_SCHEMA evolucionen de forma retrocompatible; es decir, solo se añade funcionalidad nueva, pero la funcionalidad existente no se modifica ni se elimina. En cuanto a la implementación interna, las vistas de INFORMATION_SCHEMA suelen corresponder a tablas del sistema normales como system.columns, system.databases y 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 contiene las siguientes vistas:
Se ofrecen vistas equivalentes que no distinguen entre mayúsculas y minúsculas, por ejemplo, INFORMATION_SCHEMA.columns, por motivos de compatibilidad con otras bases de datos. Lo mismo se aplica a todas las columnas de estas vistas: se ofrecen variantes tanto en minúsculas (por ejemplo, table_name) como en mayúsculas (TABLE_NAME).
COLUMNS
Contiene las columnas leídas de la tabla del sistema system.columns y columnas no compatibles con ClickHouse o que no tienen sentido (siempre NULL), pero que el estándar exige.
Columnas:
table_catalog(String) — Actualmente no se utiliza.table_schema(String) — Actualmente no se utiliza.table_name(String) — Actualmente no se utiliza.non_unique(Int32) — Actualmente no se utiliza.index_schema(String) — Actualmente no se utiliza.index_name(Nullable(String)) — Actualmente no se utiliza.seq_in_index(UInt32) — Actualmente no se utiliza.column_name(Nullable(String)) — Actualmente no se utiliza.collation(Nullable(String)) — Actualmente no se utiliza.cardinality(Nullable(Int64)) — Actualmente no se utiliza.sub_part(Nullable(Int64)) — Actualmente no se utiliza.packed(Nullable(String)) — Actualmente no se utiliza.nullable(String) — Actualmente no se utiliza.index_type(String) — Actualmente no se utiliza.comment(String) — Actualmente no se utiliza.index_comment(String) — Actualmente no se utiliza.is_visible(String) — Actualmente no se utiliza.expression(Nullable(String)) — Actualmente no se utiliza.
Ejemplo
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
Contiene columnas leídas de la tabla del sistema system.databases y columnas que no son compatibles con ClickHouse o que no tienen sentido (siempre NULL), pero que el estándar requiere.
Columnas:
catalog_name(String) — El nombre de la base de datos.schema_name(String) — El nombre de la base de datos.schema_owner(String) — Nombre del propietario del esquema, siempre'default'.default_character_set_catalog(Nullable(String)) —NULL, no se admite.default_character_set_schema(Nullable(String)) —NULL, no se admite.default_character_set_name(Nullable(String)) —NULL, no se admite.sql_path(Nullable(String)) —NULL, no se admite.
Ejemplo
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
Contiene las columnas leídas de la tabla del sistema system.tables.
Columnas:
table_catalog(String) — El nombre de la base de datos en la que se encuentra la tabla.table_schema(String) — El nombre de la base de datos en la que se encuentra la tabla.table_name(String) — Nombre de la tabla.table_type(String) — Tipo de tabla. Valores posibles:BASE TABLEVIEWFOREIGN TABLELOCAL TEMPORARYSYSTEM VIEW
table_rows(Nullable(UInt64)) — El número total de filas. NULL si no se pudo determinar.data_length(Nullable(UInt64)) — El tamaño de los datos en disco. NULL si no se pudo determinar.index_length(Nullable(UInt64)) — El tamaño total de la clave primaria, los índices secundarios y todas las marcas.table_collation(Nullable(String)) — La intercalación predeterminada de la tabla. Siempreutf8mb4_0900_ai_ci.table_comment(Nullable(String)) — El comentario utilizado al crear la tabla.
Ejemplo
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
Contiene las columnas leídas de la tabla del sistema system.tables cuando se utiliza el motor de tabla View.
Columnas:
table_catalog(String) — El nombre de la base de datos en la que se encuentra la tabla.table_schema(String) — El nombre de la base de datos en la que se encuentra la tabla.table_name(String) — Nombre de la tabla.view_definition(String) — consultaSELECTde la vista.check_option(String) —NONE, sin comprobación.is_updatable(Enum8) —NO, la vista no es actualizable.is_insertable_into(Enum8) — Indica si la vista creada está materializada. Valores posibles:NO— La vista creada no está materializada.YES— La vista creada está materializada.
is_trigger_updatable(Enum8) —NO, el trigger no es actualizable.is_trigger_deletable(Enum8) —NO, el trigger no se elimina.is_trigger_insertable_into(Enum8) —NO, no se insertan datos en el trigger.
Ejemplo
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
Contiene columnas de la tabla del sistema system.tables que están restringidas por restricciones.
Columnas:
constraint_catalog(String) — Actualmente no se usa. Siempre esdef.constraint_schema(String) — El nombre del esquema (base de datos) al que pertenece la restricción.constraint_name(Nullable(String)) — El nombre de la restricción.table_catalog(String) — Actualmente no se usa. Siempre esdef.table_schema(String) — El nombre del esquema (base de datos) al que pertenece la tabla.table_name(String) — El nombre de la tabla que tiene la restricción.column_name(Nullable(String)) — El nombre de la columna que tiene la restricción.ordinal_position(UInt32) — Actualmente no se usa. Siempre es1.position_in_unique_constraint(Nullable(UInt32)) — Actualmente no se usa. Siempre esNULL.referenced_table_schema(Nullable(String)) — Actualmente no se usa. Siempre es NULL.referenced_table_name(Nullable(String)) — Actualmente no se usa. Siempre es NULL.referenced_column_name(Nullable(String)) — Actualmente no se usa. Siempre es NULL.
Ejemplo
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
Contiene información sobre claves foráneas. Actualmente devuelve un resultado vacío (sin filas), suficiente para ofrecer compatibilidad con herramientas de terceros como Tableau Online.
Columnas:
constraint_catalog(String) — Actualmente no se utiliza.constraint_schema(String) — Actualmente no se utiliza.constraint_name(Nullable(String)) — Actualmente no se utiliza.unique_constraint_catalog(String) — Actualmente no se utiliza.unique_constraint_schema(String) — Actualmente no se utiliza.unique_constraint_name(Nullable(String)) — Actualmente no se utiliza.match_option(String) — Actualmente no se utiliza.update_rule(String) — Actualmente no se utiliza.delete_rule(String) — Actualmente no se utiliza.table_name(String) — Actualmente no se utiliza.referenced_table_name(String) — Actualmente no se utiliza.
STATISTICS
Proporciona información sobre los índices de la tabla. Actualmente devuelve un resultado vacío (sin filas), lo justo para ofrecer compatibilidad con herramientas de terceros como Tableau Online.
COLLATIONS
Proporciona información sobre las intercalaciones disponibles. Contiene las intercalaciones de system.collations, además de dos filas para la compatibilidad con MySQL: utf8mb4_0900_ai_ci — la intercalación que el protocolo MySQL anuncia durante el handshake, en SCHEMATA.DEFAULT_COLLATION_NAME y en TABLES.TABLE_COLLATION — y binary — la seudointercalación que el protocolo MySQL asigna a las columnas numéricas y a otras columnas que no son de tipo String en los metadatos del conjunto de resultados—, para que un client compatible con MySQL que siga las intercalaciones anunciadas hasta esta vista pueda encontrarlas.
Columnas:
collation_name(String) — El nombre de la intercalación.character_set_name(Nullable(String)) — El juego de caracteres asociado (utf8mb4parautf8mb4_0900_ai_ci,binaryparabinary; de lo contrario,NULL). Se proporciona para la compatibilidad con MySQL.id(Nullable(UInt64)) — El ID de la intercalación de MySQL (255parautf8mb4_0900_ai_ci,63parabinary; de lo contrario,NULL). Se proporciona para la compatibilidad con MySQL.is_default(Nullable(String)) — Indica si la intercalación es la predeterminada de su juego de caracteres (Yespara ambas filas de compatibilidad con MySQL; de lo contrario,NULL). Se proporciona para la compatibilidad con MySQL.is_compiled(Nullable(String)) — Indica si la intercalación está compilada en el server (Yespara ambas filas de compatibilidad con MySQL; de lo contrario,NULL). Se proporciona para la compatibilidad con MySQL.sortlen(Nullable(UInt64)) — La longitud mínima de ordenación (0parautf8mb4_0900_ai_ci,1parabinary; de lo contrario,NULL). Se proporciona para la compatibilidad con MySQL.pad_attribute(Nullable(String)) — El atributo de relleno,NO PADoPAD SPACE(NO PADpara ambas filas de compatibilidad con MySQL; de lo contrario,NULL). Se proporciona para la compatibilidad con MySQL.