天天看點

blink cep基于使用者的行為分析大殺器場景架構圖

場景

今天我們做o2o有很多的線下場景需要基于使用者的行為進行分析,比如 我們在商場入門口裝了一個攝像頭,可以通過攝像頭識别商場進入的人臉,和出去時候的人臉,這樣形成了2條資料。商場想統計下,每個使用者在商場的逗留時間。這裡面就出現了一種pattern的模式,就是當使用者進門和出門這兩個事件都發生的時候,激發某個動作(事件)。比如在這裡是在使用者出門的時候将使用者進門時間和出門時間的內插補點相減,并存儲在tablestore當中。然後可以通過分析彙總算出今日使用者在商場的平均逗留時間,繼而可以統計出當月,當年的平均逗留時間,等等,促使商家提升總體營運水準。

這裡面 使用者進入商場 和使用者走出商場是兩個使用者行為,當它們組合在一起時候就有了奇妙的意義。blink在分析此類使用者行為方面提供了極其強大的模式比對功能。下面我以這個場景,較長的描述下如果使用。

架構圖

blink cep基于使用者的行為分析大殺器場景架構圖

使用者行為表

blink cep基于使用者的行為分析大殺器場景架構圖

使用者逗留時間表

blink cep基于使用者的行為分析大殺器場景架構圖

使用者行為表用來記錄攝像頭識别的使用者進門和出門的産生的記錄,使用者逗留時間表用來記錄每個使用者的逗留時間。

以使用者行為表為blink的源表,使用者逗留時間表為結果表。這裡使用tablestore為存儲資料庫。為什麼使用tablestore,因為tablestore的通道和blink能進行無縫的內建,tablestore的存儲成本非常的低廉,擴充性又非常的好。有想了解tablestore的同學,點選

傳送門

,當然也可以換成hbase等類似的資料庫。

下面是具體的代碼

CREATE TABLE mofun_source_user_action (

--id

id BIGINT,

-- 記錄日期

record_date BIGINT,

--使用者id

user_id

BIGINT,

--資料觸發時間

prd_time BIGINT,

--資料行為類型

opt_type varchar,

--計算列

ts AS to_timestamp(prd_time),

WATERMARK FOR ts AS withOffset(ts, 1000),

primary key (record_date,

user_id

, prd_time,opt_type)

)

CREATE TABLE ots_result_user_play_time (

--進入id

inid BIGINT,

--出去id

outid BIGINT,

--記錄日期

user_id

play_time BIGINT,

user_id

)

insert into ots_result_user_play_time

SELECT

inid,
outid,
start_tstamp,
`user_id`,
play_time           

FROM mofun_source_user_action MATCH_RECOGNIZE (

PARTITION BY `user_id`
 ORDER BY ts
 MEASURES  
            e1.id as inid,
            e2.id as outid,
            e1.record_date AS start_tstamp,
           (e2.prd_time-e1.prd_time) AS play_time
 ONE ROW PER MATCH
 PATTERN (e1->e2) WITHIN INTERVAL '10' Hour
 DEFINE
    e1 AS  e1.opt_type ='in',e2 as e2.opt_type='out'
 ) 
           

其中最關鍵的是最後這塊代碼

解釋一下代碼

DEFINE,定義的是模式比對的變量,意思你要用哪列,什麼條件的資料來進行條件比對

PATTERN 就是變量的比對模式,e1->e2的意思是指 進門後面如果出現了出門就比對成功

MEASURES 裡面是要在select中顯示的資料列

具體文檔看傳送門(

https://yuque.antfin-inc.com/rtcompute/doc/sql-query-cep)

,不過這篇文章講得也不是很清楚,後面我會寫一篇文章專門詳細介紹複雜的比對。

像上面這種場景稍微的進行一下更改就有很多場景可以使用。比如 我們現在經常使用短視訊,那麼我們怎麼分析使用者在某個短視訊的停留時間呢?就可以在使用者進入視訊和出了視訊産生一個事件,然後用上面這個文法就能分析出來,每個使用者在視訊上面的停留時間,然後根據排個實時排行榜,然後進行推薦。排行榜的架構,可以看我的上一篇文章,如何建構實時的排行資料。