【问题标题】:How to write a KSQL query to distint region id for particular user如何将 SQL 查询写入特定用户的不同区域 ID
【发布时间】:2020-05-14 00:48:35
【问题描述】:

您好,我创建了一个具有以下值的以下流,

"account_id VARCHAR, user_id VARCHAR, src_ip VARCHAR, country_code VARCHAR, message VARCHAR"

现在我可以在给定的翻滚窗口中创建一个只有特定 account_id 匹配字段的表,如下所示,

CREATE TABLE  221_console_failure AS \
      SELECT user_id, country_code \ 
      FROM my_stream \
      WINDOW TUMBLING (SIZE 600 SECONDS) \
      WHERE account_id = '4894833322'

有什么方法可以判断同一个用户是否在 10 分钟内从不同的国家代码值登录

我的 country_code 字段包含 IN、US、SG 等值。

【问题讨论】:

    标签: ksqldb


    【解决方案1】:

    对于您的用例,您可以使用 HISTOGRAM 作为一种解决方法,直到 KSQL 提供 DISTINCT 函数。

    HISTOGRAM(col1)(输入类型:STREAM/TABLE):返回一个映射,其中包含 col1 的不同字符串值,映射到给定窗口中每个字符串出现的次数。此版本将可计数的不同值的数量限制为 1000,超过该数量的任何其他条目都将被忽略。

    CREATE TABLE 221_console_failure AS \
          SELECT user_id, \
          HISTOGRAM(country_code) as region, count(*) 
          FROM my_stream \
          WINDOW TUMBLING (SIZE 600 SECONDS) \
          WHERE user_account_id = '4894833322' \
                        GROUP BY user_account_id;
    
    
    Output at consumer: b'{"USER_ID":"4894833322","REGION":{"SG":2,"IN":3},"KSQL_COL_2":5}'
    

    现在您可以在 REGION 检查地图长度 > 1,因为它收集不同的值。

    如果您有经度和纬度,也可以尝试使用标量函数GEO_DISTANCE(lat1, lon1, lat2, lon2, unit)KSQL - calculate distance from 2 messages using GEO_DISTANCE

    【讨论】:

      【解决方案2】:

      KSQL 还不支持COUNT(DISTINCT),这就是你这里需要的,以便能够运行这个:

      SELECT USER_ID, COUNT(DISTINCT COUNTRY_CODE) \
        FROM USER_EVENTS WINDOW TUMBLING (SIZE 10 MINUTES) \
      GROUP BY USER_ID \
      HAVING COUNT(DISTINCT COUNTRY_CODE) > 1; 
      

      如果此功能对您有用,请随时在https://github.com/confluentinc/ksql/issues/506 上投票/评论。

      【讨论】:

      • DISTINCT 关键字本身不可用对吗?所以您上面的示例查询也将无法正常工作?我试过了,它说“输入'COUNT(DISTINCT'没有可行的选择”
      • 正确。它尚不可用。我给出的示例是 需要运行的 SQL,如果 KSQL 确实支持它。
      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 2017-12-23
      • 2015-09-30
      • 2012-02-28
      相关资源
      最近更新 更多