导出概述(必读)
神策标签系统的数据导出,与神策分析基本一致,可参考 神策分析 - 数据导出。其中标签最常见的导出方式有:
# | 访问方式 | 场景 | 用于页面展示 | < 5k 行导出 | 5k - 10W 行导出 | > 10W 的无限制行导出 |
---|---|---|---|---|---|---|
1 | 查询 API(不分页) |
|
不建议使用 | 支持 | 支持 | 不建议使用 |
2 | 查询 API(分页) |
|
支持 | 支持 | 不建议使用 | |
3 | JDBC(包括 impala-shell)+ HDFS |
|
不建议使用 |
支持 |
支持 | 支持 |
4 | HUE SQL 查询 |
|
支持 | 支持 | 支持 | 不建议使用 |
使用 JDBC + HDFS 查询或导出标签
本章节为参考 https://www.sensorsdata.cn/manual/jdbc.html 编写,原文中包含更多内容如 ”和 Spark 集成“。
获取 JDBC 地址
登录任意的神策服务器
切换至 sa_cluster 账户
使用以下命令获取地址
例如输出是
其中,hive_url_list 中的任意一个地址都可用于连接。
如果使用代码访问,我们建议使用 1.1.0 版本的 Hive JDBC Driver 来进行访问,Maven 的依赖定义如下:
另外,Impala 也支持使用官方的Impala Jdbc Drvier进行访问,不过为了兼容神策分析系统,请使用的时候务必开启 Native SQL 的选项,例如:
注意:使用不同 Driver 访问时使用的 JDBC URI 也会有所不同。
使用 impala-shell 进行查询
可以直接使用 impala-shell 工具进行查询。通常有两种使用方式:
- 直接登录任意的神策服务器,运行 impala-shell 命令即可。
- 使用任意 2.6.0 以上的 impala-shell 客户端,连接到上面 hive_url_list 中的地址(无需指定端口)。
简单查询及 SA 注释
为了区分查询神策的数据与一般的 Impala 数据,需要在 SQL 中使用特殊的注解来进行标识,需要在 SQL 中使用特殊的注解来进行标识,例如查询默认项目的 events 数据:
类似的,如果想看 events 表有哪些字段,可以使用:
如果不是查询默认项目,则需要指定项目名称,例如:
在 HUE 中不加 SA 注释地验证 SQL 正确性
在 HUE (既 ”自定义查询“)中可以不加注释地查询神策的数据,可用于快速验证 SQL 编写是否正确。
在 HUE 中,还可以方便地看到 users 表、user_tag_* 表、user_group_* 表的字段结构。
验证后,可再加适当注释再通过 JDBC、Impala-shell 等方式执行。
更多内容,可参考 ”在 HUE 中查询标签“ 一节。
获得标签英文名
在 SQL 中查询标签,需要先获取标签英文名字,方法如下图:
查询标签最新版本
假设 ”年龄“ 标签,英文名是 age,查询 默认项目 的 标签 age 的最新 base_time 的数据:
观察 SQL 可见:
- 其中的
/*SA*/
表示当前 SQL 是一个发给神策系统的查询; - 且标签 age 在 SQL 中,是 作为 users 表的一个字段进行查询 的;
- users 表的 age 字段,是 age 标签的 最新 base_time 所代表的版本。
查询标签历史版本
历史版本无法从 users 表中查到,我们需要查询 user_tag_*(标签)和 user_group_* (用户群)表。
下面以 ”是否为红包用户“ 标签为例,其英文名是 is_hb_user。
结合 HDFS 进行数据导出
如果想把神策的数据导出成文本格式,用于备份或者其它用途,那可以使用以下方案:
一、创建一个文本格式的数据表,把待导出的数据插入此表。
我们可以让一个 SQL 的一部分使用神策的查询,其它部分使用正常的 Impala 查询如下:
注意: 普通 Impala/Hive 表不支持带 $ 的字段,因此如果导出这类字段需要使用 AS 重命名。
二、获取该数据表的 HDFS 路径:
其中输出的 Location 列即是导出文件所在的 HDFS 目录,例如:
可以使用 hadoop 命令将 HDFS 文件取到本地:
上述目录里的文件是以 Hive 默认分隔符(即 \001)进行列分隔的文本文件。
按需拷贝走上面路径下的文件即可。
使用 API 查询或导出标签
请参考 https://www.sensorsdata.cn/manual/query_api.html
注意问题:可能有性能问题,不建议做大数据量的导出,导出大量数据最好使用 JDBC + HDFS。
导出 JSON /user_analytics/users
对应的 UI 操作
请求方法
- POST
PATH
- /v2/reports/user_analytics/users
Request (application/json)
Response
字段含义
关键字 | 选项 | 含义 |
---|---|---|
by_fields | 可选 | 分组,得到的人群是按某个/某些属性进行的分组,格式为 user.xxx |
slice_by_values | 可选 | 每个分组中的分组值,与 by_fields 同时存在 |
all_page | 可选 | 是否下载全部用户,下载用户列表时为 true |
profiles | 必选 | 需要显示的列 |
detail | 可选 | 用户列表结果中是否包括 profile 详情 |
use_cache | 必选 | 是否使用缓存,下载用户列表时填 false |
filter | 可选 | 过滤条件 |
field | 必填 | 标签的属性,格式为 user.xxx,其中 xxx 为标签名 |
function | 必填 | 查询的功能,如果想要查询标签中某一个值中的用户 function 选择 equal |
params | 可选 | 查询的参数,如果 function 为 equal 的话,则必填。如:"高价值",表示筛选的用户在标签 xxx 中是"高价值"的 |
page | 可选 | 分页请求中的第几页 |
num_per_page | 可选 |
分页请求中单页多少条数据 |
导出 CSV /user_analytics/users/csv
PATH
- 与前者唯一不同是 PATH 结尾加 /csv,即 /reports/user_analytics/users/csv
Request(application/json)
- 与 /reports/user_analytics/users 相同,略.
Response
查询条件举例
查询历史版本
对应的 UI 操作
Request(application/json)
特定候选值
对应的 UI 操作
Request(application/json)
交/并 集
对应的 UI 操作
Request(application/json)
在 HUE 中查询标签
在 HUE 中查询,有两种方式。
- 使用 user 表的字段,这种方式查询的是标签的最新版本。
- 使用 user_tag_* 表,这种方式可查询标签的历史版本。
使用 user 表查询
以下面的 “年龄” 标签为例,说下你需要知道标签的英文名,点击“查看规则”。
可以看到标签英文名。
再打开 “自定义查询” 功能。
点开 HUE 中的 user 表,可以看到一个叫做 age 的字段。
这个字段代表的就是标签的最新版本数据。
在 HUE 中(即神策的 “自定义查询” 功能),可以看到 user 表存在一个对应字段。
使用标签表查询
HUE 左侧的 user_tag_* 是标签表,user_group_* 是用户群表,二者字段相同。
与 users 表的最大区别,在于标签表具有 base_time 字段,base_time 代表了标签版本,是毫秒的时间戳。
base_time 的产生方式:
- 例行规则标签:通常是每天的 00:00:00,其 base_time 与相对时间的计算有关,比如 base_time 为 4-10 0:00:00,那么 ”昨天“ 的含义就是 4-9 0:00:00 到 4-10 0:00:00。
- 外部导入:导入时参数指定。
- 单次标签、用户群:base_time 通常是标签创建时间。
下图展示了对 is_hb_user 进行 base_time 分组统计的情况。