Как написать запрос KSQL для идентификатора региона для конкретного пользователя - PullRequest
0 голосов
/ 06 февраля 2019

Привет! Я создал следующий поток со следующими значениями:

"account_id VARCHAR, user_id VARCHAR, src_ip VARCHAR, код страны VARCHAR, сообщение 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 минут

В поле моего кода страны содержится значениекак IN, US, SG и т. д ..

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

В вашем случае вы можете использовать HISTOGRAM для обхода, пока KSQL не предоставит функцию DISTINCT.

ГИСТОГРАММА (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}'

Теперь вы можете просто проверить длину карты> 1 приREGION, поскольку он собирает различные значения.

Вы также можете попробовать использовать скалярную функцию GEO_DISTANCE(lat1, lon1, lat2, lon2, unit), если у вас есть долгота и широта. KSQL - вычислить расстояние от 2 сообщений, используя GEO_DISTANCE

0 голосов
/ 06 февраля 2019

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, если эта функция будет полезна для вас.

...