我正在使用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
,则无法看到加载的数据...如何查看数据? 最佳答案
您是否按照documentation中的建议对Kafka表使用了MATERIALIZED VIEW?
如果您使用MATERIALIZED VIEW,则来自Kafka的所有消息都将插入到该视图中。因此,在这种情况下,您应该从视图中选择,而不是从Kafka表中选择。
如果不使用MATERIALIZED VIEW,则只能从kafka表中查询新消息一次。当您再次查询时,查询将不会再次返回相同的消息,因为它已经从Kafka中使用过一次。
如果您需要聚合的数据,请使用示例中的SummingMergeTree。
如果您喜欢原始数据,则可以使用MergeTree。
时间戳列的类型为字符串。它的格式是什么?
我建议您解析时间戳记并将其作为unix时间戳记插入到Kafka中。
然后,您需要使用类型为UInt64的带有timestamp列的表重新创建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;