數據清理工具使用說明
1. 概述
數據清理工具既可用於清理神策分析中匯入的行為事件數據,也可用於對匯入的行為事件數據去重。
該工具 不提供 的功能如下:
- 刪除指定屬性的數據。
- 刪除某次批量匯入的數據。
- 刪除某個時間段匯入的數據。
- 將某個事件定義刪除。但是中繼資料管理中可以對事件進行隱藏,管理員可以操作。
數據清理為 不可逆操作,頻繁或大量的清理數據將導致碎片過多可能會 影響匯入進度,請謹慎操作。
除了 HdfsImporter 匯入工具之外,其他匯入數據的方式,匯入的數據都是會先經過 Kudu,達到一定條件之後,事件數據才會轉換到 Hdfs 中儲存。
如您的神策分析版本在 1.13 及以下且為叢集版環境,需要注意,數據清理工具預設只會刪除 Hdfs 中的數據,不會清除 Kudu 中的數據。如需要清除最近匯入的數據,請不要停止匯入數據並等候 4 小時以上,以確保最近匯入的數據順利進入到 Hdfs中。
2. 使用方法
請先 ssh 到部署了神策服務的任意一台機器,在 sa_cluster 帳戶下使用數據清理工具。從 root 切換到 sa_cluster 帳戶:
su - sa_cluster
- 請注意 su 與 sa_cluster 中間的減號。
2.1. 事件刪除
該方法可以清理一個專案指定時間段內 所有事件或者某些指定事件 的行為事件數據。
- 該時間段為 事件行為 的時間,非匯入數據的時間段。
- 該方法會保留事件、事件屬性的定義。
- 單機版:不會立即釋放硬碟,後台會緩慢釋放,如果刪除的是指定事件的數據那麼釋放的時間可能會很長。
- 叢集版:不會立即釋放硬碟,每天凌晨會例行清理。注意 : 叢集版事件刪除一般需要消耗大量時間和資源,儘量不要指定過大的時間範圍。另外支援使用 -m 參數加快執行速度。
參數列表:
參數名 | 必須 | 說明 | 格式 | 樣例 | 備註 |
---|---|---|---|---|---|
begin | √ | 刪除數據的起始日期(包含這一天) | yyyy-MM-dd | 2015-12-21 | |
end | √ | 刪除數據的結束日期(包含這一天) | yyyy-MM-dd | 2015-12-22 | |
events | 指定刪除數據的 event,叢集版可同時指定多個事件,使用逗號分隔 | 事件名稱 | ButtonClick | ||
project | 操作對應的專案,預設為“預設專案” | 專案名 | my_project | ||
hours | 指定刪除數據所屬的小時數或範圍,多個不連續的時間之間使用逗號分 | [0-23] | 0,[3-5] | 僅叢集版支援 | |
max_tasks | 指定 event 進行刪除時,可以透過該參數設置任務的併發度,從而加快執行速度,預設為1。 | 正整數 | 2 | 僅叢集版支援 | |
libs | 刪除的事件來源,多個來源之間使用逗號分隔。 | LIBS | LIBS | 僅叢集版支援 |
- 清除 default 專案下 2015 年 12 月 22 日這 1 天的行為事件數據:
sa_clean clean_event_by_date --begin 2015-12-22 --end 2015-12-22 --project default
- 清除 production 專案下 2015 年 12 月 20 日 到 22 日這 3 天的行為事件數據:
sa_clean clean_event_by_date --begin 2015-12-20 --end 2015-12-22 --project production
清除 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
注:如果 events 對應的事件名帶 "$" 符號,則 events 後的事件名需要加單引號:
sa_clean clean_event_by_date --begin 2015-12-20 --end 2015-12-22 --events '$AppStart' --project my_project
- 清除 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
- 清除 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
2.2. 支援GDPR歐盟標準 ,刪除底層用戶數據 (目前僅支援1.13.5169+單機版)
- 方案一: 使用用戶 id 直接刪除 (目前 events 和 users 表中的數據均被刪除)
參數列表:
參數名 | 必須 | 說明 | 格式 | 樣例 | 備註 |
---|---|---|---|---|---|
filename | √ | 包含 id set 的文件 | filename | user_id.txt | 預設為 user_id |
is_distinct_id | id set 的文件中包含的是否是 distinct_id | 若 id set 中的數據是 distinct_id, 需指定此參數 | |||
project | 操作對應的專案,預設為“預設專案” | 專案名 | my_project |
- 建立用戶文本,每行一個用戶(user_id 或者 distinct_id)(USER_ID_SET_FILENAME或者DISTINCT_ID_SET_FILENAME)
使用如下指令刪除
使用 user_id 刪除的指令
sa_clean clean_event_and_profile_by_id_list --project PROJECT_NAME --filename USER_ID_SET_FILENAME
使用 distinct_id 刪除的指令
sa_clean clean_event_and_profile_by_id_list --project PROJECT_NAME --filename DISTINCT_ID_SET_FILENAME --is_distinct_id
注:如果使用 distinct_id 刪除的指令刪除用戶的事件數據和用戶數據,必須要保證 events 表中有該用戶的事件數據,才能找到該用戶在 users 表中的資訊,並刪除。否則刪除不成功,需要使用 user_id 刪除指令才能刪除。
- 方案二:使用 profile_delete 標記刪除
參數列表:
參數名 | 必須 | 說明 | 格式 | 樣例 | 備註 |
---|---|---|---|---|---|
only_profile | 是否只刪除 profile 表中的數據 | 指定後,僅刪除 profile 數據 | |||
project | 操作對應的專案,預設為“預設專案” | 專案名 | my_project |
用戶呼叫 profile_delete 介面標記數據為刪除狀態
使用如下命令刪除數據 刪除 events 和 users 表中的所有數據
sa_clean clean_event_and_profile_by_is_deleted --project PROJECT_NAME
僅刪除 users 表中的用戶數據
sa_clean clean_event_and_profile_by_is_deleted --project PROJECT_NAME --only_profile
2.3. 事件去重
該方法會去除重複匯入的數據,目前僅叢集私有環境支援此方法。
參數列表:
參數名 | 必須 | 說明 | 格式 | 樣例 | 備註 |
---|---|---|---|---|---|
begin | √ | 刪除數據的起始日期(包含這一天) | yyyy-MM-dd | 2015-12-21 | |
end | √ | 刪除數據的結束日期(包含這一天) | yyyy-MM-dd | 2015-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'
注:可以指定忽略某個事件屬性屬性去重,即不校驗該屬性的值是否一樣。目前不支援指定忽略 time 刪除重複數據
3. 其他
由於刪除是不可逆操作,所以執行過程中需要用戶鍵入 yes 並 Enter 才會進行實際刪除操作。如果在執行前已經確認操作是正確的(主要用於自動化腳本),那麼可以加 --yes 參數,將不會再要求鍵入 yes 才能執行。