Mapping怎么使用

本篇內(nèi)容介紹了“Mapping怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!  

創(chuàng)新互聯(lián)堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因為我們一直可值得信賴。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。10年網(wǎng)站建設(shè)經(jīng)驗創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務(wù)商,為您提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站、網(wǎng)站設(shè)計、H5高端網(wǎng)站建設(shè)、網(wǎng)站制作、品牌網(wǎng)站建設(shè)微信小程序定制開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。

1   

背景背景

      登錄狀態(tài)下,日志中會采集到用戶的登錄id(account),可以做到用戶身份的精確標(biāo)識;而在匿名狀態(tài)下,日志中沒有采集到用戶的登錄id,準(zhǔn)確標(biāo)識用戶,成為一件極其棘手的事情;

在事件日志中,對用戶能產(chǎn)生標(biāo)識作用的字段有:

  • app日志中,有deviceid,account

  • web日志中,有cookieid,ip,account

  • wxapp日志中,有openid,account

在現(xiàn)實中,一個用戶,可能處于如下極其復(fù)雜的狀態(tài):

  • 登錄狀態(tài)訪問app

  • 匿名狀態(tài)訪問app

  • 登錄狀態(tài)訪問web

  • 匿名狀態(tài)訪問web

  • 登錄狀態(tài)訪問wx小程序

  • 匿名狀態(tài)訪問wx小程序

  • 一個用戶可能擁有不止一臺終端設(shè)備

  • 一臺終端設(shè)備上可能有多個用戶使用

  • 一個用戶可能一段時間后更換手機

  • ……

2

   

解決方案

1
只使用設(shè)備        ID      

適用場景

 適合沒有用戶注冊體系,或者極少數(shù)用戶會進(jìn)行多設(shè)備登錄的產(chǎn)品,如工具類產(chǎn)品、搜索引擎、部分小型電商等。

這也是絕大多數(shù)數(shù)據(jù)分析產(chǎn)品唯一提供的方案。

局限性

同一用戶在不同設(shè)備使用會被認(rèn)為不同的用戶,對后續(xù)的分析統(tǒng)計有影響。

不同用戶在相同設(shè)備使用會被認(rèn)為是一個用戶,也對后續(xù)的分析統(tǒng)計有影響。

但如果用戶跨設(shè)備使用或者多用戶共用設(shè)備不是產(chǎn)品的常見場景的話,可以忽略上述問題。

Mapping怎么使用

2
關(guān)聯(lián)設(shè)備        ID        和登錄        ID       (一對一)      

適用場景

成功關(guān)聯(lián)設(shè)備 ID 和登錄 ID 之后,用戶在該設(shè)備 ID 上或該登錄 ID 下的行為就會貫通,被認(rèn)為是一個 全局 ID 發(fā)生的。在進(jìn)行事件、漏斗、留存等用戶相關(guān)分析時也會算作一個用戶。

關(guān)聯(lián)設(shè)備 ID 和登錄 ID 的方法雖然實現(xiàn)了更準(zhǔn)確的用戶追蹤,但是也會增加復(fù)雜度。

所以一般來說,我們建議只有當(dāng)同時滿足以下條件時,才考慮進(jìn)行 ID 關(guān)聯(lián):

需要貫通一個用戶在一個設(shè)備上注冊前后的行為。

需要貫通一個注冊用戶在不同設(shè)備上登錄之后的行為

局限性

一個設(shè)備 ID 只能和一個登錄 ID 關(guān)聯(lián),而事實上一臺設(shè)備可能有多個用戶使用。

一個登錄 ID 只能和一個設(shè)備 ID 關(guān)聯(lián),而事實上一個用戶可能用一個登錄 ID 在多臺設(shè)備上登錄。

Mapping怎么使用

3
關(guān)聯(lián)設(shè)備 ID 和登錄 ID(多對一)      

適用場景

一個用戶在多個設(shè)備上進(jìn)行登錄是一種比較常見的場景,比如 Web 端和 App 端可能都需要進(jìn)行登錄。支持一個登錄 ID 下關(guān)聯(lián)多設(shè)備 ID 之后,用戶在多設(shè)備下的行為就會貫通,被認(rèn)為是一個ID 發(fā)生的。

局限性

一個設(shè)備 ID 只能和一個登錄 ID 關(guān)聯(lián),而事實上一臺設(shè)備可能有多個用戶使用。

一個設(shè)備 ID 一旦跟某個登錄 ID 關(guān)聯(lián)或者一個登錄 ID 和一個設(shè)備 ID 關(guān)聯(lián),就不能解除(自動解除)。

而事實上,設(shè)備 ID 和登錄 ID 的動態(tài)關(guān)聯(lián)才應(yīng)該是更合理的。

Mapping怎么使用

4
關(guān)聯(lián)設(shè)備        ID        和登錄        ID       (       動態(tài)修正       )      

基本原則,與方案3相同

修正之處,一個設(shè)備ID被綁定到某個登陸ID(A)之后,如果該設(shè)備在后續(xù)一段時間(比如一個月內(nèi))被一個新的登陸ID(B)更頻繁使用,則該設(shè)備ID會被調(diào)整至綁定登陸ID(B)

3

   

實現(xiàn)

1
創(chuàng)建日志表      

create table wedw_dw.test_id_mapping( device_id string comment '設(shè)備ID',user_id   string comment '用戶ID',page_url  string comment '瀏覽頁面',login_time timestamp comment '登錄時間') partitioned by (date_id string)row format delimited fields terminated by ','stored as textfile;
 

2
flume采集第一天訪問日志      

+------------+----------+------------+------------------------+-------------+--+| device_id  | user_id  |  page_url  |       login_time       |   date_id   |+------------+----------+------------+------------------------+-------------+--+| device01   | user01   | pageview   | 2020-09-01 09:01:00.0  | 2020-09-01  || device01   | user01   | pageview   | 2020-09-01 09:02:00.0  | 2020-09-01  || device01   | user01   | pageview   | 2020-09-01 09:03:00.0  | 2020-09-01  || device01   | user01   | pageview   | 2020-09-01 09:04:00.0  | 2020-09-01  || device02   | user02   | pageview   | 2020-09-01 09:03:00.0  | 2020-09-01  || device02   | user02   | pageview   | 2020-09-01 09:04:00.0  | 2020-09-01  || device02   | user02   | pageview   | 2020-09-01 09:05:00.0  | 2020-09-01  || device02   | user02   | pageview   | 2020-09-01 09:06:00.0  | 2020-09-01  || device02   | null     | pageview   | 2020-09-01 09:07:00.0  | 2020-09-01  || device02   | user03   | pageview   | 2020-09-01 09:08:00.0  | 2020-09-01  || device03   | null     | pageview   | 2020-09-01 09:01:00.0  | 2020-09-01  || device03   | null     | pageview   | 2020-09-01 09:02:00.0  | 2020-09-01  || device04   | null     | pageview   | 2020-09-01 09:08:00.0  | 2020-09-01  || device04   | null     | pageview   | 2020-09-01 09:09:00.0  | 2020-09-01  |+------------+----------+------------+------------------------+-------------+--+
 

一個賬號在一個設(shè)備上的訪問記錄條數(shù)無論是多少,只計算一次分?jǐn)?shù) 對每個設(shè)備上,登錄過的 賬號,按時間先后順序,賦予不同的分值(依次遞減10分) 評分結(jié)果示例如下:

#計算設(shè)備ID對應(yīng)的全局IDdrop table if exists wedw_tmp.login_info_1;create table wedw_tmp.login_info_1asselect  t1.device_id,t1.user_idfrom(    select    device_id    ,user_id    ,page_url    ,login_time    ,row_number() over(partition by device_id order by login_time asc) as rn    from      wedw_dw.test_id_mapping     where date_id = '2020-09-01'    and user_id<> 'null') t1where rn = 1;+------------+----------+--+| device_id  | user_id  |+------------+----------+--+| device01   | user01   || device02   | user02   |+------------+----------+--+
 
#計算設(shè)備ID對應(yīng)的每個用戶的登錄信息及評分drop table if exists wedw_tmp.login_info_2;create table wedw_tmp.login_info_2asselectt4.device_id,collect_list(t4.login_info) as login_infofrom(    select     t3.device_id    ,concat(t3.user_id,'->',110-10*t3.rn,'->',t3.login_time) as login_info    from    (        select         t2.device_id        ,t2.user_id        ,t2.login_time        ,row_number() over(partition by device_id order by login_time asc) as rn        from        (            select             device_id            ,user_id            ,min(login_time) as login_time            from              wedw_dw.test_id_mapping             where date_id = '2020-09-01'            and user_id <> 'null'            group by device_id,user_id        ) t2    ) t3) t4group by t4.device_id;+------------+-------------------------------------------------------------------------+--+| device_id  |                               login_info                                |+------------+-------------------------------------------------------------------------+--+| device01   | ["user01->100->2020-09-01 09:01:00"]                                    || device02   | ["user02->100->2020-09-01 09:03:00","user03->90->2020-09-01 09:08:00"]  |+------------+-------------------------------------------------------------------------+--+
 
# 創(chuàng)建guid映射表drop table if exists wedw_dw.device_guid;create table wedw_dw.device_guid( device_id    string        comment '設(shè)備ID',login_info   array<string> comment '用戶登錄信息',guid         string        comment '全局ID')row format delimited fields terminated by ','stored as textfile;
 
# 將初始化好的數(shù)據(jù)插入guid映射表insert into table wedw_dw.device_guidselect  t1.device_id,t2.login_info,t1.user_id as guidfromwedw_tmp.login_info_1 t1inner join wedw_tmp.login_info_2 t2on t1.device_id = t2.device_id;+------------+-------------------------------------------------------------------------+---------+--+| device_id  |                               login_info                                |  guid   |+------------+-------------------------------------------------------------------------+---------+--+| device01   | ["user01->100->2020-09-01 09:01:00"]                                    | user01  || device02   | ["user02->100->2020-09-01 09:03:00","user03->90->2020-09-01 09:08:00"]  | user02  |+------------+-------------------------------------------------------------------------+---------+--+
 

3
flume采集第二天訪問日志      

+------------+----------+------------+------------------------+-------------+--+| device_id  | user_id  |  page_url  |       login_time       |   date_id   |+------------+----------+------------+------------------------+-------------+--+| device01   | user01   | pageview   | 2020-09-02 09:11:00.0  | 2020-09-02  || device01   | user01   | pageview   | 2020-09-02 09:12:00.0  | 2020-09-02  || device01   | user01   | pageview   | 2020-09-02 09:13:00.0  | 2020-09-02  || device01   | user01   | pageview   | 2020-09-02 09:14:00.0  | 2020-09-02  || device02   | user03   | pageview   | 2020-09-02 09:13:00.0  | 2020-09-02  || device02   | user03   | pageview   | 2020-09-02 09:14:00.0  | 2020-09-02  || device02   | user03   | pageview   | 2020-09-02 09:15:00.0  | 2020-09-02  || device02   | user03   | pageview   | 2020-09-02 09:16:00.0  | 2020-09-02  || device02   | null     | pageview   | 2020-09-02 09:17:00.0  | 2020-09-02  || device02   | user02   | pageview   | 2020-09-02 09:18:00.0  | 2020-09-02  || device03   | null     | pageview   | 2020-09-02 09:12:00.0  | 2020-09-02  || device03   | user04   | pageview   | 2020-09-02 09:12:00.0  | 2020-09-02  |+------------+----------+------------+------------------------+-------------+--+
 
# 計算本次設(shè)備ID對應(yīng)的全局IDdrop table if exists wedw_tmp.login_info_3;create table wedw_tmp.login_info_3asselect  t1.device_id,t1.user_idfrom(    select    device_id    ,user_id    ,page_url    ,login_time    ,row_number() over(partition by device_id order by login_time asc) as rn    from      wedw_dw.test_id_mapping     where date_id = '2020-09-02'    and user_id<> 'null') t1where rn = 1;+------------+----------+--+| device_id  | user_id  |+------------+----------+--+| device01   | user01   || device02   | user03   || device03   | user04   |+------------+----------+--+
 
#計算本次設(shè)備ID對應(yīng)的每個用戶的登錄信息及評分drop table if exists wedw_tmp.login_info_4;create table wedw_tmp.login_info_4asselectt4.device_id,collect_list(t4.login_info) as login_infofrom(    select     t3.device_id    ,concat(t3.user_id,'->',110-10*t3.rn,'->',t3.login_time) as login_info    from    (        select         t2.device_id        ,t2.user_id        ,t2.login_time        ,row_number() over(partition by device_id order by login_time asc) as rn        from        (            select             device_id            ,user_id            ,min(login_time) as login_time            from              wedw_dw.test_id_mapping             where date_id = '2020-09-02'            and user_id <> 'null'            group by device_id,user_id        ) t2    ) t3) t4group by t4.device_id;+------------+-------------------------------------------------------------------------+--+| device_id  |                               login_info                                |+------------+-------------------------------------------------------------------------+--+| device01   | ["user01->100->2020-09-02 09:11:00"]                                    || device02   | ["user03->100->2020-09-02 09:13:00","user02->90->2020-09-02 09:18:00"]  || device03   | ["user04->100->2020-09-02 09:12:00"]                                    |+------------+-------------------------------------------------------------------------+--+
 

計算邏輯:1. 針對當(dāng)日的日志數(shù)據(jù),為每個設(shè)備上登錄過的每個賬號打分 評分規(guī)則:

一個賬號在一個設(shè)備上的訪問記錄條數(shù)無論是多少,只計算一次分?jǐn)?shù) 對每個設(shè)備上,

登錄過的賬號,按時間先后順序,賦予不同的分值(依次遞減10分) 示例結(jié)果如下:

# 將本次計算好的guid映射結(jié)果插入到臨時表drop table if exists wedw_tmp.login_info_5;create table wedw_tmp.login_info_5select  t1.device_id,t2.login_info,t1.user_id as guidfromwedw_tmp.login_info_3 t1inner join wedw_tmp.login_info_4 t2on t1.device_id = t2.device_id;+------------+-------------------------------------------------------------------------+---------+--+| device_id  |                               login_info                                |  guid   |+------------+-------------------------------------------------------------------------+---------+--+| device01   | ["user01->100->2020-09-02 09:11:00"]                                    | user01  || device02   | ["user03->100->2020-09-02 09:13:00","user02->90->2020-09-02 09:18:00"]  | user03  || device03   | ["user04->100->2020-09-02 09:12:00"]                                    | user04  |+------------+-------------------------------------------------------------------------+---------+--+

4
合并上一日的結(jié)果和當(dāng)日的結(jié)果,得到當(dāng)日的最終映射結(jié)果      

# 兩次結(jié)果數(shù)據(jù)行轉(zhuǎn)列插到一個臨時表中drop table if exists wedw_tmp.login_info_6;create table wedw_tmp.login_info_6selectdevice_id,split(tmp.sub,'->')[0] as user_id,split(tmp.sub,'->')[1] as score,split(tmp.sub,'->')[2] as login_timefromwedw_dw.device_guidlateral view explode(login_info) tmp as subunion all selectdevice_id,split(tmp.sub,'->')[0] as user_id,split(tmp.sub,'->')[1] as score,split(tmp.sub,'->')[2] as login_timefromwedw_tmp.login_info_5lateral view explode(login_info) tmp as sub;+------------+----------+--------+----------------------+--+| device_id  | user_id  | score  |      login_time      |+------------+----------+--------+----------------------+--+| device01   | user01   | 100    | 2020-09-01 09:01:00  || device02   | user02   | 100    | 2020-09-01 09:03:00  || device02   | user03   | 90     | 2020-09-01 09:08:00  || device01   | user01   | 100    | 2020-09-02 09:11:00  || device02   | user03   | 100    | 2020-09-02 09:13:00  || device02   | user02   | 90     | 2020-09-02 09:18:00  || device03   | user04   | 100    | 2020-09-02 09:12:00  |+------------+----------+--------+----------------------+--+
 
# 計算前面結(jié)果數(shù)據(jù)中每個設(shè)備下每個用戶的評分和及最早登錄時間drop table if exists wedw_tmp.login_info_7;create table wedw_tmp.login_info_7select  device_id,user_id,sum(score) as score,min(login_time) as login_timefromwedw_tmp.login_info_6group by device_id,user_id;+------------+----------+--------+----------------------+--+| device_id  | user_id  | score  |      login_time      |+------------+----------+--------+----------------------+--+| device01   | user01   | 200.0  | 2020-09-01 09:01:00  || device02   | user02   | 190.0  | 2020-09-01 09:03:00  || device02   | user03   | 190.0  | 2020-09-01 09:08:00  || device03   | user04   | 100.0  | 2020-09-02 09:12:00  |+------------+----------+--------+----------------------+--+
 
# 合并兩次結(jié)果數(shù)據(jù)  計算設(shè)備ID對應(yīng)的guiddrop table if exists wedw_tmp.login_info_8;create table wedw_tmp.login_info_8select t2.device_id as device_id,t2.user_id as guidfrom(     select     t1.device_id    ,t1.user_id    ,t1.score    ,t1.login_time    ,row_number() over(partition by device_id order by t1.score desc) as rn    from    wedw_tmp.login_info_7 t1)t2where t2.rn = 1;+------------+---------+--+| device_id  |  guid   |+------------+---------+--+| device01   | user01  || device02   | user02  || device03   | user04  |+------------+---------+--+
 
# 計算兩次結(jié)果數(shù)據(jù)合并后每個設(shè)備ID對應(yīng)的用戶登錄信息drop table if exists wedw_tmp.login_info_9;create table wedw_tmp.login_info_9selectt1.device_id,collect_list(t1.login_info) login_infofrom(    select    device_id    ,concat(user_id,'->',score,'->',login_time) as login_info    from    wedw_tmp.login_info_7) t1group by device_id;+------------+------------------------------------------------------------------------------+--+| device_id  |                           collect_list(login_info)                           |+------------+------------------------------------------------------------------------------+--+| device03   | ["user04->100.0->2020-09-02 09:12:00"]                                       || device02   | ["user02->190.0->2020-09-01 09:03:00","user03->190.0->2020-09-01 09:08:00"]  || device01   | ["user01->200.0->2020-09-01 09:01:00"]                                       |+------------+------------------------------------------------------------------------------+--+
 
# 將合并好的數(shù)據(jù)插入guid映射表insert overwrite table wedw_dw.device_guidselect t1.device_id  as device_id,t2.login_info as login_info,t1.guid       as guidfrom wedw_tmp.login_info_8 t1inner join wedw_tmp.login_info_9 t2on t1.device_id = t2.device_id;+------------+------------------------------------------------------------------------------+---------+--+| device_id  |                                  login_info                                  |  guid   |+------------+------------------------------------------------------------------------------+---------+--+| device03   | ["user04->100.0->2020-09-02 09:12:00"]                                       | user04  || device02   | ["user02->190.0->2020-09-01 09:03:00","user03->190.0->2020-09-01 09:08:00"]  | user02  || device01   | ["user01->200.0->2020-09-01 09:01:00"]                                       | user01  |+------------+------------------------------------------------------------------------------+---------+--+

“Mapping怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

網(wǎng)頁題目:Mapping怎么使用
文章起源:http://bm7419.com/article46/jcspeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站改版、軟件開發(fā)、定制開發(fā)、品牌網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化