1. 概述

數據清理工具既可用於清理神策分析中匯入的行為事件數據,也可用於對匯入的行為事件數據去重。

該工具 不提供 的功能如下:

  1. 刪除指定屬性的數據。
  2. 刪除某次批量匯入的數據。
  3. 刪除某個時間段匯入的數據。
  4. 將某個事件定義刪除。但是中繼資料管理中可以對事件進行隱藏,管理員可以操作。

數據清理為 不可逆操作,頻繁或大量的清理數據將導致碎片過多可能會 影響匯入進度,請謹慎操作。

除了 HdfsImporter 匯入工具之外,其他匯入數據的方式,匯入的數據都是會先經過 Kudu,達到一定條件之後,事件數據才會轉換到 Hdfs 中儲存。

如您的神策分析版本在 1.13 及以下且為叢集版環境,需要注意,數據清理工具預設只會刪除 Hdfs 中的數據,不會清除 Kudu 中的數據。如需要清除最近匯入的數據,請不要停止匯入數據並等候 4 小時以上,以確保最近匯入的數據順利進入到 Hdfs中。 

2. 使用方法

請先 ssh 到部署了神策服務的任意一台機器,在 sa_cluster 帳戶下使用數據清理工具。從 root 切換到 sa_cluster 帳戶:

su - sa_cluster
CODE
  • 請注意 su 與 sa_cluster 中間的減號。

2.1.  事件刪除

該方法可以清理一個專案指定時間段內 所有事件或者某些指定事件 的行為事件數據。

  • 該時間段為 事件行為 的時間,非匯入數據的時間段。
  • 該方法會保留事件、事件屬性的定義。
  • 單機版:不會立即釋放硬碟,後台會緩慢釋放,如果刪除的是指定事件的數據那麼釋放的時間可能會很長。
  • 叢集版:不會立即釋放硬碟,每天凌晨會例行清理。注意 : 叢集版事件刪除一般需要消耗大量時間和資源,儘量不要指定過大的時間範圍。另外支援使用 -m 參數加快執行速度。     

參數列表:

參數名必須說明格式樣例備註
begin

刪除數據的起始日期(包含這一天)

yyyy-MM-dd2015-12-21
end

刪除數據的結束日期(包含這一天)

yyyy-MM-dd2015-12-22
events

指定刪除數據的 event,叢集版可同時指定多個事件,使用逗號分隔

事件名稱

ButtonClick
project

操作對應的專案,預設為“預設專案”

專案名

my_project
hours

指定刪除數據所屬的小時數或範圍,多個不連續的時間之間使用逗號分

[0-23]0,[3-5]

僅叢集版支援

max_tasks

指定 event 進行刪除時,可以透過該參數設置任務的併發度,從而加快執行速度,預設為1。

正整數

2僅叢集版支援
libs

刪除的事件來源,多個來源之間使用逗號分隔。

LIBSLIBS僅叢集版支援
  • 清除 default 專案下 2015 年 12 月 22 日這 1 天的行為事件數據:
sa_clean clean_event_by_date --begin 2015-12-22 --end 2015-12-22 --project default
CODE
  • 清除 production 專案下 2015 年 12 月 20 日 到 22 日這 3 天的行為事件數據:
sa_clean clean_event_by_date --begin 2015-12-20 --end 2015-12-22 --project production
CODE
  • 清除 my_project 專案下 ButtonClick 這個事件 2015 年 12 月 20 日 到 22 日這 3 天的行為事件數據,其他事件無改動:

sa_clean clean_event_by_date --begin 2015-12-20 --end 2015-12-22 --events ButtonClick --project my_project
CODE

注:如果 events 對應的事件名帶 "$" 符號,則 events 後的事件名需要加單引號:

sa_clean clean_event_by_date --begin 2015-12-20 --end 2015-12-22 --events '$AppStart' --project my_project
CODE
  • 清除 my_project 專案 ButtonClick 這個事件 2015 年 12 月 22 日 0 點、3 點、4 點、5 點的行為事件數據,其他事件無改動:
sa_clean clean_event_by_date --begin 2015-12-22 --end 2015-12-22 --events ButtonClick --hours 0,[3-5] --project my_project
CODE
  • 清除 my_project 專案 ButtonClick 這個事件 2015 年 12 月 22 日 0 點、3 點、4 點、5 點的來自於 scala 和 python 的行為事件數據,其他事件無改動:
sa_clean clean_event_by_date --begin 2015-12-22 --end 2015-12-22 --events ButtonClick --hours 0,[3-5] --project my_project --libs scala,python
CODE

2.2. 支援GDPR歐盟標準 ,刪除底層用戶數據 (目前僅支援1.13.5169+單機版) 

  • 方案一: 使用用戶 id 直接刪除 (目前 events 和 users 表中的數據均被刪除) 

參數列表:

參數名必須說明格式樣例備註
filename包含 id set 的文件filenameuser_id.txt

預設為 user_id

is_distinct_id
id set 的文件中包含的是否是 distinct_id

若 id set 中的數據是 distinct_id, 需指定此參數

project

操作對應的專案,預設為“預設專案”

專案名my_project
  1. 建立用戶文本,每行一個用戶(user_id 或者 distinct_id)(USER_ID_SET_FILENAME或者DISTINCT_ID_SET_FILENAME)
  2. 使用如下指令刪除 

使用 user_id 刪除的指令

sa_clean clean_event_and_profile_by_id_list --project PROJECT_NAME --filename USER_ID_SET_FILENAME
CODE

使用 distinct_id 刪除的指令

sa_clean clean_event_and_profile_by_id_list --project PROJECT_NAME --filename DISTINCT_ID_SET_FILENAME --is_distinct_id
CODE

注:如果使用 distinct_id 刪除的指令刪除用戶的事件數據和用戶數據,必須要保證 events 表中有該用戶的事件數據,才能找到該用戶在 users 表中的資訊,並刪除。否則刪除不成功,需要使用 user_id 刪除指令才能刪除。 

  • 方案二:使用 profile_delete 標記刪除

參數列表:

參數名必須說明格式樣例備註
only_profile

是否只刪除 profile 表中的數據



指定後,僅刪除 profile 數據

project

操作對應的專案,預設為“預設專案”

專案名my_project
  1. 用戶呼叫 profile_delete 介面標記數據為刪除狀態

  2. 使用如下命令刪除數據 刪除 events 和 users 表中的所有數據

sa_clean clean_event_and_profile_by_is_deleted --project PROJECT_NAME
CODE

僅刪除 users 表中的用戶數據

sa_clean clean_event_and_profile_by_is_deleted --project PROJECT_NAME --only_profile
CODE

2.3. 事件去重

該方法會去除重複匯入的數據,目前僅叢集私有環境支援此方法。

參數列表:

參數名必須說明格式樣例備註
begin

刪除數據的起始日期(包含這一天)

yyyy-MM-dd2015-12-21
end刪除數據的結束日期(包含這一天)yyyy-MM-dd2015-12-22
project

操作對應的專案,預設為“預設專案”

專案名my_project
skip_properties

去重時需要忽略的屬性,多個屬性之間使用逗號分隔

屬性名$ip,$city

1.13及之後支援,請先小版本升級

  • 去重 my_project 專案 2016 年 1 月 2 號全天的數據,忽略 $ip 屬性
sa_clean distinct_event_by_date --project my_project --begin '2016-01-02' --end '2016-01-02' --skip_properties '$ip','$city'
CODE

注:可以指定忽略某個事件屬性屬性去重,即不校驗該屬性的值是否一樣。目前不支援指定忽略 time 刪除重複數據

3. 其他

由於刪除是不可逆操作,所以執行過程中需要用戶鍵入 yes 並 Enter 才會進行實際刪除操作。如果在執行前已經確認操作是正確的(主要用於自動化腳本),那麼可以加 --yes 參數,將不會再要求鍵入 yes 才能執行。