系统表存储于System数据库中,仅提供数据读取功能,不能被删除或更改,但可以对其进行分离(detach)操作。大多数系统表将其数据存储在RAM中,一个ClickHouse服务在刚启动时便会创建此类系统表。本文为您介绍E-MapReduce(简称EMR)中常用的系统表。

背景信息

system.clusters

该表包含了配置文件中可用的集群及其服务器的信息。

参数 数据类型 描述
cluster String 集群名。
shard_num UInt32 集群中的分片数,从1开始。
shard_weight UInt32 写数据时该分片的相对权重。
replica_num UInt32 分片的副本数量,从1开始。
host_name String 配置中指定的主机名。
host_address String 从DNS获取的主机IP地址。
port UInt16 连接到服务器的端口。
user String 连接到服务器的用户名。
errors_count UInt32 此主机无法访问副本的次数。
slowdowns_count UInt32 在与对端请求建立连接时导致副本更改的slowdown的次数。
estimated_recovery_time UInt32 在复制副本错误计数归零并被视为恢复正常之前剩余的秒数。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.clusters LIMIT 2 FORMAT Vertical;
返回信息如下。
Row 1:
──────
cluster:                 cluster_emr
shard_num:               1
shard_weight:            1
replica_num:             1
host_name:               emr-header-1.cluster-24****
host_address:            192.168.**.**
port:                    9000
is_local:                1
user:                    default
default_database:
errors_count:            0
estimated_recovery_time: 0

Row 2:
──────
cluster:                 cluster_emr
shard_num:               1
shard_weight:            1
replica_num:             2
host_name:               emr-worker-1.cluster-24****
host_address:            192.168.**.**
port:                    9000
is_local:                0
user:                    default
default_database:
errors_count:            0
estimated_recovery_time: 0

system.query_log

该表包含了已执行查询的相关信息。例如,开始时间、处理持续时间和错误消息。

system.query_log表中记录了两种查询:
  • 客户端直接运行的初始查询。
  • 由其它查询启动的子查询(用于分布式查询执行)。 对于这些类型的查询,有关父查询的信息显示在initial_*列。
根据查询的状态(请参见type列),每个查询在查询日志表中创建一行或两行记录:
  • 如果查询执行成功,则会创建typeQueryStartQueryFinish的两行记录信息。
  • 如果在查询处理期间发生错误,则会创建typeQueryStartExceptionWhileProcessing的两行记录信息。
  • 如果在启动查询之前发生错误,则会创建typeExceptionBeforeStart的一行记录信息。
参数 数据类型 描述
type Enum8 执行查询时的事件类型。取值如下:
  • 'QueryStart' = 1:查询成功启动。
  • 'QueryFinish' = 2:查询成功完成。
  • 'ExceptionBeforeStart' = 3:查询执行前有异常。
  • 'ExceptionWhileProcessing' = 4 :查询执行期间有异常。
event_date Date 查询开始日期。
event_time DateTime 查询开始时间。
event_time_microseconds DateTime64 以微秒精度查询开始时间。
query_start_time DateTime 查询执行的开始时间。
query_start_time_microseconds DateTime64 以微秒精度查询执行的开始时间。
query_duration_ms UInt64 查询消耗的时间。单位为毫秒。
read_rows UInt64 从参与了查询的所有表和表函数读取的总行数。包括常用的子查询,IN和JOIN的子查询。对于分布式查询read_rows包括在所有副本上读取的行总数。 每个副本发送它的read_rows值,并且查询的发起方将所有接收到的和本地的值汇总。 缓存卷不会影响此值。
read_bytes UInt64 从参与了查询的所有表和表函数读取的总字节数。包括常用的子查询,IN和JOIN的子查询。对于分布式查询read_bytes包括在所有副本上读取的字节总数。 每个副本发送它的read_bytes值,并且查询的发起方将所有接收到的值和本地的值汇总。 缓存卷不会影响此值。
written_rows UInt64 对于INSERT查询,为写入的行数。 对于其它查询,值为0。
written_bytes UInt64 对于INSERT查询时,为写入的字节数。 对于其它查询,值为0。
result_rows UInt64 SELECT查询结果的行数,或INSERT的行数。
result_bytes UInt64 存储查询结果的RAM量。
memory_usage UInt64 查询使用的内存。
query String 查询语句。
exception String 异常信息。
exception_code Int32 异常码。
stack_trace String 如果查询成功完成,则为空字符串。
is_initial_query UInt8 查询类型。取值如下:
  • 0:由另一个查询发起的,作为分布式查询的一部分。
  • 1:客户端发起的查询。
user String 发起查询的用户。
query_id String 查询ID。
address Ipv6 发起查询的客户端IP地址。
port UInt16 发起查询的客户端端口。
initial_user String 初始查询的用户名(用于分布式查询执行)。
initial_query_id String 初始查询的ID(用于分布式查询执行)。
initial_address Ipv6 运行父查询的IP地址。
initial_port UInt16 进行父查询的客户端端口。
interface UInt8 发起查询的接口。取值如下:
  • 1:TCP
  • 2:HTTP
os_user String 运行clickhouse-client的操作系统的用户名。
client_hostname String 运行clickhouse-client或其他TCP客户端的机器的主机名。
client_name String clickhouse-client或其他TCP客户端的名称。
client_revision UInt32 clickhouse-client或其他TCP客户端的Revision。
client_version_major UInt32 clickhouse-client或其他TCP客户端的Major Version。
client_version_minor UInt32 clickhouse-client或其他TCP客户端的Minor Version。
client_version_patch UInt32 clickhouse-client或其他TCP客户端的Patch component。
http_method UInt8 发起查询的HTTP方法。取值如下:
  • 0:TCP接口的查询
  • 1:GET
  • 2:POST
http_user_agent String HTTP查询中传递的HTTP请求头UserAgent。
quota_key String 在quotas配置里设置的quota key.

详细信息可以参见配额

revision UInt32 ClickHouse revision。
ProfileEvents Map(String,UInt64) 其它事件的指标,可以在表system.events中找到相关的描述。
Settings Map(String,String) 客户端运行查询时更改的设置。要启用对设置的日志记录更改,请将log_query_settings参数设置为1。
thread_ids Array(UInt64) 参与查询的线程数。
Settings.Names Array(String) 客户端运行查询时更改的设置的名称。 要启用对设置的日志记录更改,请将log_query_settings参数设置为1。
Settings.Values Array(String) Settings.Names列中列出的设置的值。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.query_log LIMIT 1 FORMAT Vertical;
返回信息如下。
Row 1:
──────
type:                 QueryStart
event_date:           2021-08-12
event_time:           2021-08-12 14:11:58
query_start_time:     2021-08-12 14:11:58
query_duration_ms:    0
read_rows:            0
read_bytes:           0
written_rows:         0
written_bytes:        0
result_rows:          0
result_bytes:         0
memory_usage:         0
current_database:     default
query:                SELECT * FROM system.query_log LIMIT 1 FORMAT Vertical;
exception_code:       0
exception:            
stack_trace:          
is_initial_query:     1
user:                 default
query_id:             08e1336c-696f-4fad-b01b-255b77e56b1f
address:              ::ffff:127.0.0.1
port:                 60500
initial_user:         default
initial_query_id:     08e1336c-696f-4fad-b01b-255b77e56b1f
initial_address:      ::ffff:127.0.0.1
initial_port:         60500
interface:            1
os_user:              root
client_hostname:      emr-header-1.cluster-235053
client_name:          ClickHouse 
client_revision:      54438
client_version_major: 20
client_version_minor: 8
client_version_patch: 12
http_method:          0
http_user_agent:      
quota_key:            
revision:             54438
thread_ids:           []
ProfileEvents.Names:  []
ProfileEvents.Values: []
Settings.Names:       ['use_uncompressed_cache','load_balancing','max_memory_usage']
Settings.Values:      ['0','random','10000000000']

system.zookeeper

该表可以查到ZooKeeper中的节点信息。

如果未配置ZooKeeper,则该表不存在。 允许从配置中定义的ZooKeeper集群读取数据。 查询必须具有path=条件,或使用WHERE子句设置了path IN条件,这对应于ZooKeeper中要获取数据的子对象的路径。

查询语句SELECT * FROM system.zookeeper WHERE path = '/clickhouse',输出/clickhouse节点的对所有子路径的数据。如果需要输出所有根节点的数据,请写入路径为‘/’。 如果path中指定的路径不存在,则将提示异常。

查询语句SELECT * FROM system.zookeeper WHERE path IN ('/', '/clickhouse'),输出//clickhouse节点上所有子节点的数据。 如果path中指定的路径不存在,则将提示异常。它可以用于一批ZooKeeper路径的查询。

参数 数据类型 描述
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 最后删除或者增加子节点的事务ID。
aversion Int32 ACL的修改次数。
ephemeralOwner Int64 针对临时节点,拥有该节点的事务ID。
示例:您可以执行以下命令,查看表信息。
SELECT *
FROM system.zookeeper
WHERE path = '/clickhouse/tables/01-08/visits/replicas'
FORMAT Vertical
返回信息如下。
Row 1:
──────
name:           example01-08-1.yandex.ru
value:
czxid:          932998691229
mzxid:          932998691229
ctime:          2015-03-27 16:49:51
mtime:          2015-03-27 16:49:51
version:        0
cversion:       47
aversion:       0
ephemeralOwner: 0
dataLength:     0
numChildren:    7
pzxid:          987021031383
path:           /clickhouse/tables/01-08/visits/replicas

Row 2:
──────
name:           example01-08-2.yandex.ru
value:
czxid:          933002738135
mzxid:          933002738135
ctime:          2015-03-27 16:57:01
mtime:          2015-03-27 16:57:01
version:        0
cversion:       37
aversion:       0
ephemeralOwner: 0
dataLength:     0
numChildren:    7
pzxid:          987021252247
path:           /clickhouse/tables/01-08/visits/replicas

system.replicas

该表包含本地服务所有复制表的信息和状态,可以用于监控。

参数 数据类型 描述
database String 数据库名称。
table String 表名。
engine String 表引擎名称。
is_leader UInt8 副本是否是领导者。
一次只有一个副本可以成为领导者。 领导者负责选择要执行的后台合并。
注意 可以对任何可用且在Zookeeper中具有会话的副本执行写操作,不管该副本是否为leader。
can_become_leader UInt8 副本是否可以当选为领导者。
is_readonly UInt8 副本是否处于只读模式。
存在以下情形时,开启此配置:
  • 配置中缺省了zookeeper的部分。
  • 在zookeeper重新加载会话时发生未知错误。
  • 在会话期间重新初始化了zookeeper。
is_session_expired UInt8 与ZooKeeper的会话已经过期。用法基本上与is_readonly相同。
future_parts UInt32 由于尚未完成的插入或合并而显示的数据部分的数量。
parts_to_check UInt32 队列中用于验证的part的数量。 如果怀疑part可能损坏了,则将其放入验证队列。
zookeeper_path String 在ZooKeeper中的表数据路径。
replica_name String ZooKeeper中的副本名称。同一表的不同副本具有不同的名称。
replica_path String ZooKeeper中副本数据的路径。 与 zookeeper_path/replicas/replica_path下的内容相同。
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
merges_oldest_time DateTime
part_mutations_oldest_time DateTime
log_max_index UInt64 一般活动日志中的最大条目数。
注意 存在与ZooKeeper的活动会话时才具有非零值。
log_pointer UInt64 副本复制到其执行队列的常规活动日志中的最大条目数,再加一。 如果log_pointer比log_max_index小,则说明有问题。
注意 存在与ZooKeeper的活动会话时才具有非零值。
last_queue_update DateTime 上次更新队列的时间。
注意 存在与ZooKeeper的活动会话时才具有非零值。
absolute_delay UInt64 当前副本最大延迟时间。单位为秒。
注意 存在与ZooKeeper的活动会话时才具有非零值。
total_replicas UInt8 此表的已知副本总数。
active_replicas UInt8 在ZooKeeper中具有会话的此表的副本的数量(即正常运行的副本的数量)。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.replicas WHERE table = 'visits' FORMAT Vertical
返回信息如下。
Row 1:
──────
database:                   cltest
table:                      flat_xl_customer_local
engine:                     ReplicatedMergeTree
is_leader:                  1
can_become_leader:          1
is_readonly:                0
is_session_expired:         0
future_parts:               0
parts_to_check:             0
zookeeper_path:             /cltest/cluster_emr-1/flat_xl_customer_local
replica_name:               emr-header-1.cluster-235053
replica_path:               /cltest/cluster_emr-1/flat_xl_customer_local/replicas/emr-header-1.cluster-235053
columns_version:            -1
queue_size:                 0
inserts_in_queue:           0
merges_in_queue:            0
part_mutations_in_queue:    0
queue_oldest_time:          1970-01-01 08:00:00
inserts_oldest_time:        1970-01-01 08:00:00
merges_oldest_time:         1970-01-01 08:00:00
part_mutations_oldest_time: 1970-01-01 08:00:00
oldest_part_to_get:         
oldest_part_to_merge_to:    
oldest_part_to_mutate_to:   
log_max_index:              100157
log_pointer:                100158
last_queue_update:          1970-01-01 08:00:00
absolute_delay:             0
total_replicas:             2
active_replicas:            2
zookeeper_exception:        

system.storage_policies

该表包含了有关存储策略和卷的优先级相关的信息。

参数 数据类型 描述
policy_name String 存储策略的名称。
volume_name String 存储策略中定义的卷的名称。
volume_priority UInt64 配置中定义的卷的优先级。
disks String 存储策略中定义的磁盘名称。
max_data_part_size UInt64 可以存储在磁盘卷上的数据part的最大值。
move_factor Float64 可用磁盘空间的比率。当比率超过配置参数的值时,数据将会被移动到下一个卷。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.storage_policies
返回信息如下。
┌policy_name─┬─volume_name─┬─volume_priority─┬─disks────────────┬─volume_type─┬─max_data_part_size┬─move_factor─┐
│ default      │ default     │               1 │ ['default']                       │ JBOD        │                  0 │           0 │
│ hdd_in_order │ single      │               1 │ ['disk1','disk2','disk3','disk4'] │ JBOD        │                  0 │         0.1 │
└───────┴──────┴─────────┴─────────────────┴───────┴─────────┴─────────┘

system.disks

该表包含了配置中定义的磁盘信息。

参数 数据类型 描述
name String 配置的磁盘名称。
path String 文件系统中挂载的磁盘路径。
free_space UInt64 磁盘上的可用空间(Bytes)。
total_space UInt64 磁盘的总空间(Bytes)。
keep_free_space UInt64 磁盘上需要保持空闲的空间。定义在磁盘配置的keep_free_space_bytes 参数中。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.disks;
返回信息如下。
┌─name─┬─path─────────┬──free_space┬─total_space┬─keep_free_space┬─type──┐
│ default │ /var/lib/clickhouse/   │ 17236594688 │ 84014424064 │               0 │ local │
│ disk1   │ /mnt/disk1/clickhouse/ │ 17226108928 │ 84003938304 │        10485760 │ local │
│ disk2   │ /mnt/disk2/clickhouse/ │ 28623364096 │ 84003938304 │        10485760 │ local │
│ disk3   │ /mnt/disk3/clickhouse/ │ 34770505728 │ 84003938304 │        10485760 │ local │
│ disk4   │ /mnt/disk4/clickhouse/ │ 59107045376 │ 84003938304 │        10485760 │ local │
└────┴─────────────┴───────┴──────┴────────┴─────┘