除了“来自和迄今为止”之外,我还希望进一步将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请求成功,但响应为空]
答案 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