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