在进行日志数据分析时,很多时候需要结合外部表格对日志数据进行分析,本文档主要介绍如何在日志服务中结合OSS外表进行联合数据分析。

背景信息

在进行日志分析时经常会遇到日志中信息不完善的情况,例如日志中包含了用户的点击行为,但是缺少了用户属性,如注册信息等信息。 而分析日志的时候,往往需要将用户的属性和行为进行联合分析,例如分析用户所在地域对付费习惯的影响等。日志服务提供的这种跨数据源(OSS)的分析能力,可以帮助用户解决以下问题:
  • 节省费用
    • 异构数据,根据数据的特性选择合适的存储系统,最大限度的节省成本。 例如将更新少的数据存放在OSS上,则只需要支付少量的存储费用。如果存放在MySQL上,还要支付计算实例的费用。
    • OSS是阿里云的存储系统,可以走内网读取数据,免去了流量费用。
  • 节省精力

    在轻量级的联合分析平台中,不需要搬迁数据到同一个存储系统中,节省了用户精力。

  • 节省时间
    • 使用SQL分析数据,分析结果秒级可见。
    • 将常用的视图定义为报表,打开即可看到结果。

操作步骤

  1. 上传CSV文件到OSS。
    1. 定义一份属性文件,包含用户ID、用户昵称、性别、省份、年龄。属性文件
    2. 保存该文件为user.csv,使用osscmd上传到OSS。
      osscmd  put  ~/user.csv   oss:/testossconnector/user.csv
  2. 定义外部存储。
    通过SQL定义一个存储名为user_meta的虚拟外部表。
    * | create table user_meta ( userid bigint, nick varchar, gender varchar, province varchar, gender varchar,age bigint) with ( endpoint='example.com',accessid='<youraccessid>',accesskey='<accesskey>',bucket='testossconnector',objects=ARRAY['user.csv'],type='oss')
    说明
    • 在SQL中,需要指定如下三部分信息:
      • 表的schema:包含的列,以及每一列的属性。
      • OSS访问信息:OSS的域名,AccessId 和AccessKey。
      • OSS文件信息:文件所属存储空间及文件路径。
    • objects是一个数组,可以同时包含多个文件。
    执行结果为true,表示执行成功。定义外部存储
    执行SQL select * from user_meta查看结果。user_meta虚拟外部表
    说明 如果您需要更新该虚拟外部表的数据,请使用命令行工具CLI
  3. 进行联合分析。
    原始日志中包含了用户的ID信息,您可以通过SQL关联原始日志中的ID和OSS文件中的userid,补全日志的信息。
    * | select * from chiji_accesslog l join user_meta1 u on l.userid = u.userid
    联合分析
    联合查询示例如下:
    • 统计不同性别用户的访问情况
      1. 执行SQL
        * | select u.gender, count(1) from chiji_accesslog l join user_meta1 u on l.userid = u.userid group by u.gender
      2. 查询结果性别访问
    • 统计不同年龄用户的访问情况
      1. 执行SQL
        * | select u.age, count(1) from chiji_accesslog l join user_meta1 u on l.userid = u.userid group by u.age
      2. 查询结果年龄访问
    • 统计不同年龄段在时间维度上的访问趋势
      1. 执行SQL
        * | select date_trunc('minute',__time__) as minute, count(1) ,u.age from chiji_accesslog l join user_meta1 u on l.userid = u.userid group by u.age,minute
      2. 查询结果时间访问