事件路径分析函数支持按照事件时间和时间戳得到事件顺序发生的时间序列。

通过以下步骤在DLA中准备好测试数据。

  1. sample上传至OSS中,详情请参见上传文件

  2. 在DLA中创建Schema。

    ​CREATE SCHEMA event_schema with DBPROPERTIES(
    catalog='oss',
    location = 'oss://bucket-name/event/'
    );​
  3. 在DLA中创建表。

    ​ CREATE EXTERNAL TABLE IF NOT EXISTS sample (
         user_id bigint COMMENT '',
         event_time bigint COMMENT '',
         event_id int COMMENT '',
         event_name varchar COMMENT '',
         event_attr varchar COMMENT '',
         event_date date COMMENT ''
     )
     ROW FORMAT DELIMITED
         FIELDS TERMINATED BY '|'
     STORED AS TEXTFILE
     LOCATION 'oss://bucket-name/event/'
     TBLPROPERTIES (
         'auto.create.location' = 'true'
     );​

本文示例均以sample表为测试数据。

EVENT_SEQUENCE

​event_sequence(
  boolean desc,
  bigint limit,
  bigint timeInMS
)​
  • 命令说明:以数组形式返回事件发生的时间点序列。

  • 参数类型:

    • boolean desc:是否按照事件时间从大到小排列,默认值为false,即按照从小到大的顺序排列。

    • bigint limit:设置返回的时间点序列数组的大小,默认值为100,最大值为1000。

    • bigint timeInMS:事件发生的时间点和时间戳,其中时间戳的类型为LONG,时间精确到毫秒。

  • 返回值类型:ARRAY[BIGINT]。

  • 示例:

    ​  SELECT event_name, event_sequence(event_time) AS a 
      FROM sample
      GROUP BY 1 
      ORDER BY 1;
      +----------|-------------------------------+
      |event_name| event_sequence                |
      +----------|-------------------------------+
      | 加入购物车| [1483254745351]               |
      |  收藏商品 | [1483220795802]               |
      |  浏览商品 | [1483233554546, 1483240004108]|
      |  生成订单 | [1483222204303]               |
      |    登录   | [1483220124362, 1483233099062, 1483266703322, 1483279486394]        |
      | 退订商品  |  [1483267998231]              |​
    ​  SELECT event_name, event_sequence(true, 3, event_time) AS a 
      FROM sample
      GROUP BY 1 
      ORDER BY 1;
      +-----------------+-----------------------------------------------+
      | event_name      | a                                             |
      +-----------------+-----------------------------------------------+
      | 加入购物车      | [1483254745351]                               |
      | 收藏商品        | [1483220795802]                               |
      | 浏览商品        | [1483240004108, 1483233554546]                |
      | 生成订单        | [1483222204303]                               |
      | 登录            | [1483279486394, 1483266703322, 1483233099062] |
      | 退订商品        | [1483267998231]                               |​

EVENT_INTERVAL

​event_interval(
  boolean desc,
  bigint limit, 
  bigint timeInMS,
  varchar timeZoneKey,
  varchar timeUnit
)​
  • 命令说明:以数组形式返回事件发生的时间点间隔序列数组。

  • 参数类型:

    • boolean desc:是否按照事件时间从大到小排列,默认值为false,即按照从小到大的顺序排列。

    • bigint limit:设置输出的时间点序列数组的大小,默认值为100,最大值为1000。

    • bigint timeInMS:事件发生的时间点和时间戳,其中时间戳的类型为LONG,时间精确到毫秒。

    • varchar timeZoneKey: 指定的时区名称,默认为系统(DLA服务所在region)当前时区。

    • varchar timeUnit:设置时间点间隔的时间度量单位。

      目前时间度量单位支持YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MILLISECOND。

  • 返回值类型:ARRAY[BIGINT]。

  • 示例:

    ​  SELECT event_name,
             event_interval(event_time, 'second') as a
      FROM sample
      GROUP BY 1
      ORDER BY 1;
      +-----------------+-----------------------+
      | event_name      | a                     |
      +-----------------+-----------------------+
      | 加入购物车      | []                    |
      | 收藏商品        | []                    |
      | 浏览商品        | [6449]                |
      | 生成订单        | []                    |
      | 登录            | [12974, 33604, 12783] |
      | 退订商品        | []                    |​
    ​  SELECT event_name,
             event_interval(true, 3, event_time, current_timezone(), 'millisecond') as a
      FROM sample
      GROUP BY 1
      ORDER BY 1;
      +-----------------+-----------------------------------+
      | event_name      | a                                 |
      +-----------------+-----------------------------------+
      | 加入购物车      | []                                |
      | 收藏商品        | []                                |
      | 浏览商品        | [-6449562]                        |
      | 生成订单        | []                                |
      | 登录            | [-12783072, -33604260, -12974700] |
      | 退订商品        | []                                |​
    ​  SELECT event_name,
             event_interval(event_time, 'UTC', 'day') as a
      FROM sample
      GROUP BY 1
      ORDER BY 1;
      +-----------------+-----------+
      | event_name      | a         |
      +-----------------+-----------+
      | 加入购物车      | []        |
      | 收藏商品        | []        |
      | 浏览商品        | [0]       |
      | 生成订单        | []        |
      | 登录            | [0, 0, 0] |
      | 退订商品        | []        |​