EMR 开发指南

系统表说明

最近更新时间:2020-04-22 19:43:27

本文来自 ClickHouse 官方文档

  • 系统表用于实现部分系统功能,并提供途径来获取与系统运行状态相关的信息。
  • 系统表无法删除(但可以执行 DETACH)。
  • 系统表中的数据或者元数据没有以文件的方式存储在磁盘上。server 启动时将创建所有系统表。
  • 系统表是只读的。
  • 系统表位于“system”数据库中。

system.asynchronous_metrics

system.asynchronous_metrics 表包含在后台定期计算的指标。例如,正在使用的 RAM 数量。

列信息:

列名 类型 描述
metric String 指标名
value Float64 指标值

示例:

SELECT * FROM system.asynchronous_metrics LIMIT 10

列名 类型 描述
cluster String 集群名称
shard_num UInt32 集群中分片号
shard_weight UInt32 写数据时分片的权重
replica_num UInt32 分片中的副本号
host_name String 主机名
host_address String 主机 IP 地址
port UInt16 用于连接 server 的端口号
user String 用于连接 server 的用户名
errors_count UInt32 该主机无法到达副本的次数
estimated_recovery_time UInt32 从当前到副本错误数为零且被认为恢复正常的时间,单位为秒

system.clusters

system.clusters 表包含配置文件中可用集群以及配置文件中 server 的信息。

列信息:
对于集群的每一个查询,errors_count 都会更新一次,但 estimated_recovery_time 会根据需求重新计算,所以可能会出现这样的情况,当 errors_count 非零、estimated_recovery_time 为零时,下次查询会把 errors_count 置为零,并且尝试使用副本,就好像没有错误一样。

system.columns

system.columns 表包含了所有表的列信息。您可以使用此表获取与 DESCRIBE TABLE 查询类似的信息,并且一次获取多个表的信息。

列信息:

列名 类型 描述
database String 数据库名
table String 表名
name String 列名
type String 列类型
default_kind String 默认值的表达式类型(DEFAULT、MATERIALIZED、ALIAS),或者为空字符串(如果未定义)
default_expression String 默认值的表达式,或者为空字符串(如果未定义)
data_compressed_bytes UInt64 压缩数据的大小,以字节为单位
data_uncompressed_bytes UInt64 解压缩数据的大小,以字节为单位
marks_bytes UInt64 marks的大小,以字节为单位
comment String 列的注释,或者为空字符串(如果未定义)
is_in_partition_key UInt8 表示列是否在分区表达式中的标志
is_in_sorting_key UInt8 表示列是否在排序键表达式中的标志
is_in_primary_key UInt8 表示列是否在主键表达式中的标志
is_in_sampling_key UInt8 表示列是否在采样键表达式中的标志

system.contributors

system.contributors 包含有关贡献者的信息,所有贡献者以随机顺序排列,该顺序在查询执行时是随机的。

system.databases

system.databases 该表仅包含一个名为“name”的 String 列-数据库名称。server 知道每个数据库在表中都有一个对应的条目。该系统表用于实现 SHOW DATABASES 查询。

system.detached_parts

system.detached_parts 包含有关 MergeTree 表的分离 part 的信息。reason 列表示为什么该 part 要分离。对于 user-detache 的部分,reason 列为空。有关其他列的描述,请参见 system.parts。如果 part 的名字非法,则某些列的值可能为 NULL,可以使用ALTER TABLE DROP DETACHED PART删除这些 parts。

system.dictionaries

system.dictionaries 包含有关外部词典的信息。

列信息:

列名 类型 描述
name String 字典名
type String 字典类型,Flat、Hashed、Cache
origin String 描述字典的配置文件的路径
attribute.names Array(String) 字典提供的属性名称数组
attribute.types Array(String) 字典提供的属性类型的对应数组
has_hierarchy UInt8 字典是否分层
bytes_allocated UInt64 字典使用的 RAM 数量
hit_rate Float64 对于缓存字典,该值在缓存中的使用百分比
element_count UInt64 词典中存储的项目数
load_factor Float64 字典中填充的百分比
creation_time DateTime 创建字典或上次成功重新加载字典的时间
last_exception String 错误文本,记录的是因为无法创建字典导致的,创建或重新加载字典时发生的错误
source String 描述字典数据源的文本

system.events

system.events 包含有关系统中发生的事件数的信息。例如,您可以在 system.events 表中找到自 ClickHouse server 启动以来已处理的 SELECT 查询数量。

列信息:

列名 类型 描述
event String 事件名
value UInt64 事件发生的次数
description String 事件描述

示例:

SELECT * FROM system.events LIMIT 5

system.functions

system.functions 包含有关普通函数和聚合函数的信息。

列信息:

列名 类型 描述
name String 函数名
is_aggregate UInt8 是否为聚合函数

system.graphite_retentions

system.graphite_retentions 包含与* GraphiteMergeTree引擎一起在表中使用的关于参数 graphip_rollup 的信息。

列信息:

列名 类型 描述
config_name String graphite_rollup 变量名
regexp String 指标名称的模式
function String 汇总函数的名称
age UInt64 数据的最小使用期限(以秒为单位)
precision UInt64 数据使用期限的精度(以秒为单位)
priority UInt16 模式优先级
is_default UInt8 模式是否为默认
Tables.database Array(String) 使用 config_name 参数的数据库表的名称数组
Tables.table Array(String) 使用 config_name 参数的表名数组

system.merges

system.merges 表包含有关 MergeTree 系列表中当前正在处理的 merge 和 part 突变的信息。

列信息:

列名 类型 描述
database String 表所在的数据库的名称
table String 表名
elapsed Float64 自合并开始起经过的时间(以秒为单位)
progress Float64 已完成工作(从0到1)的百分比
num_parts UInt64 合并件数
result_part_name String 合并后将形成的 part 的名称
is_mutation UInt8 如果此过程是 part 突变,则为1
total_size_bytes_compressed UInt64 合并块中压缩数据的总大小
total_size_marks UInt64 合并 parts 中的 marks 总数
bytes_read_uncompressed UInt64 读取的字节数,未压缩
rows_read UInt64 读取的行数
bytes_written_uncompressed UInt64 写入的字节数,未压缩
rows_written UInt64 写入的行数

system.metrics

system.metrics 表包含可以立即计算或具有当前值的指标。例如,同时处理的查询数或当前副本延迟。该表始终是最新的。

列信息:

列名 类型 描述
metric String 指标名
value Int64 指标值
description String 指标描述

所支持的指标可以在 ClickHouse 的源码文件中找到 dbms/src/Common/CurrentMetrics.cpp

示例:

SELECT * FROM system.metrics LIMIT 10

system.metric_log

system.metric_log 表包含来自表 system.metrics 和 system.events 的指标值的历史记录,定期刷新到磁盘。

要在 system.metric_log 上打开指标历史采集,请按以下内容创建/etc/clickhouse-server/config.d/metric_log.xml,并重启 clickhouse-server:

<yandex>
    <metric_log>
        <database>system</database>
        <table>metric_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <collect_interval_milliseconds>1000</collect_interval_milliseconds>
    </metric_log>
</yandex>

示例:

SELECT * FROM system.metric_log LIMIT 1 FORMAT Vertical;

system.numbers

该表仅包含一个名为“number”的 UInt64 列,其中几乎包含所有从零开始的自然数。您可以使用该表进行测试,或者根据需要进行暴力搜索。从该表读取的数据不会并行化。

system.numbers_mt

与 system.numbers 表相同,但读取是并行的。可以按任何顺序返回数字(用于测试)。

system.one

该表只有一行一列,其中“dummy”列为 UInt8 类型,值为0。如果 SELECT 查询未指定 FROM 子句,则使用此表。这类似于在其他 DBMS 中找到的 DUAL 表。

system.parts

system.parts 包含 MergeTree 表的 parts 信息,每一行描述了一个数据分块。

列信息:

列名 类型 描述
partition String 分区名称
name String 数据分块名
active UInt8 表示数据部分是否处于活跃状态的标志。如果数据分块处于活跃状态,则会在表中使用它。否则,它将被删除。合并后,不活跃的数据分块仍然保留
marks UInt64 marks 数量
rows UInt64 行数
bytes_on_disk UInt64 所有数据分块文件的总大小(以字节为单位)
data_compressed_bytes UInt64 数据分块中压缩数据的总大小。不包括所有辅助文件(例如,带标记的文件)
data_uncompressed_bytes UInt64 数据分块中未压缩数据的总大小。不包括所有辅助文件(例如,带标记的文件)
marks_bytes UInt64 带标记的文件大小
modification_time DateTime 包含数据分块的目录被修改的时间
remove_time DateTime 数据分块变为非活跃状态的时间
refcount UInt32 使用数据分块的位置数。大于2的值表示该数据分块用于查询或合并
min_date Date 数据分块中日期键的最小值
max_date Date 数据分块中日期键的最大值
min_time DateTime 数据分块中日期和时间键的最小值
max_time DateTime 数据分块中日期和时间键的最大值
partition_id String 分区 ID
min_block_number UInt64 合并后组成当前分块的最小数据分块数
max_block_number UInt64 合并后组成当前分块的最大数据分块数
level UInt32 merge tree 的深度。0表示当前分块是通过插入而不是通过合并其他分块来创建的
data_version UInt64 用于确定应将哪些突变应用于数据分块(版本高于 data_version 的突变)
primary_key_bytes_in_memory UInt64 主键值使用的内存量(以字节为单位)
primary_key_bytes_in_memory_allocated UInt64 主键值保留的内存量(以字节为单位)
is_frozen UInt8 表示存在分区数据备份的标志。1,备份存在。0,表示备份不存在
database String 数据库名
table String 表名
engine String 不带参数的表引擎名称
path String 包含数据分块文件的文件夹的绝对路径
disk String 存储数据分块的磁盘名称
hash_of_all_files String sipHash128 的压缩文件
hash_of_uncompressed_files String sipHash128 的未压缩文件(带有标记的文件,索引文件等)
uncompressed_hash_of_compressed_files String sipHash128 压缩文件中的数据,就好像它们是未压缩的一样
bytes UInt64 bytes_on_disk 的别名
marks_size UInt64 mark_bytes 的别名

system.part_log

仅当指定 part_log server 设置时,才会创建 system.part_log 表。该表包含有关 MergeTree 系列表中数据分块发生的事件的信息,例如添加或合并数据。

列信息:

列名 类型 描述
event_type Enum 数据分块发生的事件的类型。可取值为 NEW_PART、MERGE_PARTS、DOWNLOAD_PART、REMOVE_PART、MUTATE_PART、MOVE_PART 其中之一。
event_date Date 事件日期
event_time DateTime 事件时间
duration_ms UInt64 持续时间
database String 数据分块所在的数据库的名称
table String 数据分块所在的表的名称
part_name String 数据分块名
partition_id String 数据分块插入到的分区的 ID
rows UInt64 数据分块的行数
size_in_bytes UInt64 数据分块的大小(以字节为单位)
merged_from Array(String) 组成当前分块的分块名称数组(合并后)
bytes_uncompressed UInt64 未压缩字节的大小
read_rows UInt64 合并期间读取的行数
read_bytes UInt64 合并期间读取的字节数
error UInt16 发生错误的错误码
exception String 发生错误的错误信息

system.part_log 表在第一次将数据插入到 MergeTree 表之后创建。

system.processes

该系统表用于实现 SHOW PROCESSLIST 查询。

列信息:

列名 类型 描述
user String 进行查询的用户
address String 发出请求的 IP 地址
elapsed Float64 自请求执行开始以来的时间(以秒为单位)
rows_read UInt64 从表中读取的行数。对于分布式处理,在请求者 server 上,这是所有远程 server 的总数
bytes_read UInt64 从表中读取的未压缩字节数。对于分布式处理,在请求者 server 上,这是所有远程 server 的总数
total_rows_approx UInt64 应该读取的总行数的近似值。对于分布式处理,在请求者 server 上,这是所有远程 server 的总数
memory_usage UInt64 请求使用的 RAM 量。它可能不包括某些类型的专用内存
query String 查询文本。对于 INSERT,不包含要插入的数据
query_id String 查询 ID(如果已定义)

system.text_log

system.text_log 表包含日志记录条目。可以使用 text_log.level 服务器设置来限制进入该表的日志记录级别。

列信息:

列名 类型 描述
event_date Date 条目日期
event_time DateTime 条目时间
microseconds UInt32 条目时间
thread_name String 进行日志记录的线程的名称
thread_id UInt64 操作系统线程 ID
level Enum8 日志级别。'Fatal' = 1,'Critical' = 2,'Error' = 3,'Warning' = 4,'Notice' = 5,'Information' = 6,'Debug' = 7,'Trace' = 8
query_id String 查询的 ID
logger_name LowCardinality(String) 记录器的名称(如 DDLWorker)
message String 日志信息
revision UInt32 ClickHouse 版本
source_file LowCardinality(String) 完成日志记录的源文件
source_line UInt64 完成记录的源代码行

system.query_log

system.query_log 表包含有关查询执行的信息。对于每个查询,您可以查看处理开始时间、处理持续时间、错误消息和其他信息。

  • 该表不包含 INSERT 查询的输入数据。
  • 只有指定了 query_log server 参数,ClickHouse 才会创建此表。此参数设置日志记录规则,例如日志记录间隔或将要登录查询的表的名称。
  • 要启用查询日志记录,请将 log_queries 参数设置为1。

system.query_log 表注册两种查询:

  • 客户端直接运行的初始查询。
  • 由其他查询(用于分布式查询执行)启动的子查询。对于这些类型的查询,有关父查询的信息显示在initial_*列中。

具体的列信息,可参见 ClickHouse 官网 system.query_log

每个查询根据查询的状态在 query_log 表中创建一两行:

  • 如果查询执行成功,则将创建两个 type 为1和2的事件(请参见 type 列)。
  • 如果查询处理期间发生错误,则会创建两个 type 为1和4的事件。
  • 如果在启动查询之前发生错误,则会创建一个 type 为3的事件。

默认情况下,日志以7.5秒的间隔添加到表中。您可以在 query_log server 中设置此间隔(请参见 flush_interval_milliseconds 参数)。要将日志从内存缓冲区强行刷新到表中,请使用 SYSTEM FLUSH LOGS 查询。

手动删除表后,将即时自动创建它。所有先前的日志将被删除。

NOTE:日志的存储期限不受限制。日志不会自动从表格中删除,用户需自行删除过时的日志。您可以在 query_log server 中为 system.query_log 表指定一个任意分区键(请参阅 partition_by 参数)。

system.query_thread_log

system.query_thread_log 表包含有关每个查询执行线程的信息。

  • 只有指定了 query_thread_log server 参数,ClickHouse 才会创建此表。此参数设置日志记录规则,例如日志记录间隔或将要登录查询的表的名称。
  • 要启用查询日志记录,请将 log_query_threads 参数设置为1。

具体的列信息,可参见 ClickHouse 官网 system.query_thread_log

默认情况下,日志以7.5秒的间隔添加到表中。您可以在 query_log server 中设置此间隔(请参见 flush_interval_milliseconds 参数)。要将日志从内存缓冲区强行刷新到表中,请使用 SYSTEM FLUSH LOGS 查询。

手动删除表后,将即时自动创建它。所有先前的日志将被删除。

NOTE:日志的存储期限不受限制。日志不会自动从表格中删除,用户需自行删除过时的日志。您可以在 query_log server 中为 system.query_log 表指定一个任意分区键(请参阅 partition_by 参数)。

system.trace_log

system.trace_log 表包含由采样查询分析器收集的堆栈跟踪记录。设置 trace_log server 配置部分后,ClickHouse 会创建此表。另外,还应该设置 query_profiler_real_time_period_ns 和 query_profiler_cpu_time_period_ns。要分析日志,请使用 addressToLine、addressToSymbol 和 demangle 自我检查函数。

列信息:

列名 类型 描述
event_date Date 采样日期
event_time DateTIme 采样时间
revision UInt32 ClickHouse server 版本修订
timer_type Enum8 计时器类型,取值 Real、CPU
thread_number UInt32 线程标识符
query_id String 查询标识符,可用于获取有关从 query_log 系统表中运行的查询的详细信息
trace Array(UInt64) 采样时的堆栈跟踪,每个元素都是 ClickHouse server 进程内部的虚拟内存地址

示例:

SELECT * FROM system.trace_log LIMIT 1 \G;

system.replicas

system.replicas 表包含本地服务器上复制表的信息和状态。该表可用于监视,该表为每个Replicated *表包含一行。

列信息:

列名 类型 描述
database String 数据库名
table String 表名
engine String 表引擎名
is_leader UInt8 副本是否为 leader
can_become_leader UInt8 副本是否可以被选为 leader
is_readonly UInt8 副本是否处于只读模式
is_session_expired UInt8 与 ZooKeeper 的会话已过期。基本上与 is_readonly 相同
future_parts UInt32 尚未完成的 INSERTs 或 merges 的结果数据分块数
parts_to_check UInt32 队列中用于验证的数据分块的数量。如果怀疑分块可能已损坏,则将其放入验证队列
zookeeper_path String ZooKeeper 中表数据的路径
replica_name String ZooKeeper 中的副本名称,同一张表的不同副本具有不同的名称
replica_path String ZooKeeper 中复制数据的路径
columns_version Int32 表结构的版本号,表示执行 ALTER 的次数
queue_size UInt32 等待执行操作的队列的大小。操作包括插入数据块,合并及某些其他操作。它通常与 future_parts 一致
inserts_in_queue UInt32 需要插入的数据块的插入数量。插入内容通常会很快复制,如果这个数字很大,则表示有问题
merges_in_queue UInt32 等待进行的合并数。有时合并很长,因此该值可能长时间大于零
part_mutations_in_queue UInt32 等待突变的数量
queue_oldest_time DateTime 如果 queue_size 大于0,则显示何时将最早的操作添加到队列中
inserts_oldest_time DateTime 见 queue_oldest_time
merges_oldest_time DateTime 见 queue_oldest_time
part_mutations_oldest_time DateTime 见 queue_oldest_time
log_max_index UInt64 通用活跃日志中的最大条目数
log_pointer UInt64 副本复制到其执行队列的通用活跃日志中的最大条目数加1。如果 log_pointer 远小于 log_max_index,会出现问题
last_queue_update DateTime 上次更新队列的时间
absolute_delay UInt64 当前副本有几秒钟的延迟
total_replicas UInt8 该表的已知副本总数
active_replicas UInt8 在 ZooKeeper 中具有会话的该表的副本数(即正在运行的副本数)

一次只能有一个副本作为 leader。leader 负责选择要执行的后台 merges。可以写入任何可用并在 ZK 中具有会话的副本,无论其是否为 leader。

  • 如果您请求所有列,则该表的工作可能会有点慢,因为对于每一行都会从 ZooKeeper 进行多次读取。
  • 如果您无需请求最后4列(log_max_index、log_pointer、total_replicas、active_replicas),则该表可以快速运行。

例如,您可以检查所有内容是否正常运行,如下所示:

SELECT
    database,
    table,
    is_leader,
    is_readonly,
    is_session_expired,
    future_parts,
    parts_to_check,
    columns_version,
    queue_size,
    inserts_in_queue,
    merges_in_queue,
    log_max_index,
    log_pointer,
    total_replicas,
    active_replicas
FROM system.replicas
WHERE
       is_readonly
    OR is_session_expired
    OR future_parts > 20
    OR parts_to_check > 10
    OR queue_size > 20
    OR inserts_in_queue > 10
    OR log_max_index - log_pointer > 10
    OR total_replicas < 2
    OR active_replicas < total_replicas

如果此查询未返回任何内容,则表示一切正常。

system.settings

该表包含有关当前正在使用的设置的信息,即用于执行您要从 system.settings 表中读取的查询。

列信息:

列名 类型 描述
name String 设置名
value String 设置值
changed UInt8 设置是在配置中显式定义还是显式更改

示例:

SELECT name,value,changed FROM system.settings WHERE changed;

system.table_engines

该表包含 server 支持的表引擎的描述及其功能支持信息。该表只有一列,表示表引擎的名称。

示例:

select * from system.table_engines limit 5;

system.tables

该表包含 server 知道的每个表的元数据,分离的表未显示在 system.tables 中。

列信息:

列名 类型 描述
database String 表所在的数据库的名称
name String 表名
engine String 表引擎名称(不带参数)
is_temporary UInt8 表示表是否为临时的标志
data_path String 文件系统中表数据的路径
metadata_path String 文件系统中表元数据的路径
metadata_modification_time DateTime 表元数据的最新修改时间
dependencies_database Array(String) 数据库依赖
dependencies_table Array(String) 表依赖(基于当前表的 MaterializedView 表)
create_table_query String 用于创建表的查询
engine_full String 表引擎的参数
partition_key String 表中指定的分区键表达式
sorting_key String 表中指定的排序键表达式
primary_key String 表中指定的主键表达式
sampling_key String 表中指定的采样键表达式

system.tables 表用于 SHOW TABLES 查询实现。

system.zookeeper

如果未配置 ZooKeeper,则该表存在,允许从配置中定义的 ZooKeeper 集群读取数据。该查询在 WHERE 子句中必须具有“path”相等条件。这是 ZooKeeper 中要获取其数据的子代的路径。

查询命令SELECT * FROM system.zookeeper WHERE path ='/ clickhouse';输出/ clickhouse节点上所有子级的数据。要输出所有根节点的数据,请写路径='/'。如果“path”中指定的路径不存在,则会抛出异常。

列信息:

列名 类型 描述
name String 节点名称
path String 节点路径
value String 节点值
dataLength Int32 值的大小
numChildren Int32 后代数
czxid Int64 创建节点的事务的 ID
mzxid Int64 最后更改节点的事务的 ID
pzxid Int64 最后删除或添加后代的事务的 ID
ctime DateTime 节点创建时间
mtime DateTime 节点的最后修改时间
version Int32 节点版本,节点被更改的次数
cversion Int32 添加或删除后代的数量
aversion Int32 ACL 的更改数量
ephemeralOwner Int64 对于临时节点,拥有该节点的会话的 ID

system.mutations

该表包含有关 MergeTree 表的突变及其进度的信息,每个突变命令由单行表示。

列信息:

列名 类型 描述
database String 应用了突变的数据库名称
table String 应用了突变的表名称
mutation_id String 突变 ID
command String 突变命令
create_time DateTime 该突变命令提交执行的时间
block_numbers.partition_id Array(String) 分区 ID
block_numbers.number Array(Int64) 块号
parts_to_do Int64 完成突变需要突变的数据分块的数量
is_done UInt8 突变完成标识
latest_failed_part String 不能突变的最近分块的名称
latest_fail_time DateTime 最近一次分块突变失败的时间
latest_fail_reason String 导致最近的分块突变失败的异常消息

system.disks

该表包含有关 server 配置中定义的磁盘的信息。

列信息:

列名 类型 描述
name String server 配置中的磁盘名称
path String 文件系统中挂载点的路径
free_space UInt64 磁盘上的可用空间(以字节为单位)
total_space UInt64 磁盘卷(以字节为单位)
keep_free_space UInt64 应该在磁盘上保持可用空间的磁盘空间量(以字节为单位)。在磁盘配置的 keep_free_space_bytes 参数中定义

system.storage_policies

该表包含有关 server 配置中定义的存储策略和卷的信息。

列信息:

列名 类型 描述
policy_name String 存储策略名称
volume_name String 存储策略中定义的卷名称
volume_priority UInt64 配置中的卷优先级
disks Array(String) 磁盘名称,在存储策略中定义
max_data_part_size UInt64 可以存储在卷磁盘上的数据分块的最大大小(0 - 无穷)
move_factor Float32 可用磁盘空间比率。当比率超过配置参数的值时,ClickHouse 开始按顺序将数据移至下一个卷

如果存储策略包含一个以上的卷,则每个卷的信息都存储在表的单独一行中。

目录