0

我正在使用 clickhouse 数据库来加载一些实时指标..所以我用引擎 kafka 创建了一个表,并在其中加载了大约 100 万个指标...但问题是如果我重新启动我的 clickhouse 客户端并且如果我选择 *从表名我无法看到其中加载的数据..我怎样才能看到这些数据?

CREATE TABLE cpuinfo (timestamp String, namespace String, data Float, unit String, plugin_running_on String, version UInt64, last_advertised_time String) ENGINE = Kafka('10.224.54.99:9092', 'cpuout', 'group1', 'JSONEachRow');

上表我创建并开始收集数据如下

select * from cpuinfo

如果我重新启动我的 clickhouse 客户端,然后执行相同的命令,select * from cpuinfo我将无法看到加载的数据......我怎样才能看到数据?

4

1 回答 1

0

您是否按照文档中的建议对 Kafka 表使用 MATERIALIZED VIEW ?

如果您使用 MATERIALIZED VIEW,那么来自 Kafka 的所有消息都将插入到视图中。所以在这种情况下,您应该从视图中选择,而不是从 Kafka 表中选择。

如果您不使用 MATERIALIZED VIEW,那么您只能从 kafka 表中查询一次新消息。当您再次查询时,查询将不会再次返回相同的消息,因为它已经从 Kafka 消费过一次。

如果您需要聚合数据,请使用 SummingMergeTree,如示例中所示。如果您更喜欢原始数据,则可以使用 MergeTree。

时间戳列的类型是字符串。它的格式是什么?我建议您解析时间戳并将其作为 unix 时间戳插入 Kafka。然后您需要使用类型为 UInt64 的时间戳列重新创建表 cpuinfo。

如果您这样做,那么您可以使用以下语句创建视图:

CREATE TABLE cpuinfo_t (
  timestamp UInt64,
  namespace String, 
  data Float, 
  unit String, 
  plugin_running_on String, 
  version UInt64, 
  last_advertised_time String, 
  DAY Date) 
ENGINE = MergeTree 
PARTITION BY DAY 
ORDER BY (DAY, timestamp) SETTINGS index_granularity = 8192;

CREATE MATERIALIZED VIEW cpuinfo_view TO cpuinfo_t AS 
SELECT 
  timestamp, 
  namespace, 
  data, 
  unit, 
  plugin_running_on, 
  version, 
  last_advertised_time, 
  toDate(toDateTime(timestamp)) AS DAY 
FROM cpuinfo;
于 2018-01-25T11:01:23.127 回答