INFORMATION_SCHEMA (ou information_schema) é um banco de dados de sistema que fornece uma visão independente de SGBD (em certa medida) padronizada dos metadados de objetos de banco de dados. As VIEWs em INFORMATION_SCHEMA geralmente são inferiores às tabelas de sistema normais, mas ferramentas podem usá-las para obter informações básicas de forma compatível entre diferentes SGBDs. Espera-se que a estrutura e o conteúdo das VIEWs em INFORMATION_SCHEMA evoluam de maneira retrocompatível, ou seja, apenas novas funcionalidades sejam adicionadas, sem que as funcionalidades existentes sejam alteradas ou removidas. Em termos de implementação interna, as VIEWs em INFORMATION_SCHEMA normalmente mapeiam para tabelas de sistema normais, como system.columns, system.databases e 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 contém as seguintes VIEWs:
VIEWs equivalentes sem distinção entre maiúsculas e minúsculas, por exemplo INFORMATION_SCHEMA.columns, são fornecidas por motivos de compatibilidade com outros bancos de dados. O mesmo se aplica a todas as colunas dessas VIEWs: são fornecidas variantes tanto em minúsculas (por exemplo, table_name) quanto em maiúsculas (TABLE_NAME).
COLUMNS
Contém colunas lidas da tabela de sistema system.columns, além de colunas que não são compatíveis com o ClickHouse ou não fazem sentido (sempre NULL), mas são exigidas pelo padrão.
Colunas:
table_catalog(String) — Atualmente não é usado.table_schema(String) — Atualmente não é usado.table_name(String) — Atualmente não é usado.non_unique(Int32) — Atualmente não é usado.index_schema(String) — Atualmente não é usado.index_name(Nullable(String)) — Atualmente não é usado.seq_in_index(UInt32) — Atualmente não é usado.column_name(Nullable(String)) — Atualmente não é usado.collation(Nullable(String)) — Atualmente não é usado.cardinality(Nullable(Int64)) — Atualmente não é usado.sub_part(Nullable(Int64)) — Atualmente não é usado.packed(Nullable(String)) — Atualmente não é usado.nullable(String) — Atualmente não é usado.index_type(String) — Atualmente não é usado.comment(String) — Atualmente não é usado.index_comment(String) — Atualmente não é usado.is_visible(String) — Atualmente não é usado.expression(Nullable(String)) — Atualmente não é usado.
Exemplo
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
Contém colunas lidas da tabela de sistema system.databases e colunas que não são suportadas no ClickHouse ou não fazem sentido (sempre NULL), mas são exigidas pelo padrão.
Colunas:
catalog_name(String) — O nome do banco de dados.schema_name(String) — O nome do banco de dados.schema_owner(String) — Nome do proprietário do schema, sempre'default'.default_character_set_catalog(Nullable(String)) —NULL, não suportado.default_character_set_schema(Nullable(String)) —NULL, não suportado.default_character_set_name(Nullable(String)) —NULL, não suportado.sql_path(Nullable(String)) —NULL, não suportado.
Exemplo
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
Contém as colunas lidas da tabela de sistema system.tables.
Colunas:
table_catalog(String) — O nome do banco de dados em que a tabela está localizada.table_schema(String) — O nome do banco de dados em que a tabela está localizada.table_name(String) — Nome da tabela.table_type(String) — Tipo da tabela. Valores possíveis:BASE TABLEVIEWFOREIGN TABLELOCAL TEMPORARYSYSTEM VIEW
table_rows(Nullable(UInt64)) — O número total de linhas. NULL se não puder ser determinado.data_length(Nullable(UInt64)) — O tamanho dos dados em disco. NULL se não puder ser determinado.index_length(Nullable(UInt64)) — O tamanho total da chave primária, dos índices secundários e de todas as marcas.table_collation(Nullable(String)) — A collation padrão da tabela. Sempreutf8mb4_0900_ai_ci.table_comment(Nullable(String)) — O comentário usado ao criar a tabela.
Exemplo
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
Contém colunas lidas da tabela de sistema system.tables, quando o motor de tabela View é usado.
Colunas:
table_catalog(String) — O nome do banco de dados em que a tabela está localizada.table_schema(String) — O nome do banco de dados em que a tabela está localizada.table_name(String) — Nome da tabela.view_definition(String) — consultaSELECTda view.check_option(String) —NONE, sem verificação.is_updatable(Enum8) —NO, a view não é atualizável.is_insertable_into(Enum8) — Mostra se a view criada é materializada. Valores possíveis:NO— A view criada não é materializada.YES— A view criada é materializada.
is_trigger_updatable(Enum8) —NO, o gatilho não é atualizável.is_trigger_deletable(Enum8) —NO, o gatilho não pode ser excluído.is_trigger_insertable_into(Enum8) —NO, nenhum dado é inserido no gatilho.
Exemplo
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
Contém colunas da tabela de sistema system.tables às quais se aplicam restrições.
Colunas:
constraint_catalog(String) — Atualmente sem uso. Sempredef.constraint_schema(String) — O nome do schema (banco de dados) ao qual a restrição pertence.constraint_name(Nullable(String)) — O nome da restrição.table_catalog(String) — Atualmente sem uso. Sempredef.table_schema(String) — O nome do schema (banco de dados) ao qual a tabela pertence.table_name(String) — O nome da tabela à qual a restrição se aplica.column_name(Nullable(String)) — O nome da coluna à qual a restrição se aplica.ordinal_position(UInt32) — Atualmente sem uso. Sempre1.position_in_unique_constraint(Nullable(UInt32)) — Atualmente sem uso. SempreNULL.referenced_table_schema(Nullable(String)) — Atualmente sem uso. Sempre NULL.referenced_table_name(Nullable(String)) — Atualmente sem uso. Sempre NULL.referenced_column_name(Nullable(String)) — Atualmente sem uso. Sempre NULL.
Exemplo
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
Contém informações sobre chaves estrangeiras. No momento, retorna um resultado vazio (nenhuma linha), o que basta para fornecer compatibilidade com ferramentas de terceiros, como o Tableau Online.
Colunas:
constraint_catalog(String) — No momento, não é utilizado.constraint_schema(String) — No momento, não é utilizado.constraint_name(Nullable(String)) — No momento, não é utilizado.unique_constraint_catalog(String) — No momento, não é utilizado.unique_constraint_schema(String) — No momento, não é utilizado.unique_constraint_name(Nullable(String)) — No momento, não é utilizado.match_option(String) — No momento, não é utilizado.update_rule(String) — No momento, não é utilizado.delete_rule(String) — No momento, não é utilizado.table_name(String) — No momento, não é utilizado.referenced_table_name(String) — No momento, não é utilizado.
STATISTICS
Fornece informações sobre os índices da tabela. Atualmente, retorna um resultado vazio (nenhuma linha), o suficiente apenas para garantir compatibilidade com ferramentas de terceiros, como o Tableau Online.
COLLATIONS
Fornece informações sobre as collations disponíveis. Contém as collations de system.collations, além de duas linhas para compatibilidade com MySQL: utf8mb4_0900_ai_ci — a collation anunciada pelo protocolo MySQL durante o handshake, em SCHEMATA.DEFAULT_COLLATION_NAME e em TABLES.TABLE_COLLATION — e binary — a pseudocollation atribuída pelo protocolo MySQL a colunas numéricas e outras colunas que não são do tipo String nos metadados do conjunto de resultados — para que clientes compatíveis com MySQL que consultem as collations anunciadas nesta VIEW possam encontrá-las.
Colunas:
collation_name(String) — O nome da collation.character_set_name(Nullable(String)) — O conjunto de caracteres associado (utf8mb4parautf8mb4_0900_ai_ci,binaryparabinaryeNULLnos demais casos). Fornecido para compatibilidade com MySQL.id(Nullable(UInt64)) — O ID da collation do MySQL (255parautf8mb4_0900_ai_ci,63parabinaryeNULLnos demais casos). Fornecido para compatibilidade com MySQL.is_default(Nullable(String)) — Indica se a collation é a padrão do respectivo conjunto de caracteres (Yespara ambas as linhas de compatibilidade com MySQL eNULLnos demais casos). Fornecido para compatibilidade com MySQL.is_compiled(Nullable(String)) — Indica se a collation está compilada no servidor (Yespara ambas as linhas de compatibilidade com MySQL eNULLnos demais casos). Fornecido para compatibilidade com MySQL.sortlen(Nullable(UInt64)) — O comprimento mínimo de ordenação (0parautf8mb4_0900_ai_ci,1parabinaryeNULLnos demais casos). Fornecido para compatibilidade com MySQL.pad_attribute(Nullable(String)) — O atributo de preenchimento,NO PADouPAD SPACE(NO PADpara ambas as linhas de compatibilidade com MySQL eNULLnos demais casos). Fornecido para compatibilidade com MySQL.