materialize 试用
前边有大概介绍过materialize,以下是一个简单的试用(基于官方文档,官方同时也提供了容器的运行环境)
环境准备
- docker-compose 文件
version: "3"
services:
materialize:
image: materialize/materialized:v0.5.0
command: --workers 1
ports:
- "6875:6875"
简单试用
- 连接
可以通过pg客户端连接 - 创建materialize view
CREATE MATERIALIZED VIEW pseudo_source (key, value) AS
VALUES ('a', 1), ('a', 2), ('a', 3), ('a', 4),
('b', 5), ('c', 6), ('c', 7);
- 查询数据
SELECT * FROM pseudo_source;
效果
- 分组查询
SELECT key, sum(value) FROM pseudo_source GROUP BY key ;
效果
- join 查询
创建新的view
CREATE MATERIALIZED VIEW lhs (key, value) AS
VALUES ('x', 'a'), ('y', 'b'), ('z', 'c');
join
SELECT lhs.key, sum(rhs.value)
FROM lhs
JOIN pseudo_source AS rhs
ON lhs.value = rhs.key
GROUP BY lhs.key;
效果
实时数据处理
需要进入容器操作,先安装curl
- 下载数据
while true; do
curl --max-time 9999999 -N https://stream.wikimedia.org/v2/stream/recentchange >> wikirecent
done
- 创建source
CREATE SOURCE wikirecent
FROM FILE '/opt/wikirecent' WITH (tail = true)
FORMAT REGEX '^data: (?P<data>.*)';
查看列
SHOW COLUMNS FROM wikirecent;
效果
- 创建view
CREATE MATERIALIZED VIEW recentchanges AS
SELECT
val->>'$schema' AS r_schema,
(val->'bot')::bool AS bot,
val->>'comment' AS comment,
(val->'id')::float::int AS id,
(val->'length'->'new')::float::int AS length_new,
(val->'length'->'old')::float::int AS length_old,
val->'meta'->>'uri' AS meta_uri,
val->'meta'->>'id' as meta_id,
(val->'minor')::bool AS minor,
(val->'namespace')::float AS namespace,
val->>'parsedcomment' AS parsedcomment,
(val->'revision'->'new')::float::int AS revision_new,
(val->'revision'->'old')::float::int AS revision_old,
val->>'server_name' AS server_name,
(val->'server_script_path')::text AS server_script_path,
val->>'server_url' AS server_url,
(val->'timestamp')::float AS r_ts,
val->>'title' AS title,
val->>'type' AS type,
val->>'user' AS user,
val->>'wiki' AS wiki
FROM (SELECT data::jsonb AS val FROM wikirecent);
CREATE MATERIALIZED VIEW counter AS
SELECT COUNT(*) FROM recentchanges;
CREATE MATERIALIZED VIEW useredits AS
SELECT user, count(*) FROM recentchanges GROUP BY user;
CREATE MATERIALIZED VIEW top10 AS
SELECT * FROM useredits ORDER BY count DESC LIMIT 10;
查询top10 数据
SELECT * FROM top10 ORDER BY count DESC;
效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-11-01 ava 类似jest snapshot 功能试用
2019-11-01 ava js 测试框架基本试用
2018-11-01 ClickHouse 简单试用
2017-11-01 terraform 阿里云基本使用
2017-11-01 serf 简单使用