我们计划将Keen用作我们的跟踪核心,但结合请求和提取数据对我们来说是一件大事。
如果我们有一个名为pageviews
的集合,其中一个用户作为其属性(如:{"name": "pageviews", "properties":{"user":{"id":"4242"},"url":"https://keen.io/"}}
),另一个名为purchases
的集合具有相同的user
1}}内部属性:
我们如何才能获得至少访问过3次网址且已完成另一项“购买”活动的唯一身份用户数量?
我们如何提取这些人?是否可以使用Amazon S3数据复制执行此操作? (与亚马逊雅典娜?)。 “提取”功能似乎不能满足我们的提取问题,因为我们无法应用“分组依据”语句,我们无法将多个事件组合在一起进行提取(我错了吗?)。
我们的目标是将Keen不仅用作统计分析器,还可以作为我们分割/提取使用的强大数据支持。
答案 0 :(得分:5)
以下是解决此问题的各种选项:
解决方案1:您可以使用更简单的标准设置吗? Keen的funnel分析类型具有自然语法,用于识别已完成(或未完成)操作A,B,C等的特定用户库存。但是,它不能快速{ {3}}基于次数已完成操作。这部分标准有多重要?您可以识别具有以下内容的用户:
渠道步骤
/keen.io/
和/keen.io/products
和这种简化会立即使您的问题在单个filter中得到回答。
解决方案2:两步查询流程。
在此解决方案中,我们将运行两个单独的查询以获得结果。首先,我们将使用funnel query来识别执行了更罕见的操作(购买)的用户。在下一个查询中,我们将select_unique该特定网页的所有视图和count user.id
来计算每个用户查看该网页的次数。我们将查询1的结果用作查询2中过滤器的一部分,以便我们仅查询已进行购买的相关用户。然后,我们可以选择已购买的用户并查看该页面3次或更多次。
var client = new Keen({
projectId: "PROJECT_ID",
readKey: "READ_KEY"
});
var usersWhoPurchased = []
// Query 1
var usersWhoPurchasedQuery = new Keen.Query("select_unique", {
event_collection: "purchases",
target_property: "user.id",
timeframe: "this_7_days"
});
// Get Query 1 Results
client.run(usersWhoPurchasedQuery, function(err, response){
usersWhoPurchased = response['result']
});
// Query 2
var activityCountsByUserQuery = new Keen.Query("count", {
event_collection: "pageviews",
group_by: "user.id",
timeframe: "this_7_days",
filters: [
{
property_name: "url",
operator: "eq",
property_value: https://keen.io/
},
{
property_name: "user.id",
operator: "in",
property_value: usersWhoPurchased
}
]
});
// Get Query 2 Results
client.run(activityCountsByUserQuery, function(err, response){
console.log(response)
var countsByUser = response['result']
});
// countsByUser = [
// {
// "user.id": "A",
// "result": 1
// },
// {
// "user.id": "B",
// "result": 0
// },
// {
// "user.id": "C",
// "result": 3
// }
// ]
// Sort countsByUser to identfy those with >3
此方法在您扩展时会有一些注意事项,并开始最大化您可以包含在过滤器中的用户数(数百或数千,具体取决于ID长度)。它们可以分解和分批查询。
解决方案3:包括事件计数。 这种方法并不适用于所有情况,但是当它发挥作用时,它可以非常强大和优雅。我们的想法是在客户端运行计数,并将它们作为事件的用户属性包含在内。例如,您的网页浏览事件中的用户对象可能包含以下属性:
{
"collection_name":"pageviews",
"properties":{
"user":{
"id":"4242"
},
"url":"https://keen.io/",
"product_views_this_session":4
}
}
使用这类数据,您可以再次使用带过滤器的简单渠道来识别符合条件的用户
渠道步骤
product_views_this_session
gt
4
解决方案4:使用S3 Streaming + AWS Lambda + RDS或DynamoDB实施计数器
如果您尚未打开它,请启用所有原始Keen数据到Amazon S3的流式传输。一旦它存在,您可以对传入的数据和静态数据执行各种额外的步骤。
您的流程可能是这样的:
新活动:
{
"collection_name":"user_product_view_enriched",
"properties":{
"user":{
"id":"4242"
},
"url":"https://store.io/productA45",
"view_history":{
"product":"A45",
"lifetime_views":5,
"counting_since":"<timestamp>"
}
}
}
以这种格式将数据重新输入Keen,您可以使用解决方案3中所述的标准渠道:
渠道步骤
user_product_view_enriched
中包含产品“A45”和lifetime_views
&gt;的用户X 对此方法的限制是您不能随意更改计数器“启动”的时间和方式。例如,您可能稍后决定只想在过去3周内计算视图而不是终生。您必须在S3中查询原始数据以获得这样的新计数,但是您已经拥有了这些数据,因此它不是那么大的交易。
解决方案5:使用EMR和/或Athena对原始S3数据实施更复杂的查询
编写一个常规批处理作业来查询原始S3数据并识别您感兴趣的用户。这里有很多选项,我不是专家,但我知道是可能的。