1. HDFS离线拉取
本方案适用于不方便直接接入Hubble SDK,或者业务数据需要二次加工清洗后才能使用的场景
具体的方式是 1. 业务方数据开发人员根据业务场景进行数据清洗,并按照Hubble “事件-用户” 模型生成数据存放至HDFS指定目录 2. Hubble系统每天定时从上述指定目录拉取数据进行处理并生成事件/用户数据
1.1. 定义数据
事件数据
字段名 | 字段描述 | 数据类型 | 是否必填 |
---|---|---|---|
type | 数据类型标识(event) | string | 必填 |
userId | 用户 ID | string | 必填 |
deviceUdid | 设备 ID | string | 非必填 |
dataType | 数据报文类型(默认外部事件 e) | string | 必填 |
sdkType | sdk类型(Android / iOS / js) | string | 必填 |
eventId | 事件 ID | string | 必填 |
time | 事件发生时间(绝对毫秒) | long | 必填 |
costTime | 事件耗时(毫秒) | int | 非必填 |
appKey | 应用标识 | string | 必填 |
sessionUuid | 会话 ID | string | 非必填 |
ip | 客户端ip | string | 非必填 |
country | 国家 | string | 非必填 |
region | 省份 | string | 非必填 |
city | 城市 | string | 非必填 |
appVersion | app版本 | string | 非必填 |
appChannel | app渠道 | string | 非必填 |
devicePlatform | 设备平台 | string | 非必填 |
deviceOs | 操作系统 | string | 非必填 |
deviceOsVersion | 操作系统版本 | string | 非必填 |
deviceModel | 设备机型 | string | 非必填 |
deviceManufacturer | 设备制造商 | string | 非必填 |
deviceResolution | 设备分辨率 | string | 非必填 |
useWifi | 是否使用wifi | string | 非必填 |
screenWidth | 分辨率(宽) | string | 非必填 |
screenHeight | 分辨率(高) | string | 非必填 |
deviceCarrier | 网络运营商 | string | 非必填 |
networkType | 联网类型 | string | 非必填 |
localeLanguage | 本地语言 | string | 非必填 |
category | 事件类别 | string | 非必填 |
label | 事件标签 | string | 非必填 |
attributes | 事件自定义属性 | map | 非必填 |
// 自定义事件demo数据
{
"type": "event",
"userId": "18921895133",
"deviceUdid": "5cc9531c48a0e12a7143c13bee058166e9e9d8e1",
"dataType": "e",
"sdkType": "iOS",
"eventId": "clickButton",
"time": 1434556935000,
"costTime": 20,
"appKey": "MA-XXXX-437494F370B3",
"sessionUuid": "1234-342423-232",
"ip": "172.0.0.1",
"country": "中国",
"region": "浙江",
"city": "杭州",
"appVersion": "3.2",
"appChannel": "appstore",
"devicePlatform": "iPad",
"deviceOs": "iOS",
"deviceOsVersion": "7.0",
"deviceModel": "iPhone6",
"deviceManufacturer": "Apple",
"deviceResolution": "640x960",
"userWifi": "true",
"screenWidth": "640",
"screenHeight": "960",
"deviceCarrier": "中国移动",
"networkType": "4G",
"localeLanguage": "en",
"category": "首页",
"label": "我喜欢的",
"attributes": {
"userfrom": "baidu",
"lastPage": "个人信息页"
}
}
用户数据
字段名 | 字段描述 | 数据类型 | 是否必填 |
---|---|---|---|
type | 数据类型标识(user) | string | 必填 |
userId | 用户ID | string | 必填 |
$account | 用户账号 | string | 非必填 |
$realName | 用户姓名 | string | 非必填 |
$birthday | 用户生日 | string | 非必填 |
$age | 用户年龄 | int | 非必填 |
$gender | 用户性别 | string | 非必填 |
$country | 常用地址-国家 | string | 非必填 |
$province | 常用地址-省份 | string | 非必填 |
$city | 常用地址-城市 | string | 非必填 |
attributes | 用户自定义属性 | map | 非必填 |
// 用户demo数据
{
"type": "user",
"userId": "ABCDEF123456789",
"$account": "hubbletest@163.com", // $开头的字段为公共字段
"$realName": "王磊",
"$birthday": "1990-09-10",
"$age": 28,
"$gender": "male",
"$$country": "中国",
"$province": "浙江",
"$city": "杭州",
"attributes": {
"vip": "黄金", // 非$开头字段为业务自定义字段
"nickname":"小王王"
}
}
说明: 1. 事件数据和用户数据均定义成标准json格式,并且key区分大小写,请和上述文档保持一致。一次事件或者一条用户信息对应一条json日志,最终保存为文本、Gzip、Lzo、Snappy格式 2. 在定义数据时,请尽量使用公共字段,公共字段不满足业务需求时才自定义属性 3. 虽然本方案未直接使用SDK采集数据,但是仍然需要开发方发送sdkType
字段,默认Android / iOS / js
4. 该方案一般离线处理周期为天,同时在凌晨进行,凌晨9点之前结束,保证数据使用人员上班直接可用 5. 业务方HDFS目录需要对Hubble的用户开放读权限 6. 该离线流程只能保证当天在Hubble系统上查询前一天数据,部分实时分析功能不可