1。概要
Live view 是一种特殊的视图,不属于表引擎,作用类似于事件监听器,能够将一条SQL查询结果作为监控目标,当目标增加 Live view 可以及时作出响应。
データ分析の分野では、アナリストは移動平均(MA)を使用することがよくあります。移動平均は、データ系列をスムーズにし、長期的な傾向を判断するのに役立ちます。新しいライブビュー機能
は、ClickHouseに实时计算功能
(リアルタイム)をもたらし始めました。
ライブビューテーブルのアプリケーションの1つは、リアルタイムインジケータのリアルタイム計算です。イベントデータストリームの例には、IoTセンサーからのデータ、証券取引所での価格変動、または本番サーバーからの特定の監視インジケーターが含まれます。
ClickHouseは、これらすべてのデータを優れた圧縮率で保存し、優れた分析クエリパフォーマンスを提供できます。
バージョンの進化:
19.14 版本提供 Live view 视图
20.1.2.4 版本提供实时移动平均功能
関連パラメーター:
Clickhouse> select name ,value,changed,min,max,readonly,type from system.settings where name like '%live_view%';
SELECT
name,
value,
changed,
min,
max,
readonly,
type
FROM system.settings
WHERE name LIKE '%live_view%'
┌─name───────────────────────────────────────┬─value─┬─changed─┬─min──┬─max──┬─readonly─┬─type───────────┐
│ allow_experimental_live_view │ 0 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ SettingBool │
│ live_view_heartbeat_interval │ 15 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ SettingSeconds │
│ max_live_view_insert_blocks_before_refresh │ 64 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ SettingUInt64 │
│ temporary_live_view_timeout │ 5 │ 0 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ SettingSeconds │
└────────────────────────────────────────────┴───────┴─────────┴──────┴──────┴──────────┴────────────────┘
4 rows in set. Elapsed: 0.018 sec.
ライブビュー静止画实验功能
(実験機能)はパラメータをオンにする必要がありますallow_experimental_live_view
:
手動設定:
Clickhouse> set allow_experimental_live_view=1;
SET allow_experimental_live_view = 1
Ok.
0 rows in set. Elapsed: 0.001 sec.
Clickhouse> select name ,value,changed,min,max,readonly,type from system.settings where name like '%live_view%';
┌─name───────────────────────────────────────┬─value─┬─changed─┬─min──┬─max──┬─readonly─┬─type───────────┐
│ allow_experimental_live_view │ 1 │ 1 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ SettingBool │
.........
└────────────────────────────────────────────┴───────┴─────────┴──────┴──────┴──────────┴────────────────┘
4 rows in set. Elapsed: 0.006 sec.
簡単な例:
Clickhouse> create table t_lv(id UInt64)engine=Log;
CREATE TABLE t_lv
(
`id` UInt64
)
ENGINE = Log
Ok.
0 rows in set. Elapsed: 0.011 sec.
Clickhouse> create live view lv_count as select count(1) from t_lv;
CREATE LIVE VIEW lv_count AS
SELECT count(1)
FROM t_lv
Ok.
0 rows in set. Elapsed: 0.015 sec.
Clickhouse> watch lv_count;
WATCH lv_count
┌─count(1)─┬─_version─┐
│ 0 │ 1 │
└──────────┴──────────┘
ライブビューが監視モードになります。別のクライアントでは、データを挿入する操作を実行できます。
Clickhouse> insert into t_lv select rand() from numbers(10);
┌─count(1)─┬─_version─┐
│ 10 │ 2 │
└──────────┴──────────┘
移動平均計算の例:
Clickhouse> create table t_events(id UInt64,create_time datetime default now())ENGINE = Memory;
Clickhouse> select sum(id)/10 from(select * from t_events order by create_time desc limit 10);
テストデータを挿入します。
Clickhouse> INSERT INTO t_events VALUES (1,now()-9), (2,now()-8), (3,now()-7), (4,now()-6), (5,now()-5), (6,now()-4), (7,now()-3), (8,now()-2), (9,now()-1), (10,now());
平均を計算します。
Clickhouse> select sum(id)/10 from(select * from t_events order by create_time desc limit 10);
SELECT sum(id) / 10
FROM
(
SELECT *
FROM t_events
ORDER BY create_time DESC
LIMIT 10
)
┌─divide(sum(id), 10)─┐
│ 5.5 │
└─────────────────────┘
1 rows in set. Elapsed: 0.013 sec.
Clickhouse> CREATE LIVE VIEW latest_10 as select sum(id)/10 from(select * from t_events order by create_time desc limit 10);
Clickhouse> select * from latest_10;
SELECT *
FROM latest_10
┌─divide(sum(id), 10)─┐
│ 5.5 │
└─────────────────────┘
1 rows in set. Elapsed: 0.007 sec.
—新しいレコードを挿入して、最新の10個のデータの平均を表示します。
Clickhouse> select * from t_events;
SELECT *
FROM t_events
┌─id─┬─────────create_time─┐
│ 1 │ 2020-06-15 15:17:21 │
│ 2 │ 2020-06-15 15:17:22 │
│ 3 │ 2020-06-15 15:17:23 │
│ 4 │ 2020-06-15 15:17:24 │
│ 5 │ 2020-06-15 15:17:25 │
│ 6 │ 2020-06-15 15:17:26 │
│ 7 │ 2020-06-15 15:17:27 │
│ 8 │ 2020-06-15 15:17:28 │
│ 9 │ 2020-06-15 15:17:29 │
│ 10 │ 2020-06-15 15:17:30 │
└────┴─────────────────────┘
┌─id─┬─────────create_time─┐
│ 11 │ 2020-06-15 15:21:17 │
└────┴─────────────────────┘
11 rows in set. Elapsed: 0.004 sec.
Clickhouse> select * from latest_10;
SELECT *
FROM latest_10
┌─divide(sum(id), 10)─┐
│ 6.5 │
└─────────────────────┘
1 rows in set. Elapsed: 0.008 sec.
sum([2, 3, 4, 5, 6, 7, 8, 9, 10, 1])/10 = 5.5
sum([2, 3, 4, 5, 6, 7, 8, 9, 10, 11])/10 = 6.5