Объединить более 2 таблиц с помощью SWQL(SolarWinds Query Language), когда нет общего поля?

Я наблюдаю за своим узлом с помощью SolarWinds Orion NPM (мониторинг производительности сети). И я использую Orion SDK для получения информации о предупреждениях от SWIS (информационная служба SolarWinds) в консольном приложении vb.net.

Я использую некоторый код vb.net:

Function GetOneAlert(ByVal swis As InformationServiceClient) As AlertInfo
    Dim query As String, result As XElement
    query = "SELECT TOP 1 A.AlertDefID, A.ActiveObject, A.ObjectType FROM Orion.AlertStatus A WHERE A.Acknowledged=0 ORDER BY A.TriggerTimeStamp DESC"
    result = swis.QueryXml(query)

Проблема в том, что я хочу получить alertinforamtion из трех названных таблиц Orion.AlertDefinitions, Orion.AlertStatus а такжеOrion.Nodes в swis (Информационная служба SolarWinds), и мне нужно объединить эти 3 таблицы, но я могу объединить 2 из них (Orion.AlertDefinitions, Orion.AlertStatus) с помощью swql (SolarWinds Query Language) запрос показан ниже

query = "SELECT AlertStatus.AlertDefID, AlertDefinitions.AlertDefID, AlertDefinitions.Name, AlertStatus.State, AlertStatus.ObjectName, 
AlertStatus.TriggerTimeStamp, AlertDefinitions.Description FROM Orion.AlertStatus INNER JOIN Orion.AlertDefinitions
ON AlertStatus.AlertDefID=AlertDefinitions.AlertDefID WHERE AlertStatus.Acknowledged=0"

Я знаю подробности оповещения, но не знаю, к какому узлу относится оповещение. Для этого мне нужно объединить таблицу "orion.node" с остальными таблицами. Но 3-ий стол (Orion.Nodes) не имеет общих полей в двух других таблицах для присоединения. Мне нужно получить три значения поля с именем как DNS, IPAddress, NodeDescription от Orion.Nodes Таблица.

2 ответа

Если вас интересуют оповещения, связанные с узлами, и вы хотите объединить сведения об узлах, вам следует выбирать только оповещения с AlertStatus.ObjectType='Node' и присоединиться, используя AlertStatus.ActiveObject какой NodeID узла, связанного. Таким образом, запрос (с указанными свойствами узла) будет выглядеть так:

SELECT AlertStatus.AlertDefID, AlertDefinitions.AlertDefID, AlertDefinitions.Name, AlertStatus.State, AlertStatus.ObjectName, AlertStatus.TriggerTimeStamp, AlertDefinitions.Description, Nodes.IPAddress, Nodes.Dns, Nodes.NodeDescription
FROM Orion.AlertStatus
INNER JOIN Orion.AlertDefinitions
  ON AlertStatus.AlertDefID=AlertDefinitions.AlertDefID
INNER JOIN Orion.Nodes
  ON AlertStatus.ActiveObject=Nodes.NodeID
WHERE AlertStatus.Acknowledged=0 AND AlertStatus.ObjectType='Node'

В любом случае, для более конкретных вопросов и ответов о Orion SDK и SWIS, возможно, вы захотите взглянуть на Thwack Foru m Orion SDK.

Есть также автоматические ассоциации между таблицами в SWQL, например, SWQL ниже не использует JOINs но звонки из нескольких таблиц:

SELECT E0.[Node].Caption, E0.AssignmentName, E0.CustomPollerName, 
       E0.DetailsUrl, E0.DisplayName, E0.NodeID, E0.Status, E0.StatusDescription, 
       E0.StatusIconHint, E0.StatusLED, E0.UnManaged, E0.UnManageFrom, E0.UnManageUntil, E0.Uri, 
       E0.[Node].Description, E0.[CustomPoller].[OID] = '1.3.6.1.2.1.1.3',
       E0.[CustomPollerStatusScalar].[Status]
 FROM  Orion.NPM.CustomPollerAssignmentOnNode AS E0
 WHERE E0.[Node].[SysObjectID] IS NOT NULL
   AND E0.StatusDescription NOT LIKE 'Unmanaged'

Этот сайт предоставляет более подробную информацию и примеры.

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