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;

效果

 

 

参考资料

https://materialize.io/docs/get-started/

posted on   荣锋亮  阅读(488)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.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  简单使用

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示