Kusto — получение данных из одной таблицы, если соответствующие записи не существуют в другой таблице

У меня есть две таблицы в базе данных Azure Data Explorer: первая таблица — «Пользователи», а вторая — Heartbeat. Таблица пользователей имеет определенные поля, включая адрес электронной почты. В таблице Heartbeat есть адрес электронной почты и столбец даты и времени отправки Heartbeat.

Мне нужно выбрать всех пользователей, которые НЕ отправляют пульс в определенном временном диапазоне.

Я использую следующий запрос, но он не возвращает записи.

Users
| join kind=leftouter Heartbeat on $left.userEmail == $right.userEmail
| where userEmail1 !has (userEmail)
| where HeartBeatDate between (datetime('2024-07-14 16:04:10')..datetime('2024-07-15 16:04:10'))
| distinct userLoginName,userEmail,userFullName,userPicture,userCreateDate,userPhoneNumber

Если я удалю предложениеwhere из диапазона даты/времени, я получу данные, но мне нужно будет фильтровать и искать только между заданным диапазоном времени.

Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить данные пользователя, который не отправил данные о своем пульсе в указанном часовом поясе, вы можете изменить свой код, как показано ниже:

Heartbeat
| where HeartBeatDate between (datetime('2024-07-14 16:04:10')..datetime('2024-07-15 16:04:10')) //give the timezone here
| distinct userEmail
| join kind=rightouter (Users) on $left.userEmail == $right.userEmail
| where isempty(userEmail)
| project-away userEmail

демо

Этот запрос сначала фильтрует таблицу Heartbeat, чтобы включить только те строки, в которых HeartBeatDate находится в пределах указанного диапазона. Затем он выбирает отдельные значения userEmail из таблицы Heartbeat. Эти значения затем используются для выполнения соединения rightouter с таблицей Users. Результат соединения включает в себя все строки из таблицы Users и только соответствующие строки из таблицы Heartbeat. Предложение where отфильтровывает все строки, в которых есть совпадающая строка в таблице Heartbeat (т. е. где userEmail нет null). Наконец, оператор project-away используется для удаления дублирующего столбца userEmail из вывода.

Редактировать:


Heartbeat
| where HeartBeatDate between (datetime('2022-01-01 16:04:10')..datetime('2022-01-03 16:04:10'))//give the timezone here
| distinct userEmail 
| join kind=rightouter (Users) on  $left.userEmail == $right.userEmail
| where isempty(userEmail)
| project-away userEmail
| join kind=leftouter (Geolocation) on $left.userEmail1 == $right.userEmail
| where isempty(userEmail)
| project-away userEmail1

Спасибо, Асвин, все работает отлично. У меня есть еще одна таблица под названием «Геолокация» с тем же полем электронной почты, и теперь мне нужно получить всех пользователей, которые существуют в тактовом сигнале, но НЕ в геолокации, в пределах указанного диапазона времени в таблице пульса. Как я могу изменить приведенный выше запрос?

Usama Alam 16.07.2024 11:55

Заменить таблицу пульса геолокацией

Aswin 16.07.2024 11:58

На самом деле здесь задействованы три таблицы. Пользователи -> откуда будут выбраны данные пользователя. Heartbeat -> Пользователи должны существовать в такт в течение заданного диапазона времени. Геолокация -> Пользователи НЕ должны существовать в этой таблице.

Usama Alam 16.07.2024 12:09

Можете ли вы задать еще один подробный вопрос с этим требованием? Также предоставьте образцы данных с ожидаемыми результатами.

Aswin 16.07.2024 12:33

На самом деле я не могу публиковать новые вопросы в течение нескольких дней. Единственная разница между этим вопросом и новым вопросом заключается в том, что раньше мне понадобились пользователи, которых не существовало в одно мгновение. Теперь мне нужны пользователи, которые существуют в Heartbeat, но не существуют в геолокации.

Usama Alam 16.07.2024 13:18

Отредактировал ответ. Проверьте это один раз

Aswin 16.07.2024 13:22

Спасибо, Асвин, еще один вопрос. Как мы можем отредактировать запрос, чтобы пропустить записи, попадающие между 2 и 6 часами утра?

Usama Alam 18.07.2024 13:28

Как называется поле, содержащее сведения о времени?

Aswin 18.07.2024 15:48

Другие вопросы по теме