有没有可以在clickhouse中找到所有表索引的表?

Posted

技术标签:

【中文标题】有没有可以在clickhouse中找到所有表索引的表?【英文标题】:Is there any table where I can find all table indexes in clickhouse? 【发布时间】:2021-03-30 10:43:23 【问题描述】:

我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些想法如何实现这一点。现在,我可以通过解析create_table_query字段来获取所有表索引,有没有直接存储索引信息的表,如mysql information_schema.STATISTICS


 select t.*,splitByString(' TYPE ',trim(index_column)) as index_info,
 mid(index_info[1],POSITION (index_info[1],' ') + 1 ,100) index_columns,
 index_info[2] as index_type
 from (
 select database ,name as table_name,engine,create_table_query ,total_rows, partition_key ,sorting_key ,primary_key ,sampling_key ,
 extractAll(create_table_query,'INDEX(.*?)GRANULARITY') index_arr
 from `system`.tables t where database  in ('ods','uds','efc','dss','old')
 and engine not in ('View')
 ) t 
 left ARRAY JOIN index_arr as index_column

【问题讨论】:

【参考方案1】:

只有带有 ENGINE *MergeTree 系列的表才有索引, 每个 *MergeTree 表都有主索引(不是唯一的),您可以通过SELECT * FROM system.columns WHERE is_in_primary_key=1了解主索引中包含哪些字段

此外,二级数据跳过索引可用, https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexes

但不幸的是,没有可用的 system.* 表来显示表中存在的辅助数据跳过索引

如果您想知道查询期间使用哪些二级数据跳过索引以及如何使用,您可以使用以下 SQL 查询

SET send_logs_level='trace';
SELECT ... your query;

看看

Index `index_name` has dropped X/Y granules

【讨论】:

以上是关于有没有可以在clickhouse中找到所有表索引的表?的主要内容,如果未能解决你的问题,请参考以下文章

ClickHouse学习-建表和索引的优化点

ClickHouse学习-建表和索引的优化点

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

ClickHouse 合并树表引擎 MergeTree 索引与数据存储方式