Appearance
ClickHouse 建立物化视图
建立 kafka 引擎的表结构
- 使用 kafka 引擎,将 kafka 的数据以
JSONEachRow
,一行就是一条 json 的结构写入 ClickHouse - 注意 kafka 的数据结构,value 的结构尽量保持一维结构,深度为 1(复杂结构后面再深度研究)
sql
CREATE TABLE test.test_kafkfa
(
`t` DateTime,
`idx` UInt64,
`key` String
)
ENGINE = Kafka('127.0.0.1:9092', 'test1', 'ch-test', 'JSONEachRow');
建立物化视图,将 kafka 数据数据写入表中
- 创建的表有点多,如果出错,这个应该可以优化的
sql
CREATE TABLE test.test_data
(
`t` DateTime,
`idx` UInt64,
`key` String
)
ENGINE = MergeTree
PARTITION BY toYYYYMMDD(t)
ORDER BY (t, key)
TTL toDateTime(t) + toIntervalDay(365)
SETTINGS index_granularity = 8192;
CREATE MATERIALIZED VIEW test.test_writer TO test.test_data
(
`t` DateTime,
`idx` UInt64,
`key` String
) AS
SELECT *
FROM test.test_kafkfa
建立表聚合
sql
CREATE MATERIALIZED VIEW test.test_stat
(
`t` Date,
`key` String,
`s` AggregateFunction(sum, Int64)
)
ENGINE = AggregatingMergeTree
PRIMARY KEY (t, key)
ORDER BY (t, key)
SETTINGS index_granularity = 8192 AS
SELECT
toDate(t) AS t,
key,
sumState(toInt64(idx)) AS s
FROM test.test_data
GROUP BY
t,
key
聚合数据查询
- 聚合表中的数据不可以直接查询,会出现乱码,因为
s
的数据类型是AggregateFunction
该字段是 state 的结果
sql
SELECT *
FROM test.test_stat
┌──────────t─┬─key─┬─s─┐
│ 2021-07-12 │ k-0 │ ( │
│ 2021-07-12 │ k-1 │ 2 │
└────────────┴─────┴───┘
- 再次聚合查询,
select ... group by
,这里会用到sumMerge
函数
sql
SELECT
t,
key,
sumMerge(s)
FROM test.test_stat
GROUP BY
t,
key
┌──────────t─┬─key─┬─sumMerge(s)─┐
│ 2021-07-12 │ k-1 │ 50 │
│ 2021-07-12 │ k-0 │ 40 │
└────────────┴─────┴─────────────┘
日志查看
- 学习视图期间遇到些问题,可以通过查看 error 日志,排查定位问题
bash
tail -f /var/log/clickhouse-server/*err.log