如果我重启我的clickhouse服务器,则无法在clickhouse中看到加载的数据

时间:2018-01-25 05:51:57

标签: mysql apache-kafka clickhouse

我正在使用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我无法看到加载的数据...我怎样才能看到数据?

1 个答案:

答案 0 :(得分:0)

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

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

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

如果您需要汇总数据,请使用SummingMergeTree,如示例所示。 如果您更喜欢原始数据,那么您可以使用MergeTree。

timestamp列的类型是String。它的格式是什么? 我建议你解析时间戳并将其作为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;