如何导出Mixpanel事件,按时间划分?

时间:2014-06-06 02:42:18

标签: mixpanel

除了“来自和迄今为止”之外,我还希望进一步将Mixpanel export() API method中的事件信息按时间分段(事件包含'time'属性,表示为unix时间戳);但是,例如,当我指定一个“where”参数时,我得到一个空响应(见下文)。

  

“where”param ='properties [“time”]> = 1401642000'

我肯定有与之匹配的活动。这应该有效吗?

没有“where”param:

args = {'from_date':'2014-06-01','api_key':'删除','sig':'删除','to_date':'2014-06-04','过期': 1402424767}

响应= [我收到预期的事件]


'where'param ='properties [“time”]> = 1401642000'

args = {'from_date':'2014-06-01','过期':1402424767,'sig':'删除','to_date':'2014-06-04','api_key':'已删除','where':'properties [“time”]> = 1401642000'}

response = [HTTP请求成功,但响应为空]


与上述相同,除了将时间值放在引号中:

'where'param ='properties [“time”]> =“1401642000”'

args = {'from_date':'2014-06-01','过期':1402424767,'sig':'删除','to_date':'2014-06-04','api_key':'已删除','where':'properties [“time”]> =“1401642000”'}

response = [HTTP请求成功,但响应为空]


尝试将属性[“time”]转换为数字:

'where'param ='number(properties [“time”])> = 1401642000'

args = {'from_date':'2014-06-01','过期':1402424767,'sig':'删除','to_date':'2014-06-04','api_key':'已删除','where':'number(properties [“time”])> = 1401642000'}

response = [HTTP请求成功,但响应为空]

4 个答案:

答案 0 :(得分:1)

我在此API上遇到了同样的问题,并在联系他们的客户支持之前尝试了各种解决方案。他们的回应如下:

“坏消息是遗憾的是,没有办法通过导出API有选择地从特定时间导出事件。这主要是因为时间不是API活动的公开属性之一。只有在导出API中公开的属性才是与您的事件一起发送并在UI中实际公开的属性。“

然而,他继续指出他们的新JQL系统https://mixpanel.com/help/reference/jql,它显然可以过滤时间等事情。

希望有所帮助。

答案 1 :(得分:0)

您可以使用类型转换功能datetime()将目标时间戳转换为日期时间类型,然后按上述方式进行比较,例如: "where" param = 'properties["time"] >= datetime(1401642000)'

您还可以在括号内进行时间间隔算术,以构建给定起点或终点的周期,例如: "where" param = 'properties["time"] >= datetime(1401642000 - 60*60*24)'适用于" time"财产发生在目标日期时间之前一个多小时。

答案 2 :(得分:0)

使用其他方法解决同样的问题:首先将数据导出到MYSQL或任何其他数据库。 我曾经有自己的脚本来做这件事,但随着数据量变得越来越大,我开始看到自定义脚本的限制(重复事件,长/重http请求......)。

我现在正在使用Mixpaneldb,这非常适合我的需求。

Treasuredata也可以做到,但他们不是自助服务。

答案 3 :(得分:0)

我能够使用Mixpanel的JQL API端点解决此问题。如其他答案所述,其他Mixpanel API端点似乎忽略where子句中的“时间”参数。 (这令人沮丧和困惑!)

下面是我在Python中的解决方案,其中我使用了mixpanel-jql库来简化事情。它会在万圣节(格林尼治标准时间2018年10月31日)中午之后获取“聊天”事件。值得注意的是,from_date,to_date和e.time比较必须全部重叠才能实际获取事件。

now = datetime(2018, 10, 31)
from_timestamp_epoch_ms = 1540987200000 # Noon, Halloween 2018, GMT

query = JQL(
            MIXPANEL_SECRET,
            events=Events({
                # 'event_selectors' can be left out to grab all events
                'event_selectors': [{'event': 'Chat'}], 
                'from_date': datetime(now.year, now.month, now.day),
                'to_date': datetime(now.year, now.month, now.day)
            })
        ).filter('e.time > {}'.format(from_timestamp_epoch_ms))

for row_dict in query.send():
     # Work your magic