gpt4 book ai didi

druid - 使用不同的过滤器将两个查询相交

转载 作者:行者123 更新时间:2023-12-04 15:40:51 25 4
gpt4 key购买 nike

我使用 Druid 来监控我网站中的事件。
数据可以表示如下:

event_id   |  country  |  user_id  |  event_type  
================================================
1 | USA | id1 | visit
2 | USA | id2 | visit
1 | Canada | id3 | visit
3 | USA | id1 | click
1 | Canada | id4 | visit
3 | Canada | id3 | click
3 | USA | id2 | click

我还定义了一个用于计数事件的聚合。
我向 Druid 查询以显示 event_id=3 的数据,如下所示:

注意访问次数与 event_id 无关。
country   |  visits    | clicks  
===============================
USA | 4 | 2
Canada | 3 | 2

目前我使用两个不同过滤器的 topNResults 查询:
  • event_type = visit -> 计算每个国家/地区的访问次数,而不考虑事件 ID。
  • event_id = 3

  • 当然,我的数据比这大得多,并且包含许多国家/地区。
    topNResults api 必须有 阈值 参数表示我想要作为响应获得的最大结果数量。

    问题是如果我的阈值小于实际结果,这两个查询可能不会有相同的国家/地区结果。

    目前,我合并了 重叠 结果在我的服务器中,但我丢失了一些国家/地区的结果,尽管有更多结果,但我显示的结果低于我的阈值。

    我可以做些什么来优化我的阈值始终具有相同的国家/地区(无需将第一个查询返回的国家/地区列表发送到第二个过滤器 - 我尝试过,但速度非常慢)?

    最佳答案

    Sounds Filtered Aggregator 将为您保存所有查询。
    筛选聚合器仅聚合与维度筛选器匹配的值。
    以下查询将在您的情况下发挥作用:
    在 druid 将国家/地区下的所有事件分组后(因为维度是国家/地区),聚合器过滤器将过滤 (e1,e2) 中其事件 ID 的所有事件,并对过滤后的结果执行计数聚合器。

    {
    ...
    "dimension":"country",
    ...,
    "aggregations": [
    {
    "type" : "filtered",
    "filter" : {
    "type" : "selector",
    "dimension" : "event_id",
    "value" : ["1","2"]
    "type": "in"
    }
    "aggregator" : {
    "type" : "count",
    "name" : "count_countries" }
    }
    }
    ]
    }

    让我们把你的 table 。
    event_id   |  country  |  user_id  |  event_type  
    ================================================
    1 | USA | id1 | visit
    2 | USA | id2 | visit
    1 | Canada | id3 | visit
    3 | USA | id1 | click
    1 | Canada | id4 | visit
    3 | Canada | id3 | click
    3 | USA | id2 | click

    Druid 将按国家对结果进行分组。
      country  |  user_id  |  event_type | event_id    
    ================================================
    USA | id1 | visit | 1
    USA | id2 | visit | 2
    USA | id1 | click | 1
    USA | id2 | click | 3
    Canada | id3 | visit | 1
    Canada | id4 | visit | 3
    Canada | id3 | click | 3

    由于我们的过滤器 ("value": ["1","2"]),聚合器过滤器将删除所有 event_id=3
      country  |  user_id  |  event_type | event_id    
    ================================================
    USA | id1 | visit | 1
    USA | id2 | visit | 2
    USA | id1 | click | 1
    Canada | id3 | visit | 1

    并返回以下结果(我们的聚合器是简单的计数)
      country  |  count   
    ===================
    USA | 3
    Canada | 1

    享受!

    关于druid - 使用不同的过滤器将两个查询相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284720/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com