开发者学堂课程【开源 Flink 极客训练营:Flink SQL _ Table 介绍与实战】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/760/detail/13341
Flink SQL _ Table 介绍与实战
这里之所以需要求最大的时间,同时又按日期+时间作为主键写入到 Elasticsearch,是因为在计算累积UV数。
INSERT INTO cumulative.uv
SELECT date. str , MAX(time. str), COUNT(DISTINCT user. 1d) as uv
FROM (
SELECT
DATE_ FORMAT(ts, yyyy-MM-dd') as date. ,str,
SUBSTR(DATE_ FORHAT(ts, 'HH:mn'),1,4)|| '0' as time_ str,
user_ id
FRON user_ behavior)
GROUP BY date_ str;
精确的分钟
||字符串连接的函数
提交上述查询后,在Kibana中创建curulative. Juv 的index pattern,然后在Dashboard中创建一-个"Line"折线图,
选择cumulative_ uv索引,按照如下截图中的配置(左侧)画出累计独立用户数曲线,并保存。
Flink对count做了很多优化
在Elasticsearch中,用 date. str , MAX(time. str)做分组
在query中,根据日期date_ str做分组,quer不断刷新当前时刻最大的uv值
提交后,查看query
有两个节点,在index pattern中加入做格式化
返回Dashboard,选择添加新的视图,选择连线图
y轴累计独立访问用户数,取uv的值,x轴每十分钟的点。,选择terms、time_str.keyword、Alphabetical、150
单调递增曲线,在凌晨曲线斜率较为平缓,将图加入Dashboard中
顶级类目排行榜
最后一个可视化是类目排行榜,从而了解哪些类目是支柱类目。不过由于源数据中的类目分类太细(约5000
个类目)。对于排行榜意义不大,因此希望能将其归约到顶级类目。所以在mysql容器中预先准备了子类目与
顶级类目的映射数据,用作维表。
在SQL Cu中创建MySQL表,后续用作维表查询。
CREATE TABLE category_ dim (
sub_ category_ .id BIGINT,
parent_ .category. name STRING
) WITH (
'connector'='jdbc".
'url'='jdbc :mysql://mysql:3306/flink',
'table-nane'= ' category',
'username' = 'root',
'password' = ' 123456'
'lookup.cache.max-rows" = '5208",
'lookup. cache.ttl' = '10min'
);
进入MySQL容器中,
输入cd flink-sql-demo进入
输入show tables;有一个category的表如下图:
输入select * from category limit 10;如下图:
同时再创建一个Elasticsearch表,用于存储类目统计结果。
CREATE TABLE top. .category (
category. name STRING PRIHARY KEY NOT ENFORCED,
Buy_cnt BIGINT
) WITH (
'connector'='elasticsearch-7',
'hosts'='http://elast icsearch: 9200' ,
'index' ='top. category
);
第一步通过维表关联,补全类目名称。使用CREATE'IEW将该查询注册成一个视图,简化逻辑。维表关联使用temporal join语法。docs-release-1.11/dev/table/streaming/joins.html#join-with-a-temporal-table
CREATE VIEW rich_ user_ behavior AS
SELECT
U.user_id,U.item_id,U.behavior,C.parent_category_name as category_name
FROM user_behavior AS U LEFT JOIN category_dim FOR SYSTEN_TIME AS 0F U.proctine AS C
ON U.category_id=C.sub_category_id;
最后根据类目名称分组,统计出buy 的事件数,并写入Elasticsearch中。
INSERT INTO top_category
SELECT category_name, COUNT(*) buy_cnt
FROM rich_ user_ behavior
WHERE behavior = 'buy'
GROUP BY category_name;
查询的id是类目的id,查询的名字是类目的名字
提交上述查询后,在Kibana中创建top_category的index patter,然后在Dashboard中创建一个”Horizontal
Bar”条形图,选择top_category 索引,按照如下截图中的配置(左侧) 画出类日排行榜,并保存。
两个节点做类目的统计量分析,建立索引,添加类目可视化图,y轴统计类目成交量,x轴类目,根据成交量排序倒序
衣服、鞋子的成交量高,保存到Dashboard中
添加目标可视化的图
保存到Dashboard中,可以自由拖拽,增加美观度